2013-07-16 81 views
0

我嘗試使用以下代碼來連接本地系統上的CASSANDRA數據庫。Cassandra CQL JDBC異常:java.lang.ClassNotFoundException:org.apache.thrift.TEnum

package com.prm.cassandra; 

import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.ResultSetMetaData; 

public class CassandraUserManager { 
public static void connectToCassandra(){ 
    DataBaseConnection dbCon = new DataBaseConnection(); 
    Connection con = null; 
    PreparedStatement pstmt = null; 
    ResultSet rs = null; 
    try{ 
     con = dbCon.getConnection(); 

     String query = "SELECT * from users"; 
     pstmt = con.prepareStatement(query); 
     rs = pstmt.executeQuery(); 
     System.out.println("The Details are printed below."); 
     ResultSetMetaData rmd = rs.getMetaData(); 
     while(rs.next()){ 
      for(int i=0; i<rmd.getColumnCount(); i++) 
      System.out.print(" "+rs.getString(i)); 
     } 
    }catch(Exception ex){ 
     ex.printStackTrace(); 
    }finally{ 
     dbCon.closeResources(con, pstmt, rs); 
    } 
} 
} 

,並用於以下行來獲取數據庫連接

Class.forName("org.apache.cassandra.cql.jdbc.CassandraDriver"); 
Connection con = DriverManager.getConnection("jdbc:cassandra://127.0.0.1:9160/demo"); 

,但得到以下運行時異常。

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 
SLF4J: Defaulting to no-operation (NOP) logger implementation 
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 
Jul 16, 2013 1:08:39 PM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet connectCassandra threw exception 
java.lang.ClassNotFoundException: org.apache.thrift.TEnum 
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1360) 
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1206) 
at java.lang.ClassLoader.defineClass1(Native Method) 
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) 
at java.lang.ClassLoader.defineClass(ClassLoader.java:615) 
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 
at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1819) 
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:872) 
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1327) 
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1206) 
at org.apache.cassandra.cql.jdbc.Utils.<clinit>(Utils.java:62) 
at org.apache.cassandra.cql.jdbc.CassandraDriver.connect(CassandraDriver.java:85) 
at java.sql.DriverManager.getConnection(DriverManager.java:582) 
at java.sql.DriverManager.getConnection(DriverManager.java:207) 
at com.prm.cassandra.DataBaseConnection.getConnection(DataBaseConnection.java:14) 
at com.prm.cassandra.CassandraUserManager.connectToCassandra(CassandraUserManager.java:15) 
at com.prm.cassandra.CassandraServlet.doGet(CassandraServlet.java:28) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) 
at java.lang.Thread.run(Thread.java:680) 

我已經使用了下文提到的罐子通過CASSANDRA-JDBC Example

apache-cassandra-clientutil-1.2.6.jar 
apache-cassandra-thrift-1.2.6.jar 
cassandra-jdbc-1.2.5.jar 

和下面的一個作爲建議記錄

slf4j-api-1.6.1.jar 

請幫我解決這個。等待一個有用的答案。提前致謝。

回答

0

請嘗試使用下面的代碼....以及網站中給出的程序...您將能夠解決相同的問題。

http://www.bigdataplanet.info/2013/08/How-to-use-Cassandra-CQL-in-your-Java-Application.html

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 
public class CqlConnection { 


public static void main(String[] args) throws Exception{ 

    Connection con = null; 
    try { 
    Class.forName("org.apache.cassandra.cql.jdbc.CassandraDriver"); 
    con = 
DriverManager.getConnection("jdbc:cassandra://localhost:9160/Keyspace"); 

    String query = "SELECT * FROM column_family where gender=f "; 

    Statement stmt = con.createStatement(); 
    ResultSet result = stmt.executeQuery(query); 

    while (result.next()) { 
    System.out.println(result.getString("user_name")); 
    System.out.println(result.getString("gender")); 
    System.out.println(result.getString("password")); 
    } 

    } catch (ClassNotFoundException e) { 
    e.printStackTrace(); 
    } catch (SQLException e) { 
    e.printStackTrace(); 
    } finally { 
    if (con != null) { 
    try { 
    con.close(); 
    } catch (SQLException e) { 
    e.printStackTrace(); 
    } 
    con = null; 
    } 
    } 

} 
+1

謝謝您的回答。我想我已經使用了你所建議的同樣的東西。而我的Keyspace名稱是** demo **。這一定是我無法弄清楚的配置問題。請仔細閱讀我提到的細節。 –