Hello World of Cassandra 0.7 in Eclipse

前几天弄了0.6.8想凑合着先用,后来发现没有能够方便添加keyspace和col family的特性,就转向0.7了

 

run cassandra in eclipse的问题照着官方文档走就应该没有问题的...

 

http://wiki.apache.org/cassandra/RunningCassandraInEclipse

http://sunmoonone.iteye.com/blog/644022

 

 

关于CLI的使用,先手动添加一个keyspace - keysp1,CF是student

http://wiki.apache.org/cassandra/CassandraCli

 

代码上是拿原来的sample改的,有些注释过来了

package atest;

import org.apache.cassandra.thrift.Cassandra;
import org.apache.cassandra.thrift.Column;
import org.apache.cassandra.thrift.ColumnParent;
import org.apache.cassandra.thrift.ColumnPath;
import org.apache.cassandra.thrift.ConsistencyLevel;
import org.apache.cassandra.thrift.InvalidRequestException;
import org.apache.cassandra.thrift.NotFoundException;
import org.apache.cassandra.thrift.TimedOutException;
import org.apache.cassandra.thrift.UnavailableException;
import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.transport.TFramedTransport;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;

import common.test.Translater;


 public class SampleOne { 
     static Cassandra.Client cassandraClient; 
     static TTransport socket;
  
  
     private static void init(String keySpace) throws InvalidRequestException, TException { 
//       String server = "192.168.1.129"; 
         String server = "localhost";
         int port = 9160; 
  
         /* 首先指定cassandra server的地址 */ 
         socket = new TSocket(server, port); 
         System.out.println(" connected to " + server + ":" + port + "."); 
  
         TFramedTransport transport = new TFramedTransport(socket);
        
         /* 指定通信协议为二进制流协议 */ 
         TBinaryProtocol binaryProtocol = new TBinaryProtocol(transport); 
         cassandraClient = new Cassandra.Client(binaryProtocol); 
  
         /* 建立通信连接 */ 
         socket.open();
         cassandraClient.set_keyspace(keySpace);
     } 
  
  
     public static void main(String[] args) throws TException, TimedOutException, InvalidRequestException, UnavailableException, NotFoundException { 
         /* 选择需要操作的Keyspaces, 可以理解成数据库的表 */ 
         String keyspace= "keysp1";
        
         /* 初始化连接 */ 
         init(keyspace); 
        
         String row = "employee";
  
         /* 创建一个Table Name */ 
         String tableName = "student";
        
         /* 插入一条记录 */
         insertOrUpdate(tableName,row,"name","happy birthday!",System.currentTimeMillis());
         /* 删除一条记录 */
         //delete(keyspace,tableName,row,"name",System.currentTimeMillis());
         /* 获取一条记录 (由于插入和删除是同一条记录,有可能会检索不到哦!请大家主意!*/
         Column column = getByColumn(tableName,row,"name", System.currentTimeMillis());
        
         System.out.println("read row " + row); 
         System.out.println("column name " + ":" + new String(column.getName())); 
         System.out.println("column value" + ":" + new String(column.getValue())); 
         System.out.println("column timestamp" + ":" + (column.timestamp)); 
        
         close();
     }
    
     /**
      * 插入记录
      */
     public static void insertOrUpdate(String tableName, String rowParam,String ColumnName,String ColumnValue,long timeStamp) 
         throws TException, TimedOutException, InvalidRequestException, UnavailableException, NotFoundException{
         /* 数据所在的行标 */
         String row = rowParam;
  
         /* 创建一个column path */ 
         ColumnParent parent = new ColumnParent(tableName); 
         Column col = new Column();
         col.setName(ColumnName.getBytes());
         col.setValue(ColumnValue.getBytes());
        
         /* 执行插入操作,指定keysapce, row, col, 和数据内容, 后面两个参数一个是timestamp, 另外一个是consistency_level
          * timestamp是用来做数据一致性保证的, 而consistency_level是用来控制数据分布的策略,前者的理论依据是bigtable, 后者的理论依据是dynamo
          */ 
        cassandraClient.insert(Translater.toByteBuffer(row), parent, col, ConsistencyLevel.ONE);
     }
    
     /**
      * 删除记录
      */
     public static void delete(String tableName, String rowParam,String ColumnName,long timeStamp)
         throws TException, TimedOutException, InvalidRequestException, UnavailableException, NotFoundException{
         /* 选择需要操作的Keyspaces, 存放数据表所在的空间位置 */ 
         /* 数据所在的行标 */
         String row = rowParam; 
  
         /* 创建一个column path */ 
         ColumnPath col = new ColumnPath(tableName); 
         col.setColumn(ColumnName.getBytes());
        
         /* 执行删除操作,指定keysapce, row, col, 后面两个参数一个是timestamp, 另外一个是consistency_level
          * timestamp是用来做数据一致性保证的, 而consistency_level是用来控制数据分布的策略,前者的理论依据是bigtable, 后者的理论依据是dynamo
          */ 
        cassandraClient.remove(Translater.toByteBuffer(row), col, System.currentTimeMillis(), ConsistencyLevel.ONE);
     }
    
     /**
      * 获取数据
      */
     public static Column getByColumn(String tableName, String rowParam,String ColumnName,long timeStamp)
      throws TException, TimedOutException, InvalidRequestException, UnavailableException, NotFoundException{

      /* 创建一个column path */ 
      ColumnPath col = new ColumnPath(tableName); 
      col.setColumn(ColumnName.getBytes());
     
      /* 执行查询操作,指定keysapce, row, col, timestamp
       * timestamp是用来做数据一致性保证的, 而consistency_level是用来控制数据分布的策略,前者的理论依据是bigtable, 后者的理论依据是dynamo
       */ 
      Column column = cassandraClient.get(Translater.toByteBuffer(rowParam), col, ConsistencyLevel.ONE).column; 
      return column;
     }
    
    
     /**
      *    关闭当前的远程访问连接
      */
     public static void close() {
         socket.close();
    }
 } 

 

 Translater的代码

package common.test;

import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;

public class Translater {

	public static Charset charset = Charset.forName("UTF-8");
	public static CharsetEncoder encoder = charset.newEncoder();
	public static CharsetDecoder decoder = charset.newDecoder();

	public static ByteBuffer toByteBuffer(String msg) {
		try {
			return encoder.encode(CharBuffer.wrap(msg));
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	public static String toString(ByteBuffer buffer) {
		String data = "";
		try {
			int old_position = buffer.position();
			data = decoder.decode(buffer).toString();
			// reset buffer's position to its original so it is not altered:
			buffer.position(old_position);
		} catch (Exception e) {
			e.printStackTrace();
			return "";
		}
		return data;
	}
}

 

其实关于连接的几行代码还是不准确,自己太菜了,继续上链接

http://rucbing.iteye.com/blog/789229

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值