Cassandra 与卡桑德拉的CQL3连接

Cassandra 与卡桑德拉的CQL3连接,cassandra,cql,Cassandra,Cql,我正在实现一个连接到远程Cassandra集群的简单Java程序。我已经按照论坛上所有的问答说明进行了操作,但仍然有错误。下面是java代码: import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class DataReader { public

我正在实现一个连接到远程Cassandra集群的简单Java程序。我已经按照论坛上所有的问答说明进行了操作,但仍然有错误。下面是java代码:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DataReader {

public static void main(String[] args) throws Exception {

  Connection con = null;
  try {
   Class.forName("org.apache.cassandra.cql.jdbc.CassandraDriver");
   con = DriverManager.getConnection("jdbc:cassandra://62.31.3.185:9160/proto");

   String query = "SELECT user_name, password, first_name, last_name, session_token   
          FROM users WHERE user_name=tigris";
   Statement stmt = con.createStatement();
   ResultSet result = stmt.executeQuery(query);

   while (result.next()) {
      System.out.println(result.getString("user_name"));
      System.out.println(result.getString("password"));
      System.out.println(result.getString("first_name"));
      System.out.println(result.getString("last_name"));
      System.out.println(result.getString("session_token"));
   }

 } catch (ClassNotFoundException e) {
   e.printStackTrace();
 } catch (SQLException e) {
   e.printStackTrace();
 } finally {
   if (con != null) {
   try {
     con.close();
   } catch (SQLException e) {
     e.printStackTrace();
   }
     con = null;
   }
  }
 }
} 
下面是堆栈跟踪:

java.sql.SQLSyntaxErrorException:第0行:-1输入“”处没有可行的替代方案 '从user\u name=tigris的用户中选择用户名、密码、名字、姓氏、会话令牌' 位于org.apache.cassandra.cql.jdbc.CassandraStatement.doExecute(CassandraStatement.java:181) 位于org.apache.cassandra.cql.jdbc.CassandraStatement.executeQuery(CassandraStatement.java:229) 位于CqlConnection.main(CqlConnection.java:19) 原因:InvalidRequestException(原因:第0行:-1行输入“”处没有可行的替代方案) 在org.apache.cassandra.thrift.cassandra$execute\u cql3\u query\u result.read(cassandra.java:37849) 位于org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:78) 在org.apache.cassandra.thrift.cassandra$Client.recv_execute_cql3_查询(cassandra.java:1562) 在org.apache.cassandra.thrift.cassandra$Client.execute_cql3_查询(cassandra.java:1547) 位于org.apache.cassandra.cql.jdbc.CassandraConnection.execute(CassandraConnection.java:468) 位于org.apache.cassandra.cql.jdbc.CassandraConnection.execute(CassandraConnection.java:494) 位于org.apache.cassandra.cql.jdbc.CassandraStatement.doExecute(CassandraStatement.java:164) ... 还有两个

我的类路径中有以下库:

cassandra-clientutil-1.2.6 cassandra-clientutil-2.0.7 cassandra-jdbc-1.2.5 卡桑德拉-节俭-1.2.6 番石榴-17.0 libthrift-0.9.0


非常感谢您的帮助。

我想这是您的问题:

WHERE user_name=tigris
如果您要从
cqlsh
尝试,您必须在“底格里斯”周围加上单引号,如下所示:

WHERE user_name='tigris'
这就是你要做的,让它在这里发挥作用

当然,如果使用准备好的语句和绑定变量,就可以完全避免这个问题。下面是它的外观:

String query = "SELECT user_name, password, first_name, last_name, session_token   
      FROM users WHERE user_name=?";
PreparedStatement stmt = con.prepareStatement(query);

stmt.setString(1, "tigris");
ResultSet result = stmt.executeQuery();

我强烈建议考虑使用Cassandra CQL驱动程序(例如,而不是在很长时间内没有更新的JDBC库)。