[問題] 如何寫入資料庫(Cassandra)
小弟依舊不材,始終改寫不出我想要的程式碼
(努力看參考資料到半夜還是不會,我好弱.....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
→
07/24 18:49, , 1F
07/24 18:49, 1F
→
07/24 18:53, , 2F
07/24 18:53, 2F
推
07/24 19:38, , 3F
07/24 19:38, 3F
→
07/24 19:41, , 4F
07/24 19:41, 4F
→
07/24 21:39, , 5F
07/24 21:39, 5F
→
07/24 21:59, , 6F
07/24 21:59, 6F
→
07/24 22:15, , 7F
07/24 22:15, 7F
→
07/24 22:18, , 8F
07/24 22:18, 8F
→
07/24 22:33, , 9F
07/24 22:33, 9F
→
07/25 03:03, , 10F
07/25 03:03, 10F