• Phoenix简介概述,Phoenix的Java API 相关操作优秀案例




    相关参考优秀博文
    segmentfault:xirong:使用Phoenix通过sql语句更新操作hbase数据



    一、Phoenix概述简介

    Phoeinx = HBase + SQL

    Phoenix核心能力:

    • SQL引擎层
      –支持标准SQL 92,转为SQL为HBase API
      – 算子、过滤条件下推到Server端,并行执行
      – 轻量级事务、二级索引,动态列、分页查询等多种SQL层能力
    • JDBCDriver
    • Metadata管理
    • 集成Spark、Hive、Pig、Flume和MapReduce

    Phoenix(云 HBase SQL)核心功能原理及应用场景介绍

    瑾谦——Phoenix相关博文

    jy02268879——Phoenix相关博文

    二、Phoenix实例一:Java API操作

    2.1 phoenix.properties

    phoenix.driver=org.apache.phoenix.jdbc.PhoenixDriver
    phoenix.url=jdbc:phoenix:node1:2181
    phoenix.user=root
    phoenix.password=密码
    

    2.2 pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
     
        <groupId>com.sid.hbase</groupId>
        <artifactId>hbase-train</artifactId>
        <version>1.0-SNAPSHOT</version>
     
        <properties>
            <hbase.version>1.4.4</hbase.version>
            <hadoop.version>2.9.0</hadoop.version>
        </properties>
     
        <dependencies>
     
            <dependency>
                <groupId>org.apache.phoenix</groupId>
                <artifactId>phoenix-core</artifactId>
                <version>4.14.0-HBase-1.4</version>
            </dependency>
     
        </dependencies>
    </project>
    

    2.3 configutils.java

    package com.sid.hbase;
     
    import java.io.IOException;
    import java.util.Properties;
     
    public class ConfigUtils {
        public static Properties p =new Properties();
     
        static {
            try{
                p.load(ClassLoader.getSystemResourceAsStream("phoenix.properties"));
            }catch (Exception e){
                e.printStackTrace();
            }
        }
      
        public static String getDriver() throws IOException {
            p.load(ClassLoader.getSystemResourceAsStream("phoenix.properties"));
            return p.getProperty("phoenix.driver");
        }
     
        public static String getUrl(){
            return p.getProperty("phoenix.url");
        }
     
        public static String getUserName(){
            return p.getProperty("phoenix.user");
        }
     
        public static String getPassWord(){
            return p.getProperty("phoenix.password");
        }
     
        public static void main(String[] args) throws IOException {
     
            System.out.println(getDriver());
            System.out.println(getUrl());
            System.out.println(getUserName());
            System.out.println(getPassWord());
        }
    }
    

    2.4 PhoenixTest.java

    package com.sid.hbase;
     
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
     
    import java.sql.*;
     
    public class PhoenixTest {
        private Connection conn;
        private Statement stat;
        private ResultSet rs;
     
        @Before
        public void initResource() throws Exception{
            Class.forName(ConfigUtils.getDriver());
            conn = DriverManager.getConnection(ConfigUtils.getUrl(), ConfigUtils.getUserName(), ConfigUtils.getPassWord());
            stat = conn.createStatement();
     
        }
     
        @Test
        public void testCreateTable() throws SQLException {
            String sql="create table test_phoenix_api(mykey integer not null primary key ,mycolumn varchar )";
            stat.executeUpdate(sql);
            conn.commit();
        }
     
        @Test
        public void upsert() throws SQLException {
            String sql1="upsert into test_phoenix_api values(1,'test1')";
            String sql2="upsert into test_phoenix_api values(2,'test2')";
            String sql3="upsert into test_phoenix_api values(3,'test3')";
            stat.executeUpdate(sql1);
            stat.executeUpdate(sql2);
            stat.executeUpdate(sql3);
            conn.commit();
        }
     
        @Test
        public void delete() throws SQLException {
            String sql1="delete from test_phoenix_api where mykey = 1";
            stat.executeUpdate(sql1);
            conn.commit();
        }
     
     
     
        @After
        public void closeResource() throws SQLException {
            if(rs!=null){
                rs.close();
            }
            if(stat!=null){
                stat.close();
            }
            if(conn!=null){
                conn.close();
            }
        }
    }
    

    分别运行创建表、插入数据、删除数据后在phoenix中查看结果

    0: jdbc:phoenix:node1,node2,node3,node4> !table
    +------------+--------------+-------------------+---------------+----------+------------+----------------------------+-----------------+--------------+-----------------+---------------+-----+
    | TABLE_CAT  | TABLE_SCHEM  |    TABLE_NAME     |  TABLE_TYPE   | REMARKS  | TYPE_NAME  | SELF_REFERENCING_COL_NAME  | REF_GENERATION  | INDEX_STATE  | IMMUTABLE_ROWS  | SALT_BUCKETS  | MUL |
    +------------+--------------+-------------------+---------------+----------+------------+----------------------------+-----------------+--------------+-----------------+---------------+-----+
    |            | SYSTEM       | CATALOG           | SYSTEM TABLE  |          |            |                            |                 |              | false           | null          | fal |
    |            | SYSTEM       | FUNCTION          | SYSTEM TABLE  |          |            |                            |                 |              | false           | null          | fal |
    |            | SYSTEM       | LOG               | SYSTEM TABLE  |          |            |                            |                 |              | true            | 32            | fal |
    |            | SYSTEM       | SEQUENCE          | SYSTEM TABLE  |          |            |                            |                 |              | false           | null          | fal |
    |            | SYSTEM       | STATS             | SYSTEM TABLE  |          |            |                            |                 |              | false           | null          | fal |
    |            |              | TEST_PHOENIX_API  | TABLE         |          |            |                            |                 |              | false           | null          | fal |
    |            |              | US_POPULATION     | TABLE         |          |            |                            |                 |              | false           | null          | fal |
    |            |              | wc                | VIEW          |          |            |                            |                 |              | false           | null          | fal |
    +------------+--------------+-------------------+---------------+----------+------------+----------------------------+-----------------+--------------+-----------------+---------------+-----+
    0: jdbc:phoenix:node1,node2,node3,node4> select * from test_phoenix_api
    . . . . . . . . . . . . . . . . . . . .> ;
    +--------+-----------+
    | MYKEY  | MYCOLUMN  |
    +--------+-----------+
    | 1      | test1     |
    | 2      | test2     |
    | 3      | test3     |
    +--------+-----------+
    3 rows selected (0.325 seconds)
    0: jdbc:phoenix:node1,node2,node3,node4> select * from test_phoenix_api;
    +--------+-----------+
    | MYKEY  | MYCOLUMN  |
    +--------+-----------+
    | 2      | test2     |
    | 3      | test3     |
    +--------+-----------+
    2 rows selected (0.14 seconds)
    0: jdbc:phoenix:node1,node2,node3,node4> 
    

    三、Phoenix实例二:Java API操作

    3.1 pom.xml中加入依赖

    <dependency>
                <groupId>org.apache.phoenix</groupId>
                <artifactId>phoenix-core</artifactId>
                <version>4.13.1-HBase-1.3</version>
                <exclusions>
                    <exclusion>
                        <groupId>com.salesforce.i18n</groupId>
                        <artifactId>i18n-util</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.47</version>
            </dependency>
    

    3.2 JDBC

    import java.sql.*;
    public class MyJDBC {
        private static String driverClassName;
        private static String URL;
        private static String username;
        private static String password;
        private static boolean autoCommit;
    
        /** 声明一个 Connection类型的静态属性,用来缓存一个已经存在的连接对象 */
        private static Connection conn;
        static {
            config();
        }
        /**     * 开头配置自己的数据库信息     */
        private static void config() {
            /*         * 获取驱动         */
            driverClassName = "org.apache.phoenix.jdbc.PhoenixDriver";
            /*         * 获取URL         */
            URL = "jdbc:phoenix:xx,xx,xx:2181";
            /*         * 获取用户名         */
            username = "";
            /*         * 获取密码         */
            password = "";
            /*         * 设置是否自动提交,一般为false不用改         */
            autoCommit = true;
        }
        /**     * 载入数据库驱动类     */
        private static boolean load() {
            try {
                Class.forName(driverClassName);
                return true;
            } catch (ClassNotFoundException e) {
                System.out.println("驱动类 " + driverClassName + " 加载失败");
            }
            return false;
        }
    
        /**     * 建立数据库连接     */
        public static Connection connect() {
            /* 加载驱动 */
            load();
            try {
                /* 建立连接 */
                conn = DriverManager.getConnection(URL, username, password);
            } catch (SQLException e) {
                System.out.println("建立数据库连接失败 , " + e.getMessage());
            }
            return conn;
        }
    
        /**     * 设置是否自动提交事务     **/
        public static void transaction() {
            try {
                conn.setAutoCommit(autoCommit);
            } catch (SQLException e) {
                System.out.println("设置事务的提交方式为 : " + (autoCommit ? "自动提交" : "手动提交") + " 时失败: " + e.getMessage());
            }
        }
    
        /**     * 创建 Statement 对象     */
        public static Statement statement() {
            Statement st = null;
            connect();
            /* 如果连接是无效的就重新连接 */
            transaction();
            /* 设置事务的提交方式 */
            try {
                st = conn.createStatement();
            } catch (SQLException e) {
                System.out.println("创建 Statement 对象失败: " + e.getMessage());
            }
            return st;
        }
    
        /**     * 根据给定的带参数占位符的SQL语句,创建 PreparedStatement 对象     *
         * @param SQL    带参数占位符的SQL语句
         * @return 返回相应的 PreparedStatement 对象
         */
        private static PreparedStatement prepare(String SQL, boolean autoGeneratedKeys) {
            PreparedStatement ps = null;
            connect();
            /* 如果连接是无效的就重新连接 */
            transaction();
            /* 设置事务的提交方式 */
            try {
                if (autoGeneratedKeys) {
                    ps = conn.prepareStatement(SQL, Statement.RETURN_GENERATED_KEYS);
                } else {
                    ps = conn.prepareStatement(SQL);
                }
            } catch (SQLException e) {
                System.out.println("创建 PreparedStatement 对象失败: " + e.getMessage());
            }
            return ps;
        }
    
        public static ResultSet query(String SQL, Object... params) {
            if (SQL == null || !SQL.trim().toLowerCase().startsWith("select")) {
                throw new RuntimeException("你的SQL语句为空或不是查询语句");
            }
            ResultSet rs = null;
            if (params.length > 0) {
                /* 说明 有参数 传入,就需要处理参数 */
                PreparedStatement ps = prepare(SQL, false);
                try {
                    for (int i = 0; i < params.length; i++) {
                        ps.setObject(i + 1, params[i]);
                    }
                    rs = ps.executeQuery();
                } catch (SQLException e) {
                    System.out.println("执行SQL失败: " + e.getMessage());
                }
            } else {
                /* 说明没有传入任何参数 */
                Statement st = statement();
                try {
                    rs = st.executeQuery(SQL); // 直接执行不带参数的 SQL 语句
                } catch (SQLException e) {
                    System.out.println("执行SQL失败: " + e.getMessage());
                }
            }
            return rs;
        }
    
        /**     *  释放资源     *   **/
        public static void release(Object cloaseable) {
            if (cloaseable != null) {
                if (cloaseable instanceof ResultSet) {
                    ResultSet rs = (ResultSet) cloaseable;
                    try {
                        rs.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                if (cloaseable instanceof Statement) {
                    Statement st = (Statement) cloaseable;
                    try {
                        st.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                if (cloaseable instanceof Connection) {
                    Connection c = (Connection) cloaseable;
                    try {
                        c.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    

    3.3 serviceImpl

    Connection connect = MyJDBC.connect();
    String sql = "select CARNO,LINECODE,DATETIME,WLNG,WLAT,DISTANCE from ZY_PATROL_LOG where CARNO = ? and DATETIME >= ? and DATETIME <=? order by CARNO,LINECODE,DATETIME asc";
            ResultSet resultSet = MyJDBC.query(sql, carNoByIn, startTime, endTime);
            while (resultSet.next()) {
                String carNo = resultSet.getString(1);
                String lineCode = resultSet.getString(2);
                String x = resultSet.getString("WLNG");
                String y = resultSet.getString("WLAT");
                String key = carNo + "-" + lineCode;
                List<String> xys = map.get(key);
                if (xys == null) {
                    xys = new ArrayList<>();
                }
                xys.add(x + "," + y);
                map.put(key, xys);
            }
            resultSet.close();
            connect.close();
    

    四、Phoenix常用函数列举及说明

    函数 说明
    AVG ( numericTerm ) 计算平均值
    COUNT (Term) 计算term的总数
    COUNT (DISTINCT Term) 去重求总数
    MAX ( term ) 求最大值
    MIN ( term ) 求最小值
    SUM ( numericTerm ) 字段内容求和
    ROUND(number, 2) 截取2位有效数字
    TO_NUMBER(‘123’) 字符串转数字,数字较大会转成科学计数法
    SUBSTR(‘Hello World’, -5) 截取前五个字符
    LENGTH(‘Hello’) 获取字符串的长度
    UPPER(‘Hello’) 将字符串中所有字母大写
    LOWER(‘HELLO’) 将字符串中所有字母小写
    REVERSE(‘Hello’) 将字符串中所有字母顺序翻转
    TO_CHAR(myDate, ‘2001-02-03 04:05:06’) 将时间类型字段转换成字符串结构的字符串
    TO_DATE(‘Sat, 3 Feb 2001 03:05:06 GMT’, ‘EEE, d MMM yyyy HH:mm:ss z’) 将字符串转换成时间类型的内容,结构按照传入结构
    CURRENT_DATE() 获取当前机器时间(在客户端中为日期)
    CURRENT_TIME() 获取当前机器时间(在客户端中为时间)

    三、使用Phoenix通过sql语句更新操作hbase数据

    3.1Shell命令

    建表语句

    新建一张Person表,含有IDCardNum,Name,Age 三个字段 ,test 为table_schem ,标准sql如下:

    create table IF NOT EXISTS test.Person (IDCardNum INTEGER not null primary key, Name varchar(20),Age INTEGER);
    

    在 Phoenix 中使用如下:

    0: jdbc:phoenix:10.35.66.72> create table IF NOT EXISTS test.Person (IDCardNum INTEGER not null primary key, Name varchar(20),Age INTEGER);
    No rows affected (0.344 seconds)
    0: jdbc:phoenix:10.35.66.72> !tables
    +------------------------------------------+------------------------------------------+------------------------------------------+-------------------+
    |                TABLE_CAT                 |               TABLE_SCHEM                |                TABLE_NAME                |                TA |
    +------------------------------------------+------------------------------------------+------------------------------------------+-------------------+
    | null                                     | WL                                       | BIG_LOG_DEVUTRACEID_INDEX                | INDEX             |
    | null                                     | WL                                       | MSGCENTER_PUSHMESSAGE_V2_OWNERPAGE_INDEX | INDEX             |
    | null                                     | SYSTEM                                   | CATALOG                                  | SYSTEM TABLE      |
    | null                                     | SYSTEM                                   | SEQUENCE                                 | SYSTEM TABLE      |
    | null                                     | SYSTEM                                   | STATS                                    | SYSTEM TABLE      |
    | null                                     | DMO                                      | SOWNTOWN_STATICS                         | TABLE             |
    | null                                     | OL                                       | BIGLOG                                   | TABLE             |
    | null                                     | TEST                                     | PERSON                                  | TABLE             |
    | null                                     | WL                                       | BIG_LOG                                  | TABLE             |
    | null                                     | WL                                       | ERROR_LOG                                | TABLE             |
    | null                                     | WL                                       | MSGCENTER_PUSHMESSAGE                    | TABLE             |
    | null                                     | WL                                       | MSGCENTER_PUSHMESSAGE_V2                 | TABLE             |
    +------------------------------------------+------------------------------------------+------------------------------------------+-------------------+
    0: jdbc:phoenix:10.35.66.72> select * from TEST.PERSON;
    +------------------------------------------+----------------------+------------------------------------------+
    |                IDCARDNUM                 |         NAME         |                   AGE                    |
    +------------------------------------------+----------------------+------------------------------------------+
    +------------------------------------------+----------------------+------------------------------------------+
    

    插入操作

    对表进行插入操作,sql如下:

    insert into Person (IDCardNum,Name,Age) values (100,'小明',12);
    insert into Person (IDCardNum,Name,Age) values (101,'小红',15);
    insert into Person (IDCardNum,Name,Age) values (103,'小王',22);
    

    在 Phoenix 中插入的语句为 upsert ,具体如下:

    0: jdbc:phoenix:10.35.66.72> upsert into test.Person (IDCardNum,Name,Age) values (100,'小明',12);
    1 row affected (0.043 seconds)
    0: jdbc:phoenix:10.35.66.72> upsert into test.Person (IDCardNum,Name,Age) values (101,'小红',15);
    1 row affected (0.018 seconds)
    0: jdbc:phoenix:10.35.66.72> upsert into test.Person (IDCardNum,Name,Age) values (103,'小王',22);
    1 row affected (0.009 seconds)
    0: jdbc:phoenix:10.35.66.72> select * from test.Person;
    +------------------------------------------+----------------------+------------------------------------------+
    |                IDCARDNUM                 |         NAME         |                   AGE                    |
    +------------------------------------------+----------------------+------------------------------------------+
    | 100                                      | 小明                   | 12                                       |
    | 101                                      | 小红                   | 15                                       |
    | 103                                      | 小王                   | 22                                       |
    +------------------------------------------+----------------------+------------------------------------------+
    3 rows selected (0.115 seconds)
    

    修改表中数据

    alter 修改表数据,sql如下:

    ALTER TABLE test.Persion ADD sex varchar(10);
    

    Phoenix 中操作如下:

    0: jdbc:phoenix:10.35.66.72> ALTER TABLE test.Person ADD sex varchar(10);
    No rows affected (0.191 seconds)
    : jdbc:phoenix:10.35.66.72> select * from test.person;
    +------------------------------------------+----------------------+------------------------------------------+------------+
    |                IDCARDNUM                 |         NAME         |                   AGE                    |    SEX     |
    +------------------------------------------+----------------------+------------------------------------------+------------+
    | 100                                      | 小明                   | 12                                       | null       |
    | 101                                      | 小红                   | 15                                       | null       |
    | 103                                      | 小王                   | 22                                       | null       |
    +------------------------------------------+----------------------+------------------------------------------+------------+
    3 rows selected (0.113 seconds)
    

    更新表中数据

    更新表数据 ,标准的sql 如下:

    update test.Person set sex='男' where IDCardNum=100;
    update test.Person set sex='女' where IDCardNum=101;
    update test.Person set sex='男' where IDCardNum=103;
    

    Phoenix中不存在update的语法关键字,而是upsert ,功能上替代了Insert+update,

    0: jdbc:phoenix:10.35.66.72> upsert into test.person (idcardnum,sex) values (100,'男');
    1 row affected (0.083 seconds)
    0: jdbc:phoenix:10.35.66.72> upsert into test.person (idcardnum,sex) values (101,'女');
    1 row affected (0.012 seconds)
    0: jdbc:phoenix:10.35.66.72> upsert into test.person (idcardnum,sex) values (103,'男');
    1 row affected (0.008 seconds)
    0: jdbc:phoenix:10.35.66.72> select * from test.person;
    +------------------------------------------+----------------------+------------------------------------------+------------+
    |                IDCARDNUM                 |         NAME         |                   AGE                    |    SEX     |
    +------------------------------------------+----------------------+------------------------------------------+------------+
    | 100                                      | 小明                   | 12                                       ||
    | 101                                      | 小红                   | 15                                       ||
    | 103                                      | 小王                   | 22                                       ||
    +------------------------------------------+----------------------+------------------------------------------+------------+
    3 rows selected (0.087 seconds)
    

    复杂查询

    复杂查询,通过Phoenix可以支持 where、group by、case when 等复杂的查询条件,案例如下:

    # 现增加几条数据
    0: jdbc:phoenix:10.35.66.72> upsert into test.Person (IDCardNum,Name,Age,sex) values (104,'小张',23,'男');
    1 row affected (0.012 seconds)
    0: jdbc:phoenix:10.35.66.72> upsert into test.Person (IDCardNum,Name,Age,sex) values (105,'小李',28,'男');
    1 row affected (0.015 seconds)
    0: jdbc:phoenix:10.35.66.72> upsert into test.Person (IDCardNum,Name,Age,sex) values (106,'小李',33,'男');
    1 row affected (0.011 seconds)
    0: jdbc:phoenix:10.35.66.72> select * from test.person;
    +------------------------------------------+----------------------+------------------------------------------+------------+
    |                IDCARDNUM                 |         NAME         |                   AGE                    |    SEX     |
    +------------------------------------------+----------------------+------------------------------------------+------------+
    | 100                                      | 小明                   | 12                                       ||
    | 101                                      | 小红                   | 15                                       ||
    | 103                                      | 小王                   | 22                                       ||
    | 104                                      | 小张                   | 23                                       ||
    | 105                                      | 小李                   | 28                                       ||
    | 106                                      | 小李                   | 33                                       ||
    +------------------------------------------+----------------------+------------------------------------------+------------+
    6 rows selected (0.09 seconds)
    

    where + group by 语句

    jdbc:phoenix:10.35.66.72> select sex ,count(sex) as num from test.person where age >20 group by sex;
    +------------+------------------------------------------+
    |    SEX     |                   NUM                    |
    +------------+------------------------------------------+
    || 4                                        |
    +------------+------------------------------------------+
    

    case when

    0: jdbc:phoenix:10.35.66.72> select (case name when '小明' then '明明啊' when '小红' then '红红啊' else name end) as showname from test.person;
    +------------------------------------------+
    |                 SHOWNAME                 |
    +------------------------------------------+
    | 明明啊                                      |
    | 红红啊                                      |
    | 小王                                       |
    | 小张                                       |
    | 小李                                       |
    | 小李                                       |
    +------------------------------------------+
    

    删除数据及删除表

    删除数据及删除表,标准sql如下:

    delete from test.Person where idcardnum=100;
    drop table test.person;
    

    Phoenix中同标准sql一样,案例如下:

    0: jdbc:phoenix:10.35.66.72> delete from test.Person where idcardnum=100;
    1 row affected (0.072 seconds)
    0: jdbc:phoenix:10.35.66.72> select * from test.Person where idcardnum=100;
    +------------------------------------------+----------------------+------------------------------------------+------------+
    |                IDCARDNUM                 |         NAME         |                   AGE                    |    SEX     |
    +------------------------------------------+----------------------+------------------------------------------+------------+
    +------------------------------------------+----------------------+------------------------------------------+------------+
    
    0: jdbc:phoenix:10.35.66.72> drop table test.person;
    No rows affected (1.799 seconds)
    0: jdbc:phoenix:10.35.66.72> select * from test.person;
    Error: ERROR 1012 (42M03): Table undefined. tableName=TEST.PERSON (state=42M03,code=1012)
    0: jdbc:phoenix:10.35.66.72> !tables
    +------------------------------------------+------------------------------------------+------------------------------------------+-------------------+
    |                TABLE_CAT                 |               TABLE_SCHEM                |                TABLE_NAME                |                TA |
    +------------------------------------------+------------------------------------------+------------------------------------------+-------------------+
    | null                                     | WL                                       | BIG_LOG_DEVUTRACEID_INDEX                | INDEX             |
    | null                                     | WL                                       | MSGCENTER_PUSHMESSAGE_V2_OWNERPAGE_INDEX | INDEX             |
    | null                                     | SYSTEM                                   | CATALOG                                  | SYSTEM TABLE      |
    | null                                     | SYSTEM                                   | SEQUENCE                                 | SYSTEM TABLE      |
    | null                                     | SYSTEM                                   | STATS                                    | SYSTEM TABLE      |
    | null                                     | DMO                                      | SOWNTOWN_STATICS                         | TABLE             |
    | null                                     | OL                                       | BIGLOG                                   | TABLE             |
    | null                                     | WL                                       | BIG_LOG                                  | TABLE             |
    | null                                     | WL                                       | ERROR_LOG                                | TABLE             |
    | null                                     | WL                                       | MSGCENTER_PUSHMESSAGE                    | TABLE             |
    | null                                     | WL                                       | MSGCENTER_PUSHMESSAGE_V2                 | TABLE             |
    +------------------------------------------+------------------------------------------+------------------------------------------+-------------------+
    

    3.2java client api 使用

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.PreparedStatement;
    import java.sql.Statement;
    
    public class test {
    
        public static void main(String[] args) throws SQLException {
            Statement stmt = null;
            ResultSet rset = null;
    
            Connection con = DriverManager.getConnection("jdbc:phoenix:[zookeeper]");
            stmt = con.createStatement();
    
            stmt.executeUpdate("create table test (mykey integer not null primary key, mycolumn varchar)");
            stmt.executeUpdate("upsert into test values (1,'Hello')");
            stmt.executeUpdate("upsert into test values (2,'World!')");
            con.commit();
    
            PreparedStatement statement = con.prepareStatement("select * from test");
            rset = statement.executeQuery();
            while (rset.next()) {
                System.out.println(rset.getString("mycolumn"));
            }
            statement.close();
            con.close();
        }
    }
    
  • 相关阅读:
    【CF-148E】Porcelain DP
    【CF-687C】The Values You Can Make 01背包变形
    【CF-269】B. Greenhouse Effect 最公共子序列
    【CF-1345】C.Hilbert's Hotel 数论
    【CF-607B】Zuma 经典区间DP
    【【模板】三分法】
    【CF-1355 E.Restorer Distance】三分,贪心
    【CF-1355 BCount Triangles】枚举
    【CF-1355 Sequence with Digits】
    触发器的类型有哪三种?
  • 原文地址:https://www.cnblogs.com/aixing/p/13327384.html
Copyright © 2020-2023  润新知