欢迎投稿

今日深度:

java实现cassandra的增删改查,javacassandra

java实现cassandra的增删改查,javacassandra


转自:http://zhaoyanblog.com/archives/180.html

cassandra使用cql语言作为操作语言,cassandra在2.0之后,在操作上越来越像sql数据库的操作,这样想从传统关系型数据库,切换到cassandra的花,上手成本也越来越低。使用官方java驱动操作cassandra 非常简单。

maven引入驱动包

1
2
3
4
5
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-core</artifactId>
<version>2.0.1</version>
</dependency>

1、创建应用的唯一session。

1
2
3
Cluster cluster = Cluster.builder()
                         .addContactPoint("192.168.22.161")
                         .build();

这里构建一个集群对象,”192.168.22.161″ 是cassandra的种子节点(seed node).

1
Session session = cluster.connect();

你也可以针对一个特定的keyspace获取一个session

1
Session session = cluster.connect("mykeyspace");

session是线程安全的,所以一个应用中,你可以只有一个session实例,官方建议一个keyspace一个session。
2、session可以直接支持执行cql语句。

1
2
String cql = "select * from mykeyspace.tablename;";
session.execute(cql);

你完全可以用这种方式完成任意操作,记住cql语句后面一定要带分号。

3、如果你不想繁琐的去拼字符串,你可以用com.datastax.driver.core.Querybuilder。

insert 一条记录String cql = “insert into mykeyspace.tablename(a,b) values(1,2);”
你可以这样写:

1
2
3
session.execute(
QueryBuilder.insertInto("mykeyspace", "tablename")
            .values(new String[]{"a","b"}, new Object[]{1,2}));

delete 记录String cql = “delete from mykeyspace.tablename where a=1″;
你可以这样写:

1
2
3
session.execute(QueryBuilder.delete()
	   .from("mykeyspace", "tablename")
	   .where(QueryBuilder.eq("a", 1)));

update 记录String cql = “update mykeyspace.tablename set b=2 where a=1″

1
2
3
session.execute(QueryBuilder.update("mykeyspace", "tablename")
       .with(QueryBuilder.set("b", 2))
       .where(QueryBuilder.eq("a", 1)));

select 记录String cql = “select a, b from mykeyspace.tablename where a>1 and b<0″

1
2
3
4
5
6
7
8
9
10
11
ResultSet result = session.execute(QueryBuilder.select("a","b")
		.from("mykeyspace", "tablename")
		.where(QueryBuilder.gt("a", 1))
		.and(QueryBuilder.lt("a", 1)));
Iterator<Row> iterator = result.iterator();
while(iterator.hasNext())
{
	Row row = iterator.next();
	row.getInt("a");
	row.getInt("b");
}

注:cassandra的查询的支持是很有限的,对于查询的限制可以参考:
http://zhaoyanblog.com/archives/164.html

4、你也可以像jdbc那样使用预编译占位符的方式。

1
2
3
4
5
BoundStatement bindStatement = 
session.prepare(
"select * from mykeyspace.tablename where a=? and b=?")
.bind("1","2");
session.execute(bindStatement);

或者

1
2
3
4
5
6
PreparedStatement prepareStatement = 
session.prepare(
"select * from mykeyspace.tablename where a=? and b=?");
BoundStatement bindStatement = 
     new BoundStatement(prepareStatement).bind("1","2");
session.execute(bindStatement);

或者

1
2
3
4
5
6
7
Insert insert = 
QueryBuilder.insertInto("mykeyspace", "tablename")
.values(new String[]{"a","b"}, 
new Object[]{QueryBuilder.bindMarker(),QueryBuilder.bindMarker()});
BoundStatement bindStatement = 
    new BoundStatement(session.prepare(insert)).bind("1","2");
session.execute(bindStatement);

5、批量batch的方式也有的。

1
2
3
4
BatchStatement batchStatement = new BatchStatement();
batchStatement.add(insert);
batchStatement.add(bindStatement);
session.execute(batchStatement);

注:批量操作只支持INSERT,UPDATE,DELETE
cassandra新版的java驱动,是灵活多变的,文章里只是简单的示例了下,你可以通过驱动的源码,或者是官方的api文档,灵活的使用。

附:
增删改查demo

www.htsjk.Com true http://www.htsjk.com/cassandra/32800.html NewsArticle java实现cassandra的增删改查,javacassandra 转自:http://zhaoyanblog.com/archives/180.html cassandra使用cql语言作为操作语言,cassandra在2.0之后,在操作上越来越像sql数据库的操作,这样想从传统关系...
相关文章
    暂无相关文章
评论暂时关闭