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<text>:
List<String> givenNames = row.getList("given_names", String.class);
对于嵌套集合,元素类型是通用的,不能表示为Java类实例。 我们使用Guava的TypeToken:
// Assuming teams is a set<list<text>>:
TypeToken<List<String>> listOfStrings = new TypeToken<List<String>>() {};
Set<List<String>> 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 |
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。