作者brandonron (假嗨)
看板java
标题[问题] 如何写入资料库(Cassandra)
时间Wed Jul 24 18:48:38 2013
小弟依旧不材,始终改写不出我想要的程式码
(努力看参考资料到半夜还是不会,我好弱.....Orz)
但放弃就是代表我认输,还是要上来发问解惑!
希望有高手的写法能帮助我,让我效法你的高超程式能力........
---------------------------参考:Thrift Example JAVA-----------------------
package com.test;
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.util.List;
import org.apache.cassandra.thrift.Cassandra;
import org.apache.cassandra.thrift.Column;
import org.apache.cassandra.thrift.ColumnOrSuperColumn;
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.SlicePredicate;
import org.apache.cassandra.thrift.SliceRange;
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.protocol.TProtocol;
import org.apache.thrift.transport.TFramedTransport;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
public class WriteData
{
public static void main(String[] args)
throws TException, InvalidRequestException, UnavailableException,
UnsupportedEncodingException, NotFoundException, TimedOutException
{
//client 连线设定
TTransport tr = new TFramedTransport(new TSocket("localhost",
9160));
TProtocol proto = new TBinaryProtocol(tr);
Cassandra.Client client = new Cassandra.Client(proto);
tr.open();
String key_user_id = "1"; //row_key值
// insert data line 39~65
long timestamp = System.currentTimeMillis();
//keyspace1=keyspace_name 如同Excel案名称(workbook)
client.set_keyspace("keyspace1");
//test=column_family_name 如同 Excel内的分页名称(sheekname)
ColumnParent parent = new ColumnParent("test"); //column_family_name
//insert 一笔资料:name、age
Column nameColumn = new Column(toByteBuffer("name"));
//column_field_name
nameColumn.setValue(toByteBuffer("Chris Goffinet"));
//column_field_value
nameColumn.setTimestamp(timestamp);
/*
* cassandra-cli insert
* >>set column_family_name [row_key] [column_name] ='value';
*/
client.insert(toByteBuffer(key_user_id), parent, nameColumn,
ConsistencyLevel.ONE);
Column ageColumn = new Column(toByteBuffer("age"));
//column_field_name
ageColumn.setValue(toByteBuffer("24")); //column_field_value
ageColumn.setTimestamp(timestamp);
client.insert(toByteBuffer(key_user_id), parent, ageColumn,
ConsistencyLevel.ONE);
ColumnPath path = new ColumnPath("test");
// read single column
path.setColumn(toByteBuffer("name"));
System.out.println(client.get(toByteBuffer(key_user_id), path,
ConsistencyLevel.ONE));
/*
* path.setColumn(toByteBuffer("age"));
* System.out.println(client.get(toByteBuffer(key_user_id), path,
ConsistencyLevel.ONE));
*/
//row read entire
SlicePredicate predicate = new SlicePredicate();
SliceRange sliceRange = new SliceRange(toByteBuffer(""),
toByteBuffer(""), false, 10);
predicate.setSlice_range(sliceRange);
List<ColumnOrSuperColumn> results =
client.get_slice(toByteBuffer(key_user_id), parent, predicate,
ConsistencyLevel.ONE);
for (ColumnOrSuperColumn result : results)
{
Column column = result.column;
System.out.println(toString(column.name) + " -> " +
toString(column.value));
}
tr.close();
}
public static ByteBuffer toByteBuffer(String value) throws
UnsupportedEncodingException
{
return ByteBuffer.wrap(value.getBytes("UTF-8"));
}
public static String toString(ByteBuffer buffer) throws
UnsupportedEncodingException
{
byte[] bytes = new byte[buffer.remaining()];
buffer.get(bytes);
return new String(bytes, "UTF-8");
}
}
-------------------------------------我的问题---------------------------------
假如Excel内有5笔资料(自己建立的测试资料);rows=5,column=2
而上面程式码是将写入的资料先写在程式码内来进行插入(name、age)
其中row_key(=key_user_id)是唯一值,我有想过用回圈来改变它
让每次插入一笔完整资料(设定row_key初始值1)後,下一笔row_key=row_key+1
但它写法是String的方式,我试着改用int就失败了。(不符合它的toByteBuffer用法)
Q:我要如何改写上述程式才能将我要的Excel的资料依序的汇入资料库,
且每笔row_key值不会相同?
(有写一个Java 读取Excel的程式,不知道是否有需要PO上来看)
我想学会这个方法跟观念,求高手详细些写法,让我这新手更加进步(恳求您教我)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.127.218.68
1F:→ brandonron:我的"材"打错了,抱歉! "材→才" 07/24 18:49
2F:→ brandonron:不知道文章是否违版规,若有请告知我,我会改善 07/24 18:53
3F:推 wannawanna:我觉得你的问题跟excel和cassandra没太大关系... 07/24 19:38
4F:→ wannawanna:key_user_id用int递增 insert之前再转成字串应该就好了 07/24 19:41
5F:→ realmeat:String.valueOf() 拿去配 07/24 21:39
6F:→ brandonron:太感谢W大的方法,我会这个使用方法了,谢谢!! 07/24 21:59
7F:→ brandonron:和realmeat大提供的方法,感谢! 07/24 22:15
8F:→ brandonron:目前还在努力怎抓到资料後再汇入资料库的程式写法.... 07/24 22:18
9F:→ brandonron:突然写的灵感一直涌现,感觉快成功了....(通灵了!) 07/24 22:33
10F:→ brandonron:我写出来了!真开心...很感谢各位的帮助! 07/25 03:03