Phoenix的jdbc封装
一、Phoenix版本
- <dependency>
<groupId>org.apache.phoenix</groupId>
<artifactId>phoenix-core</artifactId>
<version>4.8.0-HBase-1.2</version>
</dependency>
二、连接Phoenix和基本CRUD封装
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import java.sql.*;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- /**
- * 功能介绍:使用jdbc对数据库操作:查询、更新(插入/修改/删除)、批量更新
- */
- public class DButil {
- private final Logger LOGGER = LoggerFactory.getLogger(getClass());
- /**jdbc的链接*/
- private Connection conn = null;
- /**准备sql*/
- private PreparedStatement ps = null;
- {
- initConnection();
- }
- /**
- * @param sql
- * @param params 参数
- * 功能介绍:更新操作(修改,删除,插入)
- */
- public int executeUpdate(String sql, Object[] params) {
- if(null == conn){
- initConnection();
- }
- try {
- ps = conn.prepareStatement(sql);
- if (params.length != 0) {
- for (int i = 0; i < params.length; i++) {
- ps.setObject(i + 1, params[i]);
- }
- }
- int rows = ps.executeUpdate();
- conn.commit();
- return rows;
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- closeUpdate();
- }
- return 0;
- }
- /**
- * @param sql
- * @param list
- * 功能介绍:批量更新
- */
- public void batchUpdate(String sql, List<Object[]> list) {
- if(null == conn){
- initConnection();
- }
- try {
- ps = conn.prepareStatement(sql);
- //关闭自动提交事务
- conn.setAutoCommit(false);
- //防止内存溢出
- final int batchSize = 1000;
- //记录插入数量
- int count = 0;
- int size = list.size();
- Object[] obj = null;
- for (int i = 0; i < size; i++) {
- obj = list.get(i);
- for (int j = 0; j < obj.length; j++) {
- ps.setObject(j + 1, obj[j]);
- }
- ps.addBatch();
- if (++count % batchSize == 0) {
- ps.executeBatch();
- conn.commit();
- }
- }
- ps.executeBatch();
- conn.commit();
- conn.setAutoCommit(true);
- } catch (SQLException e) {
- e.printStackTrace();
- try {
- conn.rollback();
- conn.setAutoCommit(true);
- } catch (SQLException e1) {
- e1.printStackTrace();
- }
- } finally {
- //关闭资源
- closeUpdate();
- }
- }
- /**
- * @param sql
- * @param params
- * 功能介绍:查询操作
- */
- public List<Map<String, Object>> executeQuery(String sql, Object[] params) {
- if(null == conn){
- initConnection();
- }
- ResultSet rs = null;
- List<Map<String, Object>> list = null;
- try {
- ps = conn.prepareStatement(sql);
- if (params != null) {
- for (int i = 0; i < params.length; i++) {
- ps.setObject(i + 1, params[i]);
- }
- }
- long startTime = System.currentTimeMillis();
- rs = ps.executeQuery();
- LOGGER.info("UserBigTableService sql-executeQuery-time: " + (System.currentTimeMillis() - startTime) + "ms");
- list = new ArrayList<>();
- //移动光标,如果新的当前行有效,则返回 true;如果不存在下一行,则返回 false
- while (rs.next()) {
- ResultSetMetaData rsmd = rs.getMetaData();
- Map<String, Object> map = new HashMap<>(16);
- for (int i = 1; i <= rsmd.getColumnCount(); i++) {
- map.put(rsmd.getColumnName(i), rs.getObject(i));
- }
- list.add(map);
- }
- return list;
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- closeQuery(rs);
- }
- return null;
- }
- /**
- * @param sql
- * @param params
- * 功能介绍:查询操作一条记录
- */
- public Map<String, Object> query (String sql, Object[] params) {
- if(null == conn){
- initConnection();
- }
- ResultSet rs = null;
- Map<String, Object> map = null;
- try {
- ps = conn.prepareStatement(sql);
- if (params != null) {
- for (int i = 0; i < params.length; i++) {
- ps.setObject(i + 1, params[i]);
- }
- }
- rs = ps.executeQuery();
- //移动光标,如果新的当前行有效,则返回 true;如果不存在下一行,则返回 false
- while (rs.next()) {
- ResultSetMetaData rsmd = rs.getMetaData();
- map = new HashMap<>(16);
- for (int i = 1; i <= rsmd.getColumnCount(); i++) {
- map.put(rsmd.getColumnName(i), rs.getObject(i));
- }
- //若有多条记录,取第一条。
- break;
- }
- return map;
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- closeQuery(rs);
- }
- return null;
- }
- /**
- * 初始化连接
- */
- private void initConnection() {
- try {
- //local
- conn = DriverManager.getConnection("jdbc:phoenix:192.168.1.220");
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * 功能介绍:关闭更新资源
- */
- private void closeUpdate() {
- try {
- if (ps != null) {
- ps.close();
- }
- if (conn != null) {
- conn.close();
- }
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- /**
- * @param rs 功能介绍:关闭查询资源
- */
- private void closeQuery(ResultSet rs) {
- try {
- if (rs != null) {
- rs.close();
- }
- if (ps != null) {
- ps.close();
- }
- if (conn != null) {
- conn.close();
- }
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
Phoenix的jdbc封装的更多相关文章
- 优化JDBC封装
可重用性较强的JDBC封装 以下为代码,注释中写了主要思想 主类 com.util.JDBCUtil.java package com.util; import java.lang.reflect.F ...
- jdbc封装代码
jdbc封装代码 package jdbcUtil; import java.sql.Connection; import java.sql.DriverManager; import java.sq ...
- JDBC封装的工具类
1. JDBC封装的工具类 public class JDBCUtil { private static Properties p = new Properties(); private static ...
- 高性能jdbc封装工具 Apache Commons DbUtils 1.6(转载)
转载自原文地址:http://gao-xianglong.iteye.com/blog/2166444 前言 关于Apache的DbUtils中间件或许了解的人并不多,大部分开发人员在生成环境中更多的 ...
- Mysql,JDBC封装
1.完成对数据库的表的增删改的操作 2.查询返回单条记录 3.查询返回多行记录 4.可以使用反射机制来封装,查询单条记录 5.反射机制,查询多条记录 package myjdbc; import ja ...
- Java JDBC封装模式
模仿DBUtils里面的一些用法,下面是一些简单的实现数据集的操作的方法 下面使用到的两个bean.首先是userbean package bean; public class user { Stri ...
- Springmvc对就jdbc封装的操作
解释: JdbcTemplate 封装常用的JDBC方法 HibernateTemplate 封装常用Hibernate方法 JdbcDaoSupport JDBC数据访问对象的基类 Hibern ...
- JDBC封装
在模拟servlet调用dao中,我们发现在dao的实现类中有许多重复代码,我们可以将其封装起来. 步骤: 一. 创建一个类 DBUtil 1加载驱动和建立链接的代码 完全一样 加载驱动写到静态代码快 ...
- 使用DbUtils对JDBC封装实现面向实体查询
直接上代码 package org.smart4j.chapter2.helper; import org.apache.commons.dbcp2.BasicDataSource; import o ...
随机推荐
- 【python】详解事件驱动event实现
[python]详解事件驱动event实现 所有的计算机程序都可以大致分为两类:脚本型(单次运行)和连续运行型(直到用户主动退出). 1.脚本型:脚本型的程序包括最早的批处理文件以及使用Python做 ...
- 升级chrome浏览器导致网站登录功能不能用
笔者开发一个java web项目,低版本的chrome(74以下)可以正常登录,升级到chrome74不能正常登录,登录成功后url会携带一个jsessionid=xxxxxx. 登录成功那个页面有s ...
- haproxy报错解决
.有一次访问出现 错误 http://192.168.0.200:10080 haproxy service unavailable no server is avaible to handle th ...
- SQLAlchemy如何筛选值为None的列?那么django呢
示例 from sqlalchemy import create_engine, MetaData, and_, or_, TIMESTAMP Plugin.query.filter(and_(Plu ...
- Install Virtualbox on CentOS7---(後話,最終還是沒有用virtualbox做VM server ,感覺只適用于桌面)
參考: https://wiki.centos.org/zh-tw/HowTos/Virtualization/VirtualBox cd /etc/yum.repos.d wget http://d ...
- python-Web-flask-数据库
3 数据库: Flask-SQLAlchemy 安装及连接 pip install flask-sqlalchemy pip install flask-mysqldb # 数据库链接地址 app.c ...
- ETH&EOS开发资源及工具集合(完整汇总版)
ETH&EOS开发资源及工具集合(完整汇总版) 3113 ETH开发资源篇 一.开发语言 · Solidity - 官方推荐以太坊智能合约开发语言,也是目前最为主流的智能合约语 ...
- selenium3关于ddt数据驱动。。
from selenium import webdriver import ddt import time import unittest @ddt.ddt class TestLogin(unitt ...
- 六扇门团队作业 ——《DorMi宿舍管理系统需求分析》
团队作业 --<需求分析> 一.格式描述 这个作业属于哪个课程 <课程的链接> 这个作业要求在哪里 <作业要求的链接> 团队名称 六扇门 这个作业的目标 通过对用户 ...
- sleep(0) 的作用
思考下面这两个问题: 假设现在是 2019-5-18 12:00:00.00,如果我调用一下 Thread.Sleep(1000) ,在 2019-5-18 12:00:01.00 的时候,这个线程会 ...