上篇blog中讲解了对表的查询以及创建、删除,是对整个表的操作,下面进行对表中的数据的增删改查操作。
四、增添数据
在对表进行数据的增加操作中,可以进行添加一行数据,也可以进行一次添加多行数据。
(1)添加一行数据:
- 首先先对表进行判断,判断表是否存在,若表存在则通过Connection获取所操作的Table类的一个实例,即将table取出。
Table table = conn.getTable(TableName.valueOf(tableName));
- 为添加数据,所以应该指明添加哪一行数据,通过创建一个Put类的对象并传入行键,对该行数据进行唯一标识。
Put p = new Put(Bytes.toBytes(rowKey));
HBase数据库中的数据的数据结构实为二进制数组形式,因此将行键传入后,由于行键是字符串类型,因此需先使用toBytes()方法将行键转化成二进制数组的形式。
- Put对象有了行键之后,下面应对该行数据进行添加列族、列、值
p.addColumn(Bytes.toBytes(cf),Bytes.toBytes(col),Bytes.toBytes(value));
- 经过上述操作,可知已将p行对象的数据创建完毕,因此应将该行数据添加到表中。添加后将表关闭。
table.put(p);
table.close();
完整代码:
public static void addData(String tableName,String rowKey,String cf,String col,String value) throws IOException{
Configuration cfg = HBaseConfiguration.create();
cfg.set("hbase.zookeeper.quorum", "centos01");
cfg.set("hbase.zookeeper.property.clientPort","2181");
Connection conn = ConnectionFactory.createConnection(cfg);
HBaseAdmin admin = (HBaseAdmin)conn.getAdmin();
if(admin.tableExists(tableName)){
Table table = conn.getTable(TableName.valueOf(tableName));
Put p = new Put(Bytes.toBytes(rowKey));
p.addColumn(Bytes.toBytes(cf),Bytes.toBytes(col),Bytes.toBytes(value));
table.put(p);
table.close();
System.out.println("添加成功");
}
else
System.out.println("该表不存在");
conn.close();
}
主函数:
public static void main(String[] args)throws IOException{
addData("t1","2222","cf1","address","jinan");
}
命令行查询:
使用scan命令
scan 't1'
实验结果:
实验成功。
(2)添加多行数据
public static void addDatas(String tableName, String[] rowKey, String[] cf,String[] col, String[] value)throws IOException{
Configuration cfg = new Configuration();
cfg.set("hbase.zookeeper.quorum", "centos01");
cfg.set("hbase.zookeeper.property.clientPort","2181");
Connection conn = ConnectionFactory.createConnection(cfg);
HBaseAdmin admin = (HBaseAdmin)conn.getAdmin();
if(admin.tableExists(tableName))
{
Table table = conn.getTable(TableName.valueOf(tableName));
List<Put> puts = new ArrayList<>();
puts.add(new Put(Bytes.toBytes(rowKey[0])).addColumn(Bytes.toByte