2013-08-04 174 views
1

我是新來卡桑德拉和我想連接到卡桑德拉與Java jdbc.I使用下面的代碼,並得到這個錯誤信息...連接卡桑德拉和Java

try { 
    Class.forName(driver).newInstance(); 
    con = DriverManager.getConnection(url, username, password); 
    System.out.println(con); 
} catch(Exception e){ 
    e.printStackTrace(); 
} 

ERROR: Exception in thread "main" java.lang.NoSuchMethodError: org.apache.cassandra.thrift.Cassandra$Client.set_cql_version(Ljava/lang/String;)V at org.apache.cassandra.cql.jdbc.CassandraConnection.(CassandraConnection.java:138) at org.apache.cassandra.cql.jdbc.CassandraDriver.connect(CassandraDriver.java:92) at java.sql.DriverManager.getConnection(DriverManager.java:620) at java.sql.DriverManager.getConnection(DriverManager.java:200) at connect.Connect.main(Connect.java:24)

我也使用這些罐子:

  • 赫克託 - 核心1.1-2
  • libthrift-0.6.1.jar
  • 卡桑德拉-JDBC-1.2.1.jar
  • 卡桑德拉 - 全0.7.0.jar

誰能幫助我嗎?

+1

您還需要cql jar。可以從Apache網站下載它。 – Chandana

+0

看起來這個錯誤背後的原因是多個Cassandra在classpath中節省了jar版本。這是Cassandra 1.2中引入的「Cassandra $ Client.set_cql_version」,但在早期版本中不可用。 –

回答

1

聽起來像JDBC jar和其他Cassandra jar之間的版本不匹配。

+0

在此先感謝..我是新的,所以你的意思是所有的jar文件應該是相同的版本? –

+0

不一定 - 我對cassandra-jdbc或cassandra-all,甚至cassandra司機一無所知。但是你看到的錯誤信息是因爲'org.apache.cassandra.cql.jdbc.CassandraConnection'試圖調用'org.apache.cassandra.thrift.Cassandra $ Client'上的一個方法,該方法在你的環境中不存在。這發生在A類針對一個版本的B類編譯時(該方法必須在編譯時存在,否則編譯將失敗),但部署環境中的B類沒有該方法,這意味着存在版本不匹配。 –

+0

所以最好的答案是找出'cassandra-jdbc-1.2.1'是否適用於'cassandra-all'的版本。 –

2

您可能正面臨Anse Danesh提到的版本不匹配問題。對於從Java中與卡桑德拉的工作,我會建議使用DataStax卡桑德拉Java驅動程序
https://github.com/datastax/java-driver

它真正易於使用,並正確由DataStax社區維護。

+0

坦克很多....它的工作.. –