package org.example;

import org.apache.hadoop.hbase.NamespaceDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.ipc.Server; import java.io.IOException; public class HBaseDDL {
//声明一个静态属性
public static Connection connection =HBaseConnection_duo.connection; /**
*
* @param namespace:命名空间名称
*/ public static void createNamespace(String namespace) throws IOException {
// 1.获取admin
//此处的异常先不要抛出,等待方法写完,在统一进行处理
//admin的连接是轻量级的 不是线程安全的 不推荐池化或者缓存这个连接
Admin admin = connection.getAdmin(); //2.调用方法创建命名空间
//代码相对shell更见底层,所以shell能实现的功能 代码一定能实现
//所以需要填写完整的命名空间描述 //2.1创建命名空间描述建造者 => 设计师
NamespaceDescriptor.Builder builder = NamespaceDescriptor.create(namespace); //2.2 给命名空间添加需求
builder.addConfiguration("user","atguigu"); //2.3使用builder构造出对应的添加完整参数的对象 完成创建
// 创建命名空间出现的问题 都属于本方法自身的问题 不应该抛出
try {
admin.createNamespace(builder.build());
}catch (IOException e){
e.printStackTrace();
} //关闭admin
admin.close();
} /**
*
* @param namespace:命名空间名称
* @param tablename:表格名称
* @return true 表示存在
*/
public static boolean isTableExists(String namespace,String tablename) throws IOException {
//1.获取admin
Admin admin = connection.getAdmin(); //2.使用方法判断表格是否存在
boolean b = false;
try {
b = admin.tableExists(TableName.valueOf(namespace, tablename));
} catch (IOException e) {
throw new RuntimeException(e);
} //3.关闭连接
admin.close(); //4.返回结果
return b;
} /**
*
* @param namespace 命名空间名称
* @param tableName 表格名称
* @param columnFamilies 列族名称
*/
public static void creatTable(String namespace ,String tableName,String... columnFamilies) throws Exception { //判断是否至少有一个列族
if (columnFamilies.length==0){
System.out.println("创建表格至少有一个列族");
return;
} //判断表格是否存在
if (isTableExists(namespace,tableName)){
System.out.println("表格已经存在");
return;
}
//1.获取admin
Admin admin = connection.getAdmin(); //2.调用方法创建表格
//2.1创建表格描述
TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(TableName.valueOf(namespace, tableName)); //2.2添加参数
for (String columnFamily : columnFamilies){
//2.3创建列族描述
ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder = ColumnFamilyDescriptorBuilder
.newBuilder(Bytes.toBytes(columnFamily)); //2.4添加版本参数
columnFamilyDescriptorBuilder.setMaxVersions(5); //2.5创建添加完参数的列族描述
tableDescriptorBuilder.setColumnFamily(columnFamilyDescriptorBuilder.build());
}
//创建对应的表格描述
try {
admin.createTable(tableDescriptorBuilder.build());
} catch (IOException e) {
System.out.println("表格已经存在");
throw new RuntimeException(e);
}
admin.close();
} /**
*
* @param namespace:命名空间名称
* @param tableName:表格名称
* @param columnFamily:列族名称
* @param version:版本
*/
public static void modifyTable(String namespace,String tableName,String columnFamily,int version) throws IOException {
if (!isTableExists(namespace,tableName)){
return;
} //1.获取admin
Admin admin = connection.getAdmin(); //2.调用方法修改表格
//2.0获取之前的表格描述
TableDescriptor descriptor = admin.getDescriptor(TableName.valueOf(namespace,tableName)); //2.1创建表格描述
//如果使用填写tablename的方法 相当于创建了一个新的表格描述建造者 没有之前的信息
//如果想要修改之前的信息 必须调用方法填写一个旧的表格描述
TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(descriptor);
//2.2对应建造者进行表格数据的修改
ColumnFamilyDescriptor columnFamily1 = descriptor.getColumnFamily(Bytes.toBytes(columnFamily));
//创建列族描述者
ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder(columnFamily1);
//修改对应的版本
columnFamilyDescriptorBuilder.setMaxVersions(version);
//此处修改的时候 如果填写的是新创建的 那么别的参数也会初始化
tableDescriptorBuilder.modifyColumnFamily(columnFamilyDescriptorBuilder.build()); try {
admin.modifyTable(tableDescriptorBuilder.build());
} catch (IOException e) {
throw new RuntimeException(e);
} admin.close();
}
public static boolean deleteTable(String namespace,String tableName) throws IOException {
//判断表格是否存在
if (!isTableExists(namespace,tableName)){
System.out.println("表格不存在,无法删除");
return false;
}
//2.获取admin
Admin admin = connection.getAdmin(); //3.调用方法删除表格
try {
admin.deleteTable(TableName.valueOf(namespace,tableName));
} catch (IOException e) {
throw new RuntimeException(e);
}
//4.关闭
admin.close();
return true;
}
public static void main(String[] args) throws Exception {
//测试创建命名者空间
//应该先保证连接没有问题 再来掉用方法
//createNamespace("atguigu"); //测试表格是否存在
// System.out.println(isTableExists("bigdata","student")); //测试创建表格
creatTable("atguigu","student","info","msg");
//其他代码
//测试修改表格
modifyTable("atguigu","student","info",6);
//测试删除表格
deleteTable("atguigu","student");
System.out.println("其他代码");
//关闭habse连接
connection.close();
}
}

