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之间的控制模块,其功能 ...
随机推荐
- js中dom选择器
document,getElementById("demo"); //通过id查询节点 . document.getElementsByTagName("div&q ...
- 基于vant实现一个问卷调查
实现背景 最近学习<vue实战>,第二篇进阶篇有一个练习 刚好最近在研究vue移动端框架vant 两者结合,实现这么个小项目 实现代码 新建 vue单文件 L0529L.vue <t ...
- C语言 --- 高级指针
1. 指针赋值: C语言允许使用赋值运算进行指针的赋值,前提是两个指针具有相同的类型. int i,*p,*q; p = &i; ...
- mysql表优化
一.定期分析表 ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] 二.定期检查表 CHECK TABLE tbl_nam ...
- PostgreSQL-事务与commit优化
基本概念 事务 Transaction 是 数据库管理系统DBMS 执行过程中的一个逻辑单元,是一个 sql命令组成的序列. 其特点在于,当事务被提交DBMS后,DBMS需要确保所有的操作被完成:如果 ...
- sql server 函数详解(2)数学函数
绝对值函数ABS(x)和返回圆周率的函数PI() 平方根函数SQRT(x) 获取随机函数的函数RAND()和RAND(x) 四舍五入函数ROUND(x,y) 符号函数SIGN(x) 获取整数的函数CE ...
- PHP foreach 引用 &
以前用foreach,总喜欢在第二次遍历时改变value的拼写,比如 $x = array("a", "b", "c"); foreach ...
- express做登录判断
1)JWT试试 https://github.com/penguinab/express-jwt 2)express session https://github.com/whevether/reac ...
- maven 下载源码eclipse的配置
1.在eclipse使用maven 下载源码包需要更改 D:\apache-maven-3.2.1-bin\apache-maven-3.2.1\conf 目录下 的 settings.xml 文件, ...
- Spring Boot整合Spring Security总结
一.创建Spring Boot项目 引入Thymeleaf和Web模块以及Spring Security模块方便进行测试,先在pom文件中将 spring-boot-starter-security ...