簡體   English   中英

CQL3與Cassandra的連接

[英]CQL3 Connection with Cassandra

我正在實現一個連接到遠程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在輸入'''沒有可行的替代方法SELECT user_name,password,first_name,last_name,session_token FROM users WHERE user_name = tigris'at org.apache.cassandra.cql.jdbc.CassandraStatement.doExecute (CassandraStatement.java:181)atg.apache.cassandra.cql.jdbc.CassandraStatement.executeQuery(CassandraStatement.java:229)at CqlConnection.main(CqlConnection.java:19)引起:InvalidRequestException(why:line 0: - 1在org.apache.cassandra.thrift.Cassandra $ execute_cql3_query_result.read(Cassandra.java:37849)的org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:78)org處的輸入''處沒有可行的替代方案。 apache.cassandra.thrift.Cassandra $ Client.recv_execute_cql3_query(Cassandra.java:1562)位於org.apache.cassandra.thrift.Cassandra $ Client.execute_cql3_query(Cassandra.java:1547)org.apache.cassandra.cql.jdbc。 CassandraConnection.execute(CassandraConnection.java:468)位於org.apache.cassandra.cql.jdbc.CassandraConnection.execute(Cassandr) aConnection.java:494)org.apache.cassandra.cql.jdbc.CassandraStatement.doExecute(CassandraStatement.java:164)... 2更多

我的classpath中有以下庫:

cassandra-clientutil-1.2.6 cassandra-clientutil-2.0.7 cassandra-jdbc-1.2.5 cassandra-thrift-1.2.6 guava-17.0 libthrift-0.9.0

任何幫助將不勝感激。

我猜這是你的問題:

WHERE user_name=tigris

如果你是從cqlsh嘗試那個,你必須在“tigris”周圍加上單引號,如下所示:

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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM