2013-02-20 2 views
5

Так что я использую Cassandra в своем проекте, и мне нужно установить соединение между Eclipse и базой данных. Я попытался использовать JDBC-совместимый драйвер, который я нашел на code.google.com, но я получаю это исключение:Cassandra/Eclipse - Не удается установить соединение

Исключение из потока «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(); 
    } 
} 
} 

заранее спасибо :)

+0

Можете ли вы сказать нам версию драйвера вы используете? –

+0

Прежде всего Спасибо за ваш ответ! Я хочу только упомянуть, что я просто играю в главной роли с помощью Кассандры, поэтому я мало что знаю об этом. Я использую: Сервер сообщества DataStax | Версия 1.2.1 Eclipse | Версия: Juno Service Release 1 JDK | 6u38 windows x64 JRE6 Я надеюсь, что это ответит на ваш вопрос. – user2090879

ответ

3

Я побежал ваш код, используя this cql driver (версия 1.1.2, совместимый с Кассандрой 1.2 на JDK6 без ошибок. Может быть, вам недостает ссылок в вашем классе? Единственная проблема с кодом заключается в том, что вы назначаете переменную вызову метода, который не возвращает ничего ResultSet result = stmt.executeQuery(query);, и поэтому будет выбрано исключение java.sql.SQLNonTransientException.

Вы сказали, что новичок в Кассандре, просто дружелюбный совет, я бы сделал некоторые исследования по доступному APIs for Cassandra, прежде чем делать выбор.

Эти баночки я использовал

  • апаша-Cassandra-1.2.0-RC1-SNAPSHOT.jar
  • апаша-Cassandra-clientutil-1.2.0-RC1-SNAPSHOT.jar
  • апаша-Cassandra-комиссионном-1.2.0-RC1-SNAPSHOT.jar
  • Cassandra-1.1.2.jar-JDBC libthrift-0.9.0.jar log4j-1.2.16.jar
  • log4j-над-slf4j- 1.7.2.jar selenium-server-standalone-2.21.0.jar
  • SLF4J-апи-1.7.2.jar SLF4J-простой 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(); 
     } 
    } 
} 
+0

Большое вам спасибо за помощь! Я очень ценю это :) – user2090879

Смежные вопросы