Cassandra / Eclipse - 无法建立连接

时间:2013-02-20 11:24:03

标签: eclipse jdbc connection cassandra

所以我在我的项目中使用Cassandra,我必须在Eclipse和数据库之间建立连接。我尝试使用我在code.google.com上找到的兼容JDBC的驱动程序,但我遇到了这个例外:

线程“main”中的异常java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1

这是我的代码:

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

提前致谢:)

1 个答案:

答案 0 :(得分:3)

我使用this cql driver(版本1.1.2与cassandra 1.2兼容)运行代码。 在没有错误的JDK6上。也许你缺少类路径中的引用?代码的唯一问题是您将一个变量分配给一个方法调用,该方法调用不会返回任何ResultSet result = stmt.executeQuery(query);,因此会抛出java.sql.SQLNonTransientException异常。

你说你是Cassandra的新手,只是一些友好的建议,我会在做出选择之前对可用的APIs for Cassandra做一些研究。

这些是我使用的JAR

  • Apache的卡桑德拉-1.2.0-RC1-SNAPSHOT.jar
  • Apache的卡桑德拉-clientutil-1.2.0-RC1-SNAPSHOT.jar
  • Apache的卡桑德拉-节俭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-simple-1.7.2.jar

我跑的完整代码:

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