javaAPI操作hbase对表格的增删改查的更多相关文章

  1. 用AngularJS实现对表格的增删改查(仅限前端)

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  2. 【原生】js实现表格的增删改查

    说在前面的,写给小白白的,大神请绕道~ 今天用原生js写一下动态表格的增删改查,主要是熟悉一下js的DOM操作. 首先,做一个表格,用来显示提交的数据,如图下: 此处,我添加了编号.姓名.密码.生日. ...

  3. SQL server 创建 修改表格 及表格基本增删改查 及 高级查询 及 (数学、字符串、日期时间)函数[转]

    SQL server 创建 修改表格 及表格基本增删改查 及 高级查询 及 (数学.字符串.日期时间)函数   --创建表格 create table aa ( UserName varchar(50 ...

  4. js实现表格的增删改查

    这份代码实现了对表格的增加,删除,更改,查询. 点击一次添加按钮,表格会增加一行. 点击重置按钮,输入框的内容会被清空. 添加一行后,最后两格为更改和删除.点击更改,原有内容会各自显示在一个输入框内, ...

  5. 第三百零七节,Django框架,models.py模块,数据库操作——表类容的增删改查

    Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...

  6. 基于AT UI实现表格的增删改查遇到的坑

    基于AT UI实现表格的增删改查遇到的坑 坑一.表格数据加载的渲染报错 报错:Error in render: "TypeError: Cannot read property 'isChe ...

  7. 五 Django框架,models.py模块,数据库操作——表类容的增删改查

    Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...

  8. jQuery EasyUI/TopJUI实现数据表格的增删改查功能(不写js,纯HTML实现!!!)

    jQuery EasyUI/TopJUI实现数据表格的增删改查功能(不写js,纯HTML实现!!!) 废话不多说,直接贴上代码 <table id="configEdatagrid&q ...

  9. Vue+Mock.js模拟登录和表格的增删改查

    有三类人不适合此篇文章: "喜欢站在道德制高点的圣母婊" -- 适合去教堂 "无理取闹的键盘侠" -- 国际新闻版块欢迎你去 "有一定基础但又喜欢逼逼 ...

  10. 快速开发平台WebBuilder中ExtJS表格的增删改查

    使用WebBuilder可实现表格的自动增删改查功能,而无需编写前台脚本和后台SQL. WebBuilder开源项目地址:http://www.putdb.com 自动生成的页面: <!DOCT ...

随机推荐

  1. CodeForces 1187E Tree Painting

    题意:给定一棵\(n\)个点的树 初始全是白点 要求你做\(n\)步操作,每一次选定一个与一个黑点相隔一条边的白点,将它染成黑点,然后获得该白点被染色前所在的白色联通块大小的权值. 第一次操作可以任意 ...

  2. Llama2-Chinese项目:1-项目介绍和模型推理

    Atom-7B与Llama2间的关系:Atom-7B是基于Llama2进行中文预训练的开源大模型.为什么叫原子呢?因为原子生万物,Llama中文社区希望原子大模型未来可以成为构建AI世界的基础单位.目 ...

  3. GDB苹果网页一键打包工具(IOS,IPA,苹果应用网页打包,WINDOWS平台)

    工具简介 GDB苹果网页一键打包工具(IOS,IPA,苹果应用网页打包,Windows平台)可以把本地HTML项目或者网站打包为一个苹果应用IPA文件,无需编写任何代码,支持在苹果设备上安装运行.作为 ...

  4. 在线问诊 Python、FastAPI、Neo4j — 创建症状节点

    目录 症状数据 创建节点 附学习 电子病历中,患者主诉对应的相关检查,得出的诊断以及最后的用药情况.症状一般可以从主诉中提取. 症状数据 symptom_data.csv CSV 中,没有直接一行一个 ...

  5. 在C#中如何自定义配置上周和本周起始日来查询业务数据?

    作者:西瓜程序猿 主页传送门:https://www.cnblogs.com/kimiliucn 前言 在做某个报表管理功能时,有一个需求:需要根据自定义配置的[周起始日]来统计上周.本周的订单数据. ...

  6. vi命令使用详解

    vi命令使用详解 1. 三种工作模式 命令模式:通过命令对文件进行常规操作 打开文件时进入命令模式 (vi的入口) 通过命令对文件进行常规操作,如定位.翻页.复制.粘贴.删除等在图形界面下通过鼠标或快 ...

  7. DHCP是什么

    DHCP 1. DHCP是什么 协议,一种应用层的网络协议,他可以动态地分配网络中的IP地址和其他网络配置的参数以及网络设备,通俗一点讲,每台设备的IP地址,子网掩码,网关等网络参数信息都是由他来完成 ...

  8. Mybatis-Plus 系列:简介和基本使用

    目录 一.简介 二.特性 三.基本使用 1.初始化数据库 2.初始化工程 3.精简 SpringBoot 相关日志 一.简介 官网:https://www.baomidou.com MyBatis-P ...

  9. Modbus动态链接库供多语言使用 | Go

    Modbus协议控制动态链接库 应用场景 基于各门语言都有各自的modbus协议库,且良莠不齐,而且在具体的框架下可能存在版本依赖问题, 而且对modbus协议存在比较多的细节处理,可以查看modbu ...

  10. Python面试题——网络与并发编程

    1.python的底层网络交互模块有哪些? socket, urllib,urllib3 , requests, grab, pycurl 2.简述OSI七层协议. OSI七层协议是一个用于计算机或通 ...