一、Phoenix版本

  1. <dependency>
    <groupId>org.apache.phoenix</groupId>
    <artifactId>phoenix-core</artifactId>
    <version>4.8.0-HBase-1.2</version>
    </dependency>

二、连接Phoenix和基本CRUD封装

  1. import org.slf4j.Logger;
  2. import org.slf4j.LoggerFactory;
  3.  
  4. import java.sql.*;
  5. import java.util.ArrayList;
  6. import java.util.HashMap;
  7. import java.util.List;
  8. import java.util.Map;
  9.  
  10. /**
  11. * 功能介绍:使用jdbc对数据库操作:查询、更新(插入/修改/删除)、批量更新
  12. */
  13. public class DButil {
  14.  
  15. private final Logger LOGGER = LoggerFactory.getLogger(getClass());
  16.  
  17. /**jdbc的链接*/
  18. private Connection conn = null;
  19.  
  20. /**准备sql*/
  21. private PreparedStatement ps = null;
  22.  
  23. {
  24. initConnection();
  25. }
  26.  
  27. /**
  28. * @param sql
  29. * @param params 参数
  30. * 功能介绍:更新操作(修改,删除,插入)
  31. */
  32. public int executeUpdate(String sql, Object[] params) {
  33. if(null == conn){
  34. initConnection();
  35. }
  36. try {
  37. ps = conn.prepareStatement(sql);
  38. if (params.length != 0) {
  39. for (int i = 0; i < params.length; i++) {
  40. ps.setObject(i + 1, params[i]);
  41. }
  42. }
  43. int rows = ps.executeUpdate();
  44. conn.commit();
  45. return rows;
  46. } catch (Exception e) {
  47. e.printStackTrace();
  48. } finally {
  49. closeUpdate();
  50. }
  51. return 0;
  52. }
  53.  
  54. /**
  55. * @param sql
  56. * @param list
  57. * 功能介绍:批量更新
  58. */
  59. public void batchUpdate(String sql, List<Object[]> list) {
  60.  
  61. if(null == conn){
  62. initConnection();
  63. }
  64. try {
  65. ps = conn.prepareStatement(sql);
  66. //关闭自动提交事务
  67. conn.setAutoCommit(false);
  68. //防止内存溢出
  69. final int batchSize = 1000;
  70. //记录插入数量
  71. int count = 0;
  72. int size = list.size();
  73. Object[] obj = null;
  74. for (int i = 0; i < size; i++) {
  75. obj = list.get(i);
  76. for (int j = 0; j < obj.length; j++) {
  77. ps.setObject(j + 1, obj[j]);
  78. }
  79. ps.addBatch();
  80. if (++count % batchSize == 0) {
  81. ps.executeBatch();
  82. conn.commit();
  83. }
  84. }
  85. ps.executeBatch();
  86. conn.commit();
  87. conn.setAutoCommit(true);
  88. } catch (SQLException e) {
  89. e.printStackTrace();
  90. try {
  91. conn.rollback();
  92. conn.setAutoCommit(true);
  93. } catch (SQLException e1) {
  94. e1.printStackTrace();
  95. }
  96. } finally {
  97. //关闭资源
  98. closeUpdate();
  99. }
  100. }
  101.  
  102. /**
  103. * @param sql
  104. * @param params
  105. * 功能介绍:查询操作
  106. */
  107. public List<Map<String, Object>> executeQuery(String sql, Object[] params) {
  108. if(null == conn){
  109. initConnection();
  110. }
  111. ResultSet rs = null;
  112. List<Map<String, Object>> list = null;
  113. try {
  114. ps = conn.prepareStatement(sql);
  115. if (params != null) {
  116. for (int i = 0; i < params.length; i++) {
  117. ps.setObject(i + 1, params[i]);
  118. }
  119. }
  120.  
  121. long startTime = System.currentTimeMillis();
  122. rs = ps.executeQuery();
  123. LOGGER.info("UserBigTableService sql-executeQuery-time: " + (System.currentTimeMillis() - startTime) + "ms");
  124.  
  125. list = new ArrayList<>();
  126. //移动光标,如果新的当前行有效,则返回 true;如果不存在下一行,则返回 false
  127. while (rs.next()) {
  128. ResultSetMetaData rsmd = rs.getMetaData();
  129. Map<String, Object> map = new HashMap<>(16);
  130. for (int i = 1; i <= rsmd.getColumnCount(); i++) {
  131. map.put(rsmd.getColumnName(i), rs.getObject(i));
  132. }
  133. list.add(map);
  134. }
  135. return list;
  136.  
  137. } catch (Exception e) {
  138. e.printStackTrace();
  139. } finally {
  140. closeQuery(rs);
  141. }
  142. return null;
  143. }
  144.  
  145. /**
  146. * @param sql
  147. * @param params
  148. * 功能介绍:查询操作一条记录
  149. */
  150. public Map<String, Object> query (String sql, Object[] params) {
  151. if(null == conn){
  152. initConnection();
  153. }
  154. ResultSet rs = null;
  155. Map<String, Object> map = null;
  156. try {
  157. ps = conn.prepareStatement(sql);
  158. if (params != null) {
  159. for (int i = 0; i < params.length; i++) {
  160. ps.setObject(i + 1, params[i]);
  161. }
  162. }
  163. rs = ps.executeQuery();
  164. //移动光标,如果新的当前行有效,则返回 true;如果不存在下一行,则返回 false
  165. while (rs.next()) {
  166. ResultSetMetaData rsmd = rs.getMetaData();
  167. map = new HashMap<>(16);
  168. for (int i = 1; i <= rsmd.getColumnCount(); i++) {
  169. map.put(rsmd.getColumnName(i), rs.getObject(i));
  170. }
  171. //若有多条记录,取第一条。
  172. break;
  173. }
  174. return map;
  175.  
  176. } catch (Exception e) {
  177. e.printStackTrace();
  178. } finally {
  179. closeQuery(rs);
  180. }
  181. return null;
  182. }
  183.  
  184. /**
  185. * 初始化连接
  186. */
  187. private void initConnection() {
  188. try {
  189. //local
  190. conn = DriverManager.getConnection("jdbc:phoenix:192.168.1.220");
  191.  
  192. } catch (Exception e) {
  193. e.printStackTrace();
  194. }
  195. }
  196.  
  197. /**
  198. * 功能介绍:关闭更新资源
  199. */
  200. private void closeUpdate() {
  201. try {
  202. if (ps != null) {
  203. ps.close();
  204. }
  205.  
  206. if (conn != null) {
  207. conn.close();
  208. }
  209. } catch (SQLException e) {
  210. e.printStackTrace();
  211. }
  212. }
  213.  
  214. /**
  215. * @param rs 功能介绍:关闭查询资源
  216. */
  217. private void closeQuery(ResultSet rs) {
  218. try {
  219. if (rs != null) {
  220. rs.close();
  221. }
  222.  
  223. if (ps != null) {
  224. ps.close();
  225. }
  226.  
  227. if (conn != null) {
  228. conn.close();
  229. }
  230. } catch (SQLException e) {
  231. e.printStackTrace();
  232. }
  233. }
  234.  
  235. }

