2013-02-20 42 views
5

Vì vậy, tôi đang sử dụng Cassandra trong dự án của mình và tôi phải tạo kết nối giữa Eclipse và cơ sở dữ liệu. Tôi đã cố gắng sử dụng trình điều khiển tuân thủ JDBC mà tôi đã tìm thấy trên code.google.com nhưng tôi nhận được ngoại lệ này:Cassandra/Eclipse - Không thể tạo kết nối

Ngoại lệ trong chuỗi "chính" java.lang.StringIndexOutOfBoundsException: Chỉ mục chuỗi nằm ngoài phạm vi: - 1

Đây là mã của tôi:.

package cassandrasampledriver; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 
import org.apache.cassandra.cql.jdbc.DriverResolverException; 
import org.apache.cassandra.cql.jdbc.InvalidUrlException; 

public class CassandraDriver 
{ 

public static void main(String[] args) { 
    Connection con = null; 
    String KS = "cassandrademocql"; 

    try 
    { 
     Class.forName("org.apache.cassandra.cql.jdbc.CassandraDriver"); 
     con = DriverManager.getConnection("jdbc:cassandra://localhost:9160/" + KS); 

     Statement stmt = con.createStatement(); 
     String query = "DROP KEYSPACE cassandrademocql;"; 
     ResultSet result = stmt.executeQuery(query); 

    } 


    catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } 
    catch (SQLException e) { 
     e.printStackTrace(); 
    } 
} 
} 

Cảm ơn trước :)

+0

bạn có thể vui lòng cho chúng tôi biết phiên bản driver bạn đang sử dụng? –

+0

Trước hết Cảm ơn bạn đã trả lời! Tôi chỉ muốn đề cập rằng tôi chỉ đóng vai chính bằng cách sử dụng Cassandra vì vậy tôi không biết nhiều về nó. Tôi đang sử dụng: Máy chủ cộng đồng DataStax | Phiên bản 1.2.1 Eclipse | Phiên bản: Juno Service Release 1 JDK | 6u38 windows x64 JRE6 Tôi hy vọng điều này sẽ trả lời câu hỏi của bạn. – user2090879

Trả lời

3

tôi chạy mã của bạn sử dụng this cql driver (Phiên bản 1.1.2 tương thích với cassandra 1.2 trên JDK6 mà không có Lỗi. Có lẽ bạn đang thiếu tham chiếu trong classpath của bạn? Vấn đề duy nhất với mã là bạn đang gán một biến cho một cuộc gọi phương thức mà sẽ không trả lại bất cứ điều gì ResultSet result = stmt.executeQuery(query); và vì vậy một ngoại lệ java.sql.SQLNonTransientException sẽ được ném.

Bạn nói rằng bạn là người mới đối với Cassandra, chỉ là một số lời khuyên thân thiện, tôi sẽ thực hiện một số nghiên cứu về số APIs for Cassandra có sẵn trước khi đưa ra lựa chọn.

Đây là những lọ Tôi đã từng

  • apache-cassandra-1.2.0-rc1-SNAPSHOT.jar
  • apache-cassandra-clientutil-1.2.0-rc1-SNAPSHOT.jar
  • apache-cassandra-thrift-1.2.0-rc1-SNAPSHOT.jar
  • cassandra-jdbc-1.1.2.jar libthrift-0.9.0.jar log4j-1.2.16.jar
  • log4j-over-slf4j- 1.7.2.jar selenium-server-standalone-2.21.0.jar
  • slf4j-api-1.7.2.jar slf4j-đơn giản-1.7.2.jar

Full mã mà tôi chạy:

package cassandrasampledriver; 

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

public class CassandraDriver { 
    public static void main(String[] args) { 
     Connection con = null; 
     String KS = "cassandrademocql"; 

     try 
     { 
      Class.forName("org.apache.cassandra.cql.jdbc.CassandraDriver"); 
      con = DriverManager.getConnection("jdbc:cassandra://localhost:9160/" + KS); 

      Statement stmt = con.createStatement(); 
      String query = "DROP KEYSPACE cassandrademocql;"; 

      // Because you are droping the KS this will not return anything 
      // So the result set will be null and a java.sql.SQLNonTransientException exception will be thrown every time. 
      ResultSet result = stmt.executeQuery(query); 

     } 


     catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 
} 
+0

Cảm ơn bạn rất nhiều vì sự giúp đỡ của bạn! Tôi thực sự đánh giá cao nó :) – user2090879

Các vấn đề liên quan