如何使用Java类连接Cassandra

时间:2013-06-01 08:00:06

标签: java cassandra

我这样做是为了连接cassandra.But我的代码返回错误..这是我的代码

public class CassandraConnection {

public static void main(String[] args) {
    String serverIp = "166.78.10.41";
    String keyspace = "gamma";
    CassandraConnection connection;

    Cluster cluster = Cluster.builder()
            .addContactPoints(serverIp)
            .build();

    Session session = cluster.connect(keyspace);


    String cqlStatement = "SELECT * FROM TestCF";
    for (Row row : session.execute(cqlStatement)) {
        System.out.println(row.toString());
    }

}
}

这是错误日志..

  

无法在项目CassandraConnection上执行目标:无法解析项目com.mycompany的依赖项:CassandraConnection:jar:1.0-SNAPSHOT:无法解析以下工件:org.specs2:scalaz-effect_2.11.0-SNAPSHOT:jar :7.0.1-SNAPSHOT,org.scalaz:scalaz-effect_2.9.3:jar:7.1.0-SNAPSHOT:找不到工件org.specs2:scalaz-effect_2.11.0-SNAPSHOT:jar:7.0.1-SNAPSHOT - &gt ; [帮助1]

     

要查看错误的完整堆栈跟踪,请使用-e开关重新运行Maven。   使用-X开关重新运行Maven以启用完整的调试日志记录。

     

有关错误和可能的解决方案的更多信息,请阅读以下文章:[帮助1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException

2 个答案:

答案 0 :(得分:129)

您对此事做过任何研究吗?

选择一名司机

您需要一种与cassandra通信的方式,最好的选择是使用高级API。你有很多选择,但是当我们从高层看时,有两种选择。

  1. 基于CQL的驱动程序 - 对thrift执行的更高级别的抽象。另外,较新的工具,为cassandra提供支持/文档​​的公司建议新的cassandra应用程序是基于CQL的。
  2. 基于Thrift的驱动器 - 可以访问低级别存储,因此更容易出错。
  3. 我将使用datastax's CQL driver

    从datastax的github repo下载并构建驱动程序 OR 使用maven并添加以下依赖项:

    <dependency>
      <groupId>com.datastax.cassandra</groupId>
      <artifactId>cassandra-driver-core</artifactId>
      <version>2.1.3</version>
    </dependency>
    
    <dependency>
      <groupId>com.datastax.cassandra</groupId>
      <artifactId>cassandra-driver-mapping</artifactId>
      <version>2.1.2</version>
    </dependency>
    

    挑选maven是一个好主意,因为它将为你管理所有依赖项,但如果你不使用maven,至少你将学习如何管理jar和读取堆栈跟踪。


    代码

    driver's documentation很顺利。如果您遇到困难,请阅读该文档,其中包含大量示例。

    我将在整个示例中使用以下两个变量。

    String serverIP = "127.0.0.1";
    String keyspace = "system";
    
    Cluster cluster = Cluster.builder()
      .addContactPoints(serverIP)
      .build();
    
    Session session = cluster.connect(keyspace);
    
    // you are now connected to the cluster, congrats!
    

    <强>读取

    String cqlStatement = "SELECT * FROM local";
    for (Row row : session.execute(cqlStatement)) {
      System.out.println(row.toString());
    }
    

    创建/更新/删除

    // for all three it works the same way (as a note the 'system' keyspace cant 
    // be modified by users so below im using a keyspace name 'exampkeyspace' and
    // a table (or columnfamily) called users
    
    String cqlStatementC = "INSERT INTO exampkeyspace.users (username, password) " + 
                          "VALUES ('Serenity', 'fa3dfQefx')";
    
    String cqlStatementU = "UPDATE exampkeyspace.users " +
                          "SET password = 'zzaEcvAf32hla'," +
                          "WHERE username = 'Serenity';";
    
    String cqlStatementD = "DELETE FROM exampkeyspace.users " + 
                          "WHERE username = 'Serenity';";
    
    session.execute(cqlStatementC); // interchangeable, put any of the statements u wish.
    


    其他有用的代码

    创建Keyspace

    String cqlStatement = "CREATE KEYSPACE exampkeyspace WITH " + 
      "replication = {'class':'SimpleStrategy','replication_factor':1}";
    
    session.execute(cqlStatement);
    

    创建ColumnFamily(又名表)

    // based on the above keyspace, we would change the cluster and session as follows:
    Cluster cluster = Cluster.builder()
      .addContactPoints(serverIP)
      .build();
    Session session = cluster.connect("exampkeyspace");
    
    String cqlStatement = "CREATE TABLE users (" + 
                          " username varchar PRIMARY KEY," + 
                          " password varchar " + 
                          ");";
    
    session.execute(cqlStatement);
    

答案 1 :(得分:0)

要通过Java程序与cassandra连接,您需要向该程序添加一些基本依赖项。将以下依赖项添加到程序中。 Maven依赖项列表:

<dependency>
    <groupId>com.datastax.cassandra</groupId>
    <artifactId>cassandra-driver-core</artifactId>
    <version>3.6.0</version>
</dependency>

<dependency>
  <groupId>com.datastax.cassandra</groupId>
  <artifactId>cassandra-driver-mapping</artifactId>
  <version>3.6.0</version>
</dependency>

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.25</version>
</dependency>

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>1.7.25</version>
    <scope>test</scope>
</dependency>

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>21.0</version>
</dependency>

<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-all</artifactId>
    <version>4.1.20.Final</version>
</dependency>

<dependency>
    <groupId>com.codahale.metrics</groupId>
    <artifactId>metrics-core</artifactId>
    <version>3.0.2</version>
</dependency>

简单的Java程序,用于将cassandra连接到键空间并检索表的值

import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Row;
import com.datastax.driver.core.Session;

public class Test {

    public static void main(String[] args) {
        String serverIp = "127.0.0.1";
        String keyspace = "test";

        Cluster cluster = Cluster.builder()
                .addContactPoints(serverIp)
                .build();

        Session session = cluster.connect(keyspace);


        String cqlStatement = "SELECT * FROM emp";
        for (Row row : session.execute(cqlStatement)) {
            System.out.println(row.toString());
        }

        session.close();
    }
}

该程序的Git Hub Repo作为maven项目:GitURL