JDBC接口封装
package cn.piesat.sparkproject.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
import cn.piesat.sparkproject.conf.ConfigurationManager;
import cn.piesat.sparkproject.constant.Constants;
/**
* jdbc辅助组件
* @author Administrator
*
*/
public class JDBCHelper {
private static JDBCHelper instance=null;
/**
* 数据库连接池
*/
private LinkedList<Connection> dataSource=new LinkedList<Connection>();
static{
try {
Class.forName(ConfigurationManager.getProperty(Constants.JDBC_DRIVER));
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 私有化构造方法
*/
private JDBCHelper(){
int datasourceSize=ConfigurationManager.getInteger(Constants.JDBC_DATASOURCE_SIZE);
for(int i=0;i<datasourceSize;i++){
try {
Connection conn=DriverManager.getConnection(
ConfigurationManager.getProperty(Constants.JDBC_URL),
ConfigurationManager.getProperty(Constants.JDBC_USER),
ConfigurationManager.getProperty(Constants.JDBC_PASSWORD));
dataSource.push(conn);
} catch (SQLException e) {
e.printStackTrace();
}
}
};
/**
* 获取实例
* @return
*/
public static JDBCHelper getInstance(){
if(instance==null){
synchronized(JDBCHelper.class){
if(instance==null){
instance=new JDBCHelper();
}
}
}
return instance;
}
/**
* 获取数据库连接
* @return
*/
public synchronized Connection getConnection(){
while(dataSource.size()<=0){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return dataSource.poll();
}
/**
* 执行增删改SQL语句
* @param sql
* @param params
* @return
*/
public int executeUpdate(String sql,Object[] params){
Connection conn=null;
PreparedStatement pstmt=null;
int rnt=0;
try{
conn=getConnection();
pstmt = conn.prepareStatement(sql);
for(int i=0;i<params.length;i++){
pstmt.setObject(i+1, params[i]);
}
rnt = pstmt.executeUpdate();
}catch(Exception e){
e.printStackTrace();
}finally{
if(conn!=null){
dataSource.push(conn);
}
}
return rnt;
}
/**
* 执行查询SQL语句
* @param sql
* @param params
*/
public void executeQuery(String sql,Object[] params,QueryCallback callback){
Connection conn=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
try{
conn=getConnection();
pstmt=conn.prepareStatement(sql);
if(params!=null){
for(int i=0;i<params.length;i++){
pstmt.setObject(i+1, params[i]);
}
}
rs=pstmt.executeQuery();
callback.process(rs);
}catch(Exception e){
e.printStackTrace();
}finally{
if(conn!=null){
dataSource.push(conn);
}
}
}
/**
* 批量执行sql语句
* @param sql
* @param params
* @return 每条sql语句影响的行数
*/
public int[] executeBatch(String sql,List<Object[]> paramsList){
int[] rtn=null;
Connection conn=null;
PreparedStatement pstmt=null;
try{
conn=getConnection();
conn.setAutoCommit(false);
pstmt=conn.prepareStatement(sql);
for(Object[] params:paramsList){
for(int i=0;i<params.length;i++){
pstmt.setObject(i+1, params[i]);
}
pstmt.addBatch();
}
rtn=pstmt.executeBatch();
conn.commit();
}catch(Exception e){
e.printStackTrace();
}finally{
if(conn!=null){
dataSource.push(conn);
}
}
return rtn;
}
/**
* 查询回调接口
* @author Administrator
*
*/
public static interface QueryCallback{
void process(ResultSet rs)throws Exception;
}
}
JDBC接口封装的更多相关文章
- java:Session(概述,三层架构实例(实现接口封装JDBC),Session实现简单购物车实例)
1.Session概述: Session:在计算机中,尤其是在网络应用中,称为“会话控制”.Session 对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序的 Web 页之间跳转时,存 ...
- jdbc java数据库连接 2)jdbc接口核心的API
JDBC接口核心的API java.sql.* 和 javax.sql.*(java2.0以后更新的扩展) |- Driver接口: 表示java驱动程序接口.所有的具体的数据库厂商要来实现此接 ...
- Spring对Jdbc的封装——JdbcTemplate的使用
链接:https://pan.baidu.com/s/15luDElW4oeEaP0nvEQ_40w 提取码:i2r1 JdbcTemplate是Spring对JDBC的封装,目的是使JDBC更加易于 ...
- Java微信公众平台接口封装源码分享
前言: 这篇博客是在三月初动手项目的时候准备写的,但是为了完成项目只好拖延时间写这篇博客,顺便也可以在项目中应用我自己总结的的一些经验.今天看来,这些方法的应用还是可以的,至少实现了我之前的 ...
- C++ Redis mset 二进制数据接口封装方案
C++ Redis mset 二进制数据接口封装方案 需求 C++中使用hiredis客户端接口访问redis: 需要使用mset一次设置多个二进制数据 以下给出三种封装实现方案: 简单拼接方案 在r ...
- JDBC操作封装
这两天学习了一下jdbc的封装,依据的是下面这篇 http://wenku.baidu.com/link?url=FaFDmQouYkKO24ApATHYmA5QzUcj-UE-7RSSZaBWPqk ...
- 利用jdbc简单封装一个小框架(类似DBUtils)
利用jdbc写的一个类似DBUtils的框架 package com.jdbc.orm.dbutils; import java.io.IOException; import java.io.Inpu ...
- hiredis异步接口封装并导出到Lua
hiredis异步接口封装并导出到Lua(金庆的专栏 2017.1)hiredis 不支持 Windows, Windows 下使用 wasppdotorg / hiredis-for-windows ...
- 基于Verilog的带FIFO输出缓冲的串口接收接口封装
一.模块框图及基本思路 rx_module:串口接收的核心模块,详细介绍请见“基于Verilog的串口接收实验” rx2fifo_module:rx_module与rx_fifo之间的控制模块,其功能 ...
随机推荐
- 基于高斯分布的异常检测(Anomaly Detection)算法
记得在做电商运营初期,每每为我们频道的促销活动锁取得的“超高”销售额感动,但后来随着工作的深入,我越来越觉得这里面水很深.商家运营.品类运营不断的通过刷单来获取其所需,或是商品搜索排名,或是某种kpi ...
- 【VS开发】【电子电路技术】RJ45以太网传输线研究
RJ45以太网传输线研究 最近研究远距离差分视频传输方案,理所当然想到了LVDS协议.至于选用cameralink传输线,还是选用其他方案,本人更倾向于廉价的RJ45以太网线来实现LVDS差分信号的传 ...
- 2019/12.09centos安装 | 无密钥登陆
centos配置 1.安装位置选择(我要配置分区) →完成 2.添加新挂载点:/boot 400M /swap 4GB / 期望容量空 3.设置root密码:字母+数字 4.重启 5.点击编辑,NA ...
- linux shutdown 命令 关机 重启
关机 shutdown -h now 重启 shutdown -r now
- [.net core]7 4种app key value的配置方法及优先顺序
就是这货 点开查看内容 { "Logging": { "LogLevel": { "Default": "Warning" ...
- allure 这么高大上的测试报告环境,5 分钟搞定
allure 的测试报告是老板喜欢的样子.如果能用上 allure,干嘛还选择其他的测试报告类型呢?python 的 pytest 单元测试框架有 allure 的插件,可以很方便的在 python ...
- KL散度的理解(GAN网络的优化)
原文地址Count Bayesie 这篇文章是博客Count Bayesie上的文章Kullback-Leibler Divergence Explained 的学习笔记,原文对 KL散度 的概念诠释 ...
- 关于在docker中配置elasticsearch容器的方法
一.关于docker的安装,注意几点 1.如果系统是Win10家庭版,是没有Hyper-V的,所以无法安装docker(运行docker安装包会报错),为此docker官网提供的解决方法是安装dock ...
- 绑定异常pom
绑定:. <build> <resources> <resource> <directory>src/main/resources</direct ...
- 数据库备份及SQL脚本导入
数据库备份及SQL脚本导入 数据导出 su - oracle exp 数据库用户名/数据库密码@ORCL file=20190905.dmp full=y SQL脚本导入 首先导入前查看Oracle用 ...