Java持久化封装类

小编 2026-06-27 阅读:1603 评论:0
通过原生的java代码封装的类,这样每次数据库操作都要创建这个数据库操作的类,效率较低。 demo: DBO类 package test; import java.sql.Connection;...

通过原生的java代码封装的类,这样每次数据库操作都要创建这个数据库操作的类,效率较低。

demo:

DBO类

package test;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.hyena.frame.util.DateTimeUtil;

public class DBO {


	protected Connection conn = null; //数据库连接对象
	protected Statement stmt = null;  //Statement
	protected boolean isTrans = true;  //默认为自动提交,即不进行事务处理
	protected String DBName = \"\";      //要连接的数据库

	public boolean isConnected = false;  //数据库连接是否成功
	

	public Connection getConn(){
		return this.conn;
	}
	
	/**
	 * 设置手动提交事务
	 */
	public void setAutoTrans(){
		this.isTrans = false;
	}
	
	/**
	 * Default constructor,no parameters
	 * 取数据库连接并生产Statement。
	 * @throws SQLException
	 */
	public void init(String db){
		try{
			this.DBName = db;
			this.conn = KQDAO.getConnection(this.DBName);
			this.isConnected = false;
			while(!this.isConnected){
				try {
					if(this.conn.isClosed()) this.conn = KQDAO.getConnection(this.DBName);
					Statement stmt = this.conn.createStatement();
					stmt.executeQuery(\"select 0\");
					stmt.close();
					this.isConnected = true;
				} 
				catch (SQLException e) { 
					this.isConnected = false;
					this.conn = KQDAO.getConnection(this.DBName);
				} 
			}
		}catch(Exception e){
			this.conn = null;
			this.isConnected = false;
			System.err.print(DateTimeUtil.formatDateTime(java.util.Calendar.getInstance().getTime(),\"yyyy-MM-dd HH:mm:ss\"));
			System.err.println(\" YDX Err: DBO.init(\"+ db + \"): \"+ e.getMessage());
		}

	}

	/**
	 * Default constructor, parameter bl control if the connection auto commit trans
	 * 取数据库连接并生产Statement。
	 * @throws SQLException
	 */
	public void init(String db,boolean bl){
		try{
			this.init(db);
			this.isTrans = bl;
			this.conn.setAutoCommit(this.isTrans);
			this.isConnected = true;
		}catch(Exception e){
			this.conn = null ;
			this.isConnected = false;
			System.err.print(DateTimeUtil.formatDateTime(java.util.Calendar.getInstance().getTime(),\"yyyy-MM-dd HH:mm:ss\"));
			System.err.println(\" YDX Err: DBO.init(): \"+ db + \" ------------ \" + e.getMessage());
		}
	}

	
	/**
	 * 执行查询。
	 * 该方法调用Statement的executeQuery(sql)方法并返回ResultSet结果集。
	 * @param sql SQL语句
	 * @return ResultSet结果集
	 */
	public ResultSet executeQuery(String sql) throws SQLException {
		ResultSet rs = null;
		try{
			//Statement stmt = this.conn.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);
			PreparedStatement pstmt=this.conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,	ResultSet.CONCUR_READ_ONLY);
			if(pstmt != null){
				//rs = stmt.executeQuery(sql);
				pstmt.executeQuery();
				rs = pstmt.getResultSet();
			}
		}catch(SQLException e){
			System.out.println(DateTimeUtil.formatDateTime(java.util.Calendar.getInstance().getTime(),\"yyyy-MM-dd HH:mm:ss\") +\" YDX Err: DBO.executeQuery(): \"+ e.getMessage());
			System.out.println(\"YDX Err SQL: \"+ DBName + \" sql:\" + sql);
		}
		return rs;
	}
	
	/**
	 * 执行更新。
	 * @param sql SQL语句
	 * @return 修改的行数
	 */
	public int executeUpdate(String sql) throws SQLException {
		int iRtn=-1;
		try{
			Statement stmt = this.conn.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);
			if(stmt != null){
				//System.out.println(sql);
				iRtn = stmt.executeUpdate(sql);
				stmt.close();
			}
		}catch(Exception e){
			System.out.println(DateTimeUtil.formatDateTime(java.util.Calendar.getInstance().getTime(),\"yyyy-MM-dd HH:mm:ss\") +\" YDX Err: DBO.executeUpdate(): \"+ e.getMessage());
			System.out.println(\"YDX Err SQL: \"+ DBName + \" sql:\" + sql);
		}
		return iRtn;
	}
	
	
	/**
	 * 写操作记录。
	 * @return 修改的行数
	 * 语法 executeLog(EmpNo,ModuleName,Operation,Result,Remark,IP)
	 */
	public int executeLog(String EmpNo,String ModuleName,String Operation,int Result,String Remark,String IP) throws SQLException {
		int iRtn=-1;
		String sql = \"\" ;//写记录的逻辑
		try{
			Statement stmt = this.conn.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);
			if(stmt != null){
				iRtn = stmt.executeUpdate(sql);
				stmt.close();
			}
		}catch(Exception e){
			System.out.println(DateTimeUtil.formatDateTime(java.util.Calendar.getInstance().getTime(),\"yyyy-MM-dd HH:mm:ss\") +\" YDX Err: DBO.executeLog(): \"+ e.getMessage());
			System.out.println(\"YDX Err SQL: \"+ DBName + \" sql:\" + sql);
		}
		return iRtn;
	}
	
	
	//提交事务
	public void commit(){
		try{
			if (! isTrans) {
				this.conn.commit();  //提交事务
				isTrans = true; //还原为默认值
			}
		}catch(Exception e){
			System.out.println(DateTimeUtil.formatDateTime(java.util.Calendar.getInstance().getTime(),\"yyyy-MM-dd HH:mm:ss\") +\" YDX Err: DBO.commit(): \"+ DBName + \" ---- \" + e.getMessage());
		}
	}
	
	//回滚事务
	public void rollback(){
		try{
			if (! isTrans) {
				this.conn.rollback(); 
			}
		}catch(Exception e){
			System.out.println(DateTimeUtil.formatDateTime(java.util.Calendar.getInstance().getTime(),\"yyyy-MM-dd HH:mm:ss\") +\" YDX Err: DBO.rollback(): \"+ e.getMessage());
		}
	}
	
	
	
	/**
	 * 关闭数据库操作,释放数据库连接。
	 */
	public void close(){
		try{
			if(this.conn != null) this.conn.close();
			this.conn = null;
		}catch(SQLException e){
			System.out.println(DateTimeUtil.formatDateTime(java.util.Calendar.getInstance().getTime(),\"yyyy-MM-dd HH:mm:ss\") +\" YDX Err: DBO.close().finally{}: \"+ e.getMessage());
		}
	}
	
	
	private void close(Statement stmt, ResultSet rs) {
		try {
			if (rs != null)
				rs.close();
			if (stmt != null)
				stmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	
	//关闭资源
 	private void closeConnection(Connection conn) {
 		if (conn != null) {
 			try {
 				conn.close();
 			} catch (SQLException ex) {
 				ex.printStackTrace();
 			}
 		}
 	}
 	
 	
	


DAO类:

package test;


import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

import org.hyena.frame.util.*;

public class DAO {
	
	public static Connection getConnection(String DBName) throws SQLException {
    	DataSource ds = null;
		try{
	        Context ctx = new InitialContext();
	        ds = (DataSource)ctx.lookup(\"java:comp/env/jdbc/\" + DBName);
		}
		catch(Exception e) {
			System.out.print(DateTimeUtil.formatDateTime(java.util.Calendar.getInstance().getTime(),\"yyyy-MM-dd HH:mm:ss\") +\" Err: DAO.getConnection(): Can not find KQ JNDI source!!! \" + KQDBName);
		}
		return ds.getConnection();
	}


}

使用例子如下:

String DBNAME = \"myDbName\";

DBO kQDBO = new DBO();

kQDBO .init(DBNAME,false);//不自动提交事务

    if (kQDBO.isConnected) {

        try{

            String sql = \"update table set name = \'new\' where id =1\";

            kQDBO.executeUpdate(sql);//执行语句

            kQDBO.executeLog();//记录操作记录

            kQDBO.commit();//提交事务

            }catch (Exception e) {
                    KQDBO.rollback();//事物回滚
            }finally{
                    kQDBO.close();
            }

    }

 

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
标签列表