2013-08-04 93 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

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