Phoenix JavaAPI可以在java中使用sql对HBase进行操作
配置项目环境
- 下载master节点中phoenix安装目录下的两个包到本地项目/phoenix中
phoenix-5.0.0-HBase-2.0-client.jar
phoenix-core-5.0.0-HBase-2.0.jar
- 将这两个文件添加进模块依赖中
- 尝试建表代码,注意: JRE版本建议为1.8
建表
建表语法为 create table tablename(column1,column2,column3),使用stmt.execute()执行
package demo;
import java.sql.*;
class PhoenixAPI {
Connection conn = null;
Statement stmt = null;
PhoenixAPI() {
try {
Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");
conn = DriverManager.getConnection("jdbc:phoenix:master:2181/hbase","","");
stmt = conn.createStatement();
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
public void create(String tb) {
// 注意:在Phoenix中,整数不能简写为int,而是要写为INTEGER
String sql = "create table " + tb +
" (id integer primary key, name varchar, age integer)";
try {
stmt.execute(sql); // 执行sql语句,不是事务,无需提交
System.out.println(tb + "表 创建成功");
} catch (SQLException e) {
e.printStackTrace();
}
}
public void close() {
try {
stmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public class Main {
public static void main(String[] args) {
PhoenixAPI phoenix = new PhoenixAPI();
phoenix.create("test");
phoenix.close();
}
}
可以看到test表已创建成功
删除表
使用drop table tbname删除表
class PhoenixAPI {
...
PhoenixAPI() { ... }
public void drop(String tb) {
String sql = "DROP TABLE " + tb;
try {
stmt.execute(sql); // 执行sql语句, 无需commit
System.out.println("表 " + tb + " 已删除");
} catch (SQLException e) {
e.printStackTrace();
}
}
public void close() { ... }
}
public class Main {
public static void main(String[] args) {
PhoenixAPI phoenix = new PhoenixAPI();
phoenix.drop("test");
phoenix.close();
}
}
可以看到test已被删除
查询数据
使用select * from tbname来查询数据。返回的数据会放在结果集中,可以使用迭代函数遍历所有行数据。
class PhoenixAPI {
...
PhoenixAPI() { ... }
public void select(String tb) {
String sql = "select * from " + tb;
try {
// executeQuery()返回结果集
ResultSet rs = stmt.executeQuery(sql);
// 使用next()迭代函数遍历结果集
System.out.println("id\tname\tage");
while (rs.next()) {
// 打印数据,使用getType(col)获取当前行的列值
// 这里所有列都是varchar类型,所以使用getString(col)获取
System.out.println(rs.getString("id") + "\t"
+ rs.getString("name") + "\t"
+ rs.getString("age"));
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public void close() { ... }
}
public class Main {
public static void main(String[] args) {
PhoenixAPI phoenix = new PhoenixAPI();
phoenix.select("student");
phoenix.close();
}
}
添加/修改数据
使用upsert into来添加/修改数据,upsert into tbname values(?,?,?)
package demo;
import java.sql.*;
import java.util.ArrayList;
class PhoenixAPI {
...
PhoenixAPI() { ... }
public void create(String tb) { ... }
public void upsert(String tb) {
ArrayList<String> dataList = new ArrayList<>();
dataList.add("upsert into " + tb + " values(1,'zhangsan',11)");
dataList.add("upsert into " + tb + " values(2,'lisi',22)");
dataList.add("upsert into " + tb + " values(999,'wangwu',33)");
for (String sql : dataList) {
try {
stmt.execute(sql);
conn.commit();
System.out.println("插入数据成功");
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void close() { ... }
}
public class Main {
public static void main(String[] args) {
PhoenixAPI phoenix = new PhoenixAPI();
phoenix.create("student");
phoenix.upsert("student");
phoenix.close();
}
}
删除数据
使用delete from tbname where id=?来删除数据
class PhoenixAPI {
...
PhoenixAPI() { ... }
public void delete(String tb, String id) {
String sql = "DELETE FROM " + tb + " WHERE id = " + id;
try {
stmt.execute(sql); // 执行sql语句, 需commit
conn.commit(); // 提交事务
System.out.println("删除成功");
} catch (SQLException e) {
e.printStackTrace();
}
}
public void close() { ... }
}
public class Main {
public static void main(String[] args) {
PhoenixAPI phoenix = new PhoenixAPI();
phoenix.delete("student", "999");
phoenix.close();
}
}
相比上面,已删除。