Cassandra3.9版本Java驱动Datastax Java Driver使用手册1-数据库连接

所需jar包:http://download.csdn.net/detail/nangongyanya/9738844

package com.cassandra;

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

public class Connect {

	// 此示例使用同步API,需要下载额外的Guava.jar
	public static void main(String[] args) {
		Cluster cluster = null;
		try {
			// Cluster对象是驱动程序的主入口点。 它保存了实际Cassandra集群(特别是元数据)的已知状态。
			// 这个类是线程安全的,你应该创建一个单独的实例(每个目标Cassandra集群),并在你的应用程序中共享它;
			cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
			// Session用来执行查询。 同样,它是线程安全的,应该重复使用;
			Session session = cluster.connect();
			// 我们使用execute来向Cassandra发送查询。 这将返回一个ResultSet,它本质上是一个Row对象的集合。
			// 在下一行,我们提取第一行(在这种情况下是唯一的一行);
			ResultSet rs = session
					.execute("select release_version from system.local");
			Row row = rs.one();
			// 我们从行中提取第一个(和唯一的)列的值;
			System.out.println(row.getString("release_version"));
		} finally {
			if (cluster != null)
				// 最后,我们在完成后关闭集群。 这也将关闭从此群集创建的任何会话。
				// 此步骤很重要,因为它释放了底层资源(TCP连接,线程池...)。
				// 在实际应用程序中,通常在关闭时执行此操作(例如,取消部署webapp时)。
				cluster.close(); 
		}
	}
}


cluster初始化
最简单的方法是使用Cluster.Builder进行编程,它提供了流畅的API:
Cluster cluster = Cluster.builder()
        .withClusterName("myCluster")
        .addContactPoint("127.0.0.1")
        .build();

如果希望从外部源(如属性文件或Web服务)检索设置。 您需要提供加载这些设置的Initializer的实现:
Initializer myInitializer = ... // your implementation
Cluster cluster = Cluster.buildFrom(myInitializer);

新建的集群实例不会自动初始化; 将由以下操作之一触发:
     显式调用cluster.init();
     调用cluster.getMetadata();
     创建与cluster.connect()或其变体之一的会话;
     在使用cluster.newSession()创建的会话上调用session.init()。

初始化顺序如下:
     初始化内部状态(线程池,实用程序组件等);
     请尝试按顺序连接到每个接触点。 该顺序不是完全确定的(实际上,如果大量客户端共享相同的接触点,则驱动程序会打乱列表以避免热点)。 如果没有联系点回复,则抛出NoHostAvailableException,并且进程在此停止;
     否则,选择成功的联络点作为控制主机。 驱动程序与它协商本机协议版本,并查询其系统表以发现其他主机的地址。
注意,在这个阶段,只有控制连接已经建立。 只有在创建会话时才会打开与其他主机的连接。

session
默认情况下,会话不绑定到任何特定的键空间。 您需要在查询中为表格名称添加前缀:
Session session = cluster.connect();
session.execute("select * from myKeyspace.myTable where id = 1");

您还可以在构建时指定键空间名称,当表名称不合格时,将用作默认值:
Session session = cluster.connect("myKeyspace");
session.execute("select * from myTable where id = 1");
session.execute("select * from otherKeyspace.otherTable where id = 1");

当前存在对命名会话的已知限制,其导致驱动程序在某些情况下意外地阻止调用线程; 如果使用完全异步模型,应该使用没有键空间的会话。
如果会话由多个线程共享,在运行时切换键空间很容易导致意外的查询失败。
一般来说,推荐的方法是使用没有键空间的单个会话,并在所有查询前面加上前缀。

执行查询
您使用会话的execute方法运行查询:
ResultSet rs = session.execute("select release_version from system.local");

执行execute会生成ResultSet,它是Row的可迭代集合。 处理所有行的基本方法是使用Java的for-each循环:
for (Row row : rs) {
    // process the row
}

当你知道只有一行(或者只对第一行感兴趣)时,驱动程序提供了一个方便的方法:
Row row = rs.one();

Row提供getter来提取列值; 它们可以通过位置或名称来获取:
Row row = session.execute("select first_name, last_name from users where id = 1").one();

// The two are equivalent:
String firstName = row.getString(0);
String firstName = row.getString("first_name");

要区分NULL和实际值,请使用isNull:
Integer age = row.isNull("age") ? null : row.getInt("age");

为了确保类型安全,收集的获取使用getter。 调用方法时,需要提供与您的CQL类型匹配的类型参数:
// Assuming given_names is a list:
List givenNames = row.getList("given_names", String.class);

对于嵌套集合,元素类型是通用的,不能表示为Java类实例。 我们使用Guava的TypeToken:
// Assuming teams is a set>:
TypeToken> listOfStrings = new TypeToken>() {};
Set> teams = row.getSet("teams", listOfStrings);

Row提供了一个API来在运行时浏览列元数据:
for (ColumnDefinitions.Definition definition : row.getColumnDefinitions()) {
    System.out.printf("Column %s has type %s%n",
            definition.getName(),
            definition.getType());
}

CQL数据类型Java数据类型的对应关系表
CQL3 data type Getter name Java type
ascii getString java.lang.String
bigint getLong long
blob getBytes java.nio.ByteBuffer
boolean getBool boolean
counter getLong long
date getDate LocalDate
decimal getDecimal java.math.BigDecimal
double getDouble double
float getFloat float
inet getInet java.net.InetAddress
int getInt int
list getList java.util.List
map getMap java.util.Map
set getSet java.util.Set
smallint getShort short
text getString java.lang.String
time getTime long
timestamp getTimestamp java.util.Date
timeuuid getUUID java.util.UUID
tinyint getByte byte
tuple getTupleValue TupleValue
user-defined types getUDTValue UDTValue
uuid getUUID java.util.UUID
varchar getString java.lang.String
varint getVarint java.math.BigInteger



你可能感兴趣的:(--Cassandra)