当前位置:网站首页>Phoenix JDBC
Phoenix JDBC
2022-07-07 18:15:00 【南风知我意丿】
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();
}
}
}
边栏推荐
- CSDN语法说明
- 【STL】vector
- The boundary of Bi: what is bi not suitable for? Master data, Martech? How to expand?
- Force buckle 599 Minimum index sum of two lists
- 数据孤岛是企业数字化转型遇到的第一道险关
- vulnhub之Funfox2
- 怎样用Google APIs和Google的应用系统进行集成(1)—-Google APIs简介
- Force buckle 989 Integer addition in array form
- When easygbs cascades, how to solve the streaming failure and screen jam caused by the restart of the superior platform?
- Cuda版本不一致,编译apex报错
猜你喜欢
One click deployment of any version of redis
With st7008, the Bluetooth test is completely grasped
Mrs offline data analysis: process OBS data through Flink job
关于cv2.dnn.readNetFromONNX(path)就报ERROR during processing node with 3 inputs and 1 outputs的解决过程【独家发布】
Cloud component development and upgrading
Jenkins 用户权限管理
机械臂速成小指南(十二):逆运动学分析
力扣 599. 两个列表的最小索引总和
PHP method of obtaining image information
大厂经典指针笔试题
随机推荐
MRS离线数据分析:通过Flink作业处理OBS数据
如何在软件研发阶段落地安全实践
How C language determines whether it is a 32-bit system or a 64 bit system
使用高斯Redis实现二级索引
【mysql篇-基础篇】事务
How to cooperate among multiple threads
MIT science and technology review article: AgI hype around Gato and other models may make people ignore the really important issues
《数字图像处理原理与实践(MATLAB版)》一书之代码Part2[通俗易懂]
Some important knowledge of MySQL
Meta Force原力元宇宙系统开发佛萨奇模式
Micro service remote debug, nocalhost + rainbow micro service development second bullet
微服务远程Debug,Nocalhost + Rainbond微服务开发第二弹
mock. JS returns an array from the optional data in the object array
开发那些事儿:Go加C.free释放内存,编译报错是什么原因?
【STL】vector
力扣 88.合并两个有序数组
SQL common optimization
Simulate the implementation of string class
让这个CRMEB单商户微信商城系统火起来,太好用了!
Semantic slam source code analysis