`
wuhaidong
  • 浏览: 349213 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

JDBC

    博客分类:
  • NC
阅读更多

package nc.jdbc.framework;

import java.util.ArrayList;
import nc.jdbc.framework.JdbcSession;
import nc.jdbc.framework.JdbcTransaction;
import nc.jdbc.framework.PersistenceManager;
import nc.jdbc.framework.SQLParameter;
import nc.jdbc.framework.exception.DbException;
import nc.jdbc.framework.processor.ResultSetProcessor;

/**
 * JDBC 封装
 * @author wuhaidong
 * @version 1.0
 */
public class DBUtils {
	
	private PersistenceManager sessionManager = null;
	private JdbcSession session = null;
	private JdbcTransaction tran = null;
	private Object obj = null;
	/**
	 * 构造函数
	 * 描述: 管理连接会话的生命周期,并提供了对单表VO操作的常用实现
	 */
	public DBUtils(){
		try {
			sessionManager = PersistenceManager.getInstance();
		} catch (DbException e) {
			e.printStackTrace();
		}
	}
	/**
	 * 构造函数
	 * 描述: 根据传递构造参选择不同的数据源
	 * @param dataSource
	 */
	public DBUtils(String dataSource){
		try {
			if(null != dataSource && !dataSource.equals("")){
				sessionManager = PersistenceManager.getInstance(dataSource);
			}
		} catch (DbException e) {
			e.printStackTrace();
		}
	}
	/**
	 * 构造函数
	 * 描述: 根据传递构造参选择不同的连接(JdbcSession)
	 * @param session
	 */
	public DBUtils(JdbcSession session){
		if(null != session){
			sessionManager = PersistenceManager.getInstance(session);
		}
	}
	/**
	 * 提供了对单表VO操作的常用实现
	 * @return
	 */
	public PersistenceManager getPersistenceManager(){
		return sessionManager;
	}
	/**
	 * 连接数据库
	 * @throws DbException 
	 *
	 */
	public JdbcSession getConnection() throws DbException{
		if(null == session){
			session = sessionManager.getJdbcSession();
		}
		return session;
	}
	/**
	 * 执行数据库操作 -- 增,删,改
	 * @param sqlStr
	 * @param param
	 * @return
	 */
	public boolean executeUpdate(String sqlStr,SQLParameter param){
		if(null == sqlStr || sqlStr.length() == 0){
			return false;
		}
		if(null == param){
			return false;
		}
		try {
			this.getConnection();
			session.executeUpdate(sqlStr,param);
			return true;
		} catch (DbException e) {
			e.printStackTrace();
			throw new RuntimeException(e.getMessage());
		}finally{
			sessionManager.release();//需要关闭会话
		}
	}
	/**
	 * 执行数据库操作 -- 增,删,改
	 * @param sqlStr
	 * @return
	 */
	public boolean executeUpdate(String sqlStr){
		if(null == sqlStr || sqlStr.length() == 0){
			return false;
		}
		try {
			this.getConnection();
			session.executeUpdate(sqlStr);
			return true;
		} catch (DbException e) {
			e.printStackTrace();
			throw new RuntimeException(e.getMessage());
		}finally{
			sessionManager.release();//需要关闭会话
		}
	}
	/**
	 * 执行数据库操作 -- 查
	 * @param sqlStr
	 * @param rsProcessor
	 * @return
	 */
	public Object executeQuery(String sqlStr, ResultSetProcessor rsProcessor){
		if(null == sqlStr || sqlStr.length() == 0){
			return null;
		}
		try {
			this.getConnection();
			session.setReadOnly(true);//设置对数据库只读模式
			obj = session.executeQuery(sqlStr, rsProcessor);
			session.setReadOnly(false);//设回对数据库的模式
			return obj;
		} catch (DbException e) {
			e.printStackTrace();
			throw new RuntimeException(e.getMessage());
		}finally{
			sessionManager.release();//需要关闭会话
		}
	}
	/**
	 * 执行数据库操作 -- 查
	 * @param sqlStr
	 * @param param
	 * @param rsProcessor
	 * @return
	 */
	public Object executeQuery(String sqlStr, SQLParameter param, ResultSetProcessor rsProcessor){
		if(null == sqlStr || sqlStr.length() == 0){
			return null;
		}
		if(null == param){
			return null;
		}
		try {
			this.getConnection();
			session.setReadOnly(true);//设置对数据库只读模式
			obj = session.executeQuery(sqlStr, param, rsProcessor);
			session.setReadOnly(false);//设回对数据库的模式
			return obj;
		} catch (DbException e) {
			e.printStackTrace();
			throw new RuntimeException(e.getMessage());
		}finally{
			sessionManager.release();//需要关闭会话
		}
	}
	/**
	 * 多条数据库更新 -- 事务
	 * @param al
	 * @return
	 */
	public boolean executeUpdates(ArrayList<String> al){
		if(null == al && al.size() == 0){
			return false;
		}
		try {
			this.getConnection();
			session.setAutoCommit(false);//不自动提交模式
			tran = session.createTransaction();//开始事务
			for(int i = 0; i < al.size(); i++){
				session.addBatch(al.get(i));
			}
			session.executeBatch();
			tran.commitTransaction();//提交事务
			session.setAutoCommit(true);//设回自动提交模式
			return true;
		} catch (DbException e) {
			e.printStackTrace();
			if(null != session){
				try {
					session.setAutoCommit(true);//设回自动提交模式
					tran.rollbackTransaction();//回滚事务
				} catch (DbException e1) {
					e1.printStackTrace();
					throw new RuntimeException(e1.getMessage());
				}
			}
			throw new RuntimeException(e.getMessage());
		}finally{
			sessionManager.release();//需要关闭会话
		}
	}
	
	public boolean executeUpdates(ArrayList<String> al, SQLParameter param){
		if(null == al && al.size() == 0){
			return false;
		}
		try {
			this.getConnection();
			session.setAutoCommit(false);//不自动提交模式
			tran = session.createTransaction();//开始事务
			for(int i = 0; i < al.size(); i++){
				session.addBatch(al.get(i),param);
			}
			session.executeBatch();
			tran.commitTransaction();//提交事务
			session.setAutoCommit(true);//设回自动提交模式
			return true;
		} catch (DbException e) {
			e.printStackTrace();
			if(null != session){
				try {
					session.setAutoCommit(true);//设回自动提交模式
					tran.rollbackTransaction();//回滚事务
				} catch (DbException e1) {
					e1.printStackTrace();
					throw new RuntimeException(e.getMessage());
				}
			}
			throw new RuntimeException(e.getMessage());
		}finally{
			sessionManager.release();//需要关闭会话
		}
	}
}
 
分享到:
评论

相关推荐

    JDBC简单写法JDBC简单写法JDBC简单写法

    JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单...

    Spring Data JDBC与JDBC的区别

    JDBC规范   java.sql和javax.sql两个包中的类与接口(天龙八部):  DataSource:数据源  DriverManager:驱动管理  Driver:JDBC驱动  Connection:数据库连接  Statement:语句,执行SQL  PrepareStatement:...

    sqlite-jdbc-3.15.1-API文档-中文版.zip

    赠送jar包:sqlite-jdbc-3.15.1.jar; 赠送原API文档:sqlite-jdbc-3.15.1-javadoc.jar; 赠送源代码:sqlite-jdbc-3.15.1-sources.jar; 赠送Maven依赖信息文件:sqlite-jdbc-3.15.1.pom; 包含翻译后的API文档:...

    Java连接达梦数据库驱动dm_jdbc

    Java连接达梦数据库驱动dm_jdbc: dm_jdbc\com.dameng.floader.jar dm_jdbc\com.dameng.impexp.jar dm_jdbc\Dm7Dictionary.jar dm_jdbc\Dm7JdbcDriver14.jar dm_jdbc\Dm7JdbcDriver15.jar dm_jdbc\Dm7JdbcDriver16....

    sqlite-jdbc-3.34.0-API文档-中文版.zip

    赠送jar包:sqlite-jdbc-3.34.0.jar; 赠送原API文档:sqlite-jdbc-3.34.0-javadoc.jar; 赠送源代码:sqlite-jdbc-3.34.0-sources.jar; 赠送Maven依赖信息文件:sqlite-jdbc-3.34.0.pom; 包含翻译后的API文档:...

    log4jdbc监控sql及执行时间

    1、在应用中jdbc url最前面添加jdbc:log4;比如oracle的url就变成了jdbc:log4jdbc:oracle:thin:@x.x.x.x:1521:dbname; 2、在日志系统中设置jdbc.sqlonly、jdbc.sqltiming等日志级别,可直接将log4jdbc doc中的日志...

    jdbc jdbc jdbc

    jdbc jdbc jdbc jdbc jdbc jdbc jdbc jdbc

    适用于 SQL Server 2014、2012、2008R2的JDBC Drivers 4.1

    它属于 Type 4 JDBC 驱动程序,通过 Java 平台(企业版 5、6 和 7)中可用的标准 JDBC 应用程序接口 (API) 提供数据连接。 适用于 SQL Server 的 Microsoft JDBC Driver 4.1(预览版)与 JDBC 4.0 兼容,并且可以在...

    sqljdbc4.jar和sqljdbc.jar下载

    sqljdbc.jar 类库提供对 JDBC 3.0 的支持。 sqljdbc.jar 类库要求使用 5.0 版的 Java 运行时环境 (JRE)。连接到数据库时,在 JRE 6.0 上使用 sqljdbc.jar 会引发异常。 注意: JDBC Driver 2.0 不支持 JRE 1.4。...

    JDBC-ODBC BRIDGE PATCH for JDK 1.6/1.7 64bit

    SUN JDK 1.6/1.7 64bit的JDBC-ODBC Bridge有个缺陷:会随机抛出异常如下,在所有的ODBC Driver上。 java.sql.SQLException: [Microsoft][ODBC Driver Manager] Invalid string or buffer length at sun.jdbc.odbc....

    hive-jdbc hive jdbc驱动

    hive-jdbc

    sqlserver驱动包 jdbc驱动 sqljdbc.jar和sqljdbc4.jar

    sqlserver驱动包 jdbc驱动 sqljdbc.jar sqljdbc4.jar jdbc连接sqlserver数据库驱动, sqljdbc.jar和sqljdbc4.jar均有

    Microsoft SQL Server 2008 JDBC 3.0(微软官网下载)

    SQL Server JDBC Driver 3.0,这是一个 Type 4 JDBC 驱动程序,它通过 Java Platform, Enterprise Edition 5 及更高版本中可用的标准 JDBC 应用程序编程接口 (API) 提供数据库连接。 系统要求: •支持的操作系统:...

    JDBCDriver3.0.rar_jdbc driver 3.0_sql jdbc 3.0_sql server jdbc_s

    Microsoft SQL Server JDBC Driver 3.0.JSP驱动。

    SpringBoot中封装jdbc工具类

    现在的数据层的开发,大多会使用...但是在一些极端的场景下往往原生的jdbc方式操作数据库更灵活,性能更高。由于部分场景下MyBatis或JPA之类无法满足我的需求,所以我打算自己封装一套查数据库的工具类。 文章地址: ...

    JDBC 解析JDBC中文API

    JDBC 解析JDBC中文API各种数据库之间的链接问题,网络编程

    logstash-output-jdbc.zip

    ./logstash-plugin prepare-offline-pack --overwrite --output logstash-input-jdbc.zip logstash-input-jdbc 最后成功会出现以下信息 You can install it with this command `bin/logstash-plugin install file...

    JDBC代码JDBC代码JDBC代码

    JDBC代码 JDBC代码JDBC代码 JDBC代码

    JavaEE源代码 jdbc2_0-stdext

    JavaEE源代码 jdbc2_0-stdextJavaEE源代码 jdbc2_0-stdextJavaEE源代码 jdbc2_0-stdextJavaEE源代码 jdbc2_0-stdextJavaEE源代码 jdbc2_0-stdextJavaEE源代码 jdbc2_0-stdextJavaEE源代码 jdbc2_0-stdextJavaEE源...

    数据库实验8 java连接数据库(JDBC代码+报告)

    《数据库系统概论》课程之实验八,通过JDBC访问数据库。本文件中包含实验报告一份,可运行代码一份与JDBC的驱动jar包。 程序实现了使用Java语言编程实现对数据库的访问,所有的SQL操作均在自己建立的新库里进行,...

Global site tag (gtag.js) - Google Analytics