5

そのため、プロジェクトで Cassandra を使用しており、Eclipse とデータベースを接続する必要があります。code.google.com で見つけた JDBC 準拠のドライバーを使用しようとしましたが、次の例外が発生します。

スレッド「メイン」での例外 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();
     }
 }
}

前もって感謝します :)

4

1 に答える 1

3

この cql ドライバー(cassandra 1.2 と互換性のあるバージョン 1.1.2。JDK6 でエラーなし)を使用してコードを実行しました。クラスパスで参照が欠落している可能性がありますか?コードの唯一の問題は、メソッド呼び出しに変数を割り当てていることです。何も返さないResultSet result = stmt.executeQuery(query);ため、java.sql.SQLNonTransientException例外がスローされます。

あなたは Cassandra を初めて使用すると言っていましたが、親切なアドバイスです。選択を行う前に、Cassandra で利用可能な API について調査します。

これらは私が使用したJARです

  • 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-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();
         }
     }
}
于 2013-02-20T17:57:34.437 に答える