2013-02-20 13 views
5

Używam Cassandry w moim projekcie i muszę nawiązać połączenie między Eclipse i bazą danych. Próbowałem użyć sterownika zgodnego z JDBC, który znalazłem na code.google.com, ale otrzymuję ten wyjątek:Cassandra/Eclipse - Nie można nawiązać połączenia

Wyjątek w wątku "main" java.lang.StringIndexOutOfBoundsException: Indeksy ciągów poza zakresem: - 1

to jest mój kod.

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

góry dzięki :)

+0

Czy możesz powiedzieć nam wersję sterownika używasz? –

+0

Przede wszystkim Dziękuję za odpowiedź! Chcę tylko wspomnieć, że po prostu używam Cassandry, więc nie wiem zbyt wiele na ten temat. Używam: DataStax Community Server | Wersja 1.2.1 Eclipse | Wersja: Juno Service Release 1 JDK | 6u38 windows x64 JRE6 Mam nadzieję, że to odpowie na twoje pytanie. – user2090879

Odpowiedz

3

Pobiegłem za pomocą kodu (wersja 1.1.2 this cql driver zgodny z Cassandrą 1.2 na JDK6 bez błędu. Może brakuje Ci referencji w swojej klasie? Jedynym problemem związanym z kodem jest to, że przypisujesz zmienną do wywołania metody, która nie zwróci niczego, co jest ResultSet result = stmt.executeQuery(query);, a więc zostanie zgłoszony wyjątek java.sql.SQLNonTransientException.

Powiedziałeś, że jesteś nowy dla Cassandry, tylko kilka przyjaznych rad, chciałbym zrobić kilka badań na temat dostępnych APIs for Cassandra przed dokonaniem wyboru.

Są słoiki, że stosowane

  • Apache'owi Cassandro-1.2.0-RC1-SNAPSHOT.jar
  • Apache'owi Cassandro-clientutil-1.2.0-RC1-SNAPSHOT.jar
  • Apache'owi Cassandro-oszczędność-1.2.0-RC1-SNAPSHOT.jar
  • Cassandro-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

Pełny kod, który wpadłem:

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

Dziękuję bardzo za pomoc! Naprawdę to doceniam :) – user2090879

Powiązane problemy