2013-02-20 9 views
5

Quindi sto utilizzando Cassandra nel mio progetto e devo stabilire una connessione tra Eclipse e il database. Ho cercato di usare un driver JDBC-compliant che ho trovato su code.google.com ma sto ottenendo questa eccezione:Cassandra/Eclipse - Impossibile effettuare la connessione

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: Indice String fuori portata: - 1

Questo è il mio codice:.

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

Grazie in anticipo :)

+0

Può dirci la versione del driver che si sta utilizzando? –

+0

Prima di tutto Grazie per la tua risposta! Voglio solo dire che sto solo interpretando Cassandra, quindi non ne so molto. Sto usando: Server dati DataStax | Versione 1.2.1 Eclipse | Versione: Juno Service Release 1 JDK | 6u38 windows x64 JRE6 Spero che questo risponda alla tua domanda. – user2090879

risposta

3

ho eseguito il codice utilizzando this cql driver (compatibile con Cassandra 1.2 Versione 1.1.2 su JDK6 senza errori. Forse ti mancano riferimenti nel tuo classpath? L'unico problema con il codice è che si assegna una variabile a una chiamata di metodo che non restituirà nulla ResultSet result = stmt.executeQuery(query); e quindi verrà generata un'eccezione .

Hai detto che sei nuovo a Cassandra, solo qualche consiglio amichevole, vorrei fare qualche ricerca sul APIs for Cassandra disponibile prima di fare una scelta.

Queste sono le JAR che ho usato

  • apache-cassandra-1.2.0-rc1-SNAPSHOT.jar
  • apache-cassandra-clientutil-1.2.0-rc1-SNAPSHOT.jar
  • apache-cassandra-risparmio-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-semplici-1.7.2.jar

codice completo che mi sono imbattuto:

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

Grazie mille per il vostro aiuto! Lo apprezzo davvero :) – user2090879

Problemi correlati