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之间的控制模块,其功能 ...
随机推荐
- Unity3D中的SendMessage使用(消息传递的三种方法)
概述 Unity提供的消息推送机制可以非常方便我们的脚本开发,它实现的是一种伪监听者模式,利用的是反射机制. 常用函数 关于消息推送,常用的函数有三个:”SendMessage“.”SendMessa ...
- 用linux主机做网关搞源地址转换(snat)
一.原理图 二.环境 外网 A:192.168.100.20 (vmnet1) 网关 B:192.168.100.10 (vmnet1) 192.168.200.10 (vmnet2) ...
- magento下载地址
https://download.magentochina.org/magento/2/ https://www.magentochina.org/blog/download-install-mage ...
- magento form.html不显示 window 和 Linux下的区别
window 无大小写区别,所以可以显示表框 Linux 大小写敏感,显示不了 \app\code\community\Company\BabyPay\Model\Payment.php 里定义了fo ...
- 利用Ansible模块copy和fetch进行主机间文件的传递
场景: java应用程序和Ansible不在同一台机子,要读取的文件又在另一台主机. 主机a不能保存文件,可以临时保存. 文件都在主机b上保存. 需求: 需要将文件从主机c传到主机b,再从主机b传到主 ...
- etcd集群移除节点
查看当前集群信息 # etcdctl member list --write-out=table +------------------+---------+--------------------+ ...
- 使用Tomcat、JNDI与ActiveMQ实现JMS消息通信服务
前言 之所以使用JNDI 是出于通用性考虑,该例子使用JMS规范提供的通用接口,没有使用具体JMS提供者的接口,这样可以保证我们编写的程序适用于任何一种JMS实现(ActiveMQ.HornetQ等) ...
- 【BZOJ-4289】Tax 最短路 + 技巧建图(化边为点)
题意 给出一个N个点M条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点1到点N的最小代价.起点的代价是离开起点的边的边权,终点的代价是进入终点的边的边权N<=10 ...
- 【二】Django 视图和url配置
在新建的Django项目下,新建一个views的python文件,编辑如下代码 from django.http import HttpResponse def hello(request): ret ...
- 曹工说Spring Boot源码(5)-- 怎么从properties文件读取bean
写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...