Phoenix的jdbc封装的更多相关文章

  1. 优化JDBC封装

    可重用性较强的JDBC封装 以下为代码,注释中写了主要思想 主类 com.util.JDBCUtil.java package com.util; import java.lang.reflect.F ...

  2. jdbc封装代码

    jdbc封装代码 package jdbcUtil; import java.sql.Connection; import java.sql.DriverManager; import java.sq ...

  3. JDBC封装的工具类

    1. JDBC封装的工具类 public class JDBCUtil { private static Properties p = new Properties(); private static ...

  4. 高性能jdbc封装工具 Apache Commons DbUtils 1.6(转载)

    转载自原文地址:http://gao-xianglong.iteye.com/blog/2166444 前言 关于Apache的DbUtils中间件或许了解的人并不多,大部分开发人员在生成环境中更多的 ...

  5. Mysql,JDBC封装

    1.完成对数据库的表的增删改的操作 2.查询返回单条记录 3.查询返回多行记录 4.可以使用反射机制来封装,查询单条记录 5.反射机制,查询多条记录 package myjdbc; import ja ...

  6. Java JDBC封装模式

    模仿DBUtils里面的一些用法,下面是一些简单的实现数据集的操作的方法 下面使用到的两个bean.首先是userbean package bean; public class user { Stri ...

  7. Springmvc对就jdbc封装的操作

    解释: JdbcTemplate 封装常用的JDBC方法 HibernateTemplate  封装常用Hibernate方法 JdbcDaoSupport  JDBC数据访问对象的基类 Hibern ...

  8. JDBC封装

    在模拟servlet调用dao中,我们发现在dao的实现类中有许多重复代码,我们可以将其封装起来. 步骤: 一. 创建一个类 DBUtil 1加载驱动和建立链接的代码 完全一样 加载驱动写到静态代码快 ...

  9. 使用DbUtils对JDBC封装实现面向实体查询

    直接上代码 package org.smart4j.chapter2.helper; import org.apache.commons.dbcp2.BasicDataSource; import o ...

随机推荐

  1. 【python】详解事件驱动event实现

    [python]详解事件驱动event实现 所有的计算机程序都可以大致分为两类:脚本型(单次运行)和连续运行型(直到用户主动退出). 1.脚本型:脚本型的程序包括最早的批处理文件以及使用Python做 ...

  2. 升级chrome浏览器导致网站登录功能不能用

    笔者开发一个java web项目,低版本的chrome(74以下)可以正常登录,升级到chrome74不能正常登录,登录成功后url会携带一个jsessionid=xxxxxx. 登录成功那个页面有s ...

  3. haproxy报错解决

    .有一次访问出现 错误 http://192.168.0.200:10080 haproxy service unavailable no server is avaible to handle th ...

  4. SQLAlchemy如何筛选值为None的列?那么django呢

    示例 from sqlalchemy import create_engine, MetaData, and_, or_, TIMESTAMP Plugin.query.filter(and_(Plu ...

  5. Install Virtualbox on CentOS7---(後話,最終還是沒有用virtualbox做VM server ,感覺只適用于桌面)

    參考: https://wiki.centos.org/zh-tw/HowTos/Virtualization/VirtualBox cd /etc/yum.repos.d wget http://d ...

  6. python-Web-flask-数据库

    3 数据库: Flask-SQLAlchemy 安装及连接 pip install flask-sqlalchemy pip install flask-mysqldb # 数据库链接地址 app.c ...

  7. ETH&EOS开发资源及工具集合(完整汇总版)

    ETH&EOS开发资源及工具集合(完整汇总版) 3113 ETH开发资源篇 一.开发语言 ·         Solidity - 官方推荐以太坊智能合约开发语言,也是目前最为主流的智能合约语 ...

  8. selenium3关于ddt数据驱动。。

    from selenium import webdriver import ddt import time import unittest @ddt.ddt class TestLogin(unitt ...

  9. 六扇门团队作业 ——《DorMi宿舍管理系统需求分析》

    团队作业 --<需求分析> 一.格式描述 这个作业属于哪个课程 <课程的链接> 这个作业要求在哪里 <作业要求的链接> 团队名称 六扇门 这个作业的目标 通过对用户 ...

  10. sleep(0) 的作用

    思考下面这两个问题: 假设现在是 2019-5-18 12:00:00.00,如果我调用一下 Thread.Sleep(1000) ,在 2019-5-18 12:00:01.00 的时候,这个线程会 ...