4.9w+
社区成员
package com.xxx.dbImpl;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.DriverManager;
import com.xxx.common.Print;
import com.xxx.db.DB;
import com.xxx.db.DBException;
/**
* 数据库底层操作类:提供执行sql语句的服务
* @author:dinghun8leech
* @date:081216
* @version:1.0
*/
public class DbUtil extends DB {
/** con 数据连接 */
private Connection con;
/** stmt 执行静态sql语句 */
private Statement stmt;
/** 加载数据库驱动 */
static {
try {
Class.forName(driverName);
} catch (Exception e) {
Print.ln("数据库驱动类未找到。");
Print.er(e);
}
}
/**
* +1参数构造方法,建立此类实例对象的同时也获得已建立的数据库链接
* @param Object 描述当前会话所使用的语言的字符串对象
* @throws DBException 当创建数据库连接失败时抛出此异常
*/
public DbUtil(Object obj) throws DBException {
try {
if (obj == null || (obj.toString()).equals(CHINESE)) {
con = DriverManager.getConnection(Chinese_dbUrl,dbUser,dbPwd);
} else if ((obj.toString()).equals(ENGLISH)) {
con = DriverManager.getConnection(English_dbUrl,dbUser,dbPwd);
} else if ((obj.toString()).equals(MCDONALD)) {
con = DriverManager.getConnection(MCDONALD_dbUrl,dbUser,dbPwd);
} else {
con = DriverManager.getConnection(Chinese_dbUrl,dbUser,dbPwd);
}
} catch (SQLException e) {
Print.er(e);
throw new DBException("数据库连接建立失败。");
}
}
/**
* 执行非查询类的完整SQL语句
* @param String 需要执行的静态sql语句
* @throws DBException 当数据库操作出现异常或资源不能正常释放时抛出此异常
*/
public void execute(String sql) throws DBException {
Print.sql(sql);
try {
stmt = con.createStatement();
stmt.execute(sql);
} catch (SQLException e) {
Print.er(e);
throw new DBException("数据库操作失败:"+sql);
} finally {
try {
if (stmt != null) {
stmt.close();
}
} catch (SQLException e) {
Print.er(e);
throw new DBException("Statement资源释放出错。");
}
}
}
/**
* 执行查询类的完整SQL语句
* 需在调用端释放Statement与ResultSet资源
* @param String 需要执行的静态sql语句
* @return ResultSet ResultSet类型的结果集
* @throws DBException 当数据库操作出现异常时抛出此异常
*/
public ResultSet executeQuary(String sql) throws DBException {
Print.sql(sql);
try {
stmt = con.createStatement();
return stmt.executeQuery(sql);
} catch (SQLException e) {
Print.er(e);
throw new DBException("数据库操作失败:"+sql);
}
}
/**
* 执行添加类的完整SQL语句,并返回自动生成的主键值
* @param String 需要执行的完整SQL语句
* @return int 添加数据后自动生成的int类型的主键值,非添加类SQL语句则返回0
* @throws DBException 当数据库操作出现异常或释放资源失败时抛出此异常
*/
public int executeGetKey(String sql) throws DBException {
Print.sql(sql);
ResultSet rs = null;
try {
stmt = con.createStatement();
stmt.execute(sql);
rs = stmt.getGeneratedKeys();
int key = 0;
if (rs.next()) {
key = rs.getInt(1);
}
return key;
} catch (SQLException e) {
Print.er(e);
throw new DBException("数据库操作失败:"+sql);
} finally {
boolean isthrow = false;
try {
if (rs != null) {
rs.close();
}
} catch (SQLException e) {
Print.er(e);
isthrow = true;
}
try {
if (rs != null) {
rs.close();
}
} catch (SQLException e) {
Print.er(e);
isthrow = true;
}
if (isthrow) {
throw new DBException("资源释放出错。");
}
}
}
/**
* 开始数据库操作事务
* 设置当前数据库操作类包含的数据库连接对象为手动提交
* @throws DBException 当当前连接已关闭,或数据库访问错误时抛出此异常
*/
public void beginTranscation() throws DBException {
try {
con.setAutoCommit(false);
} catch (SQLException e) {
Print.er(e);
throw new DBException("当前连接已关闭,或数据库访问错误。");
}
}
/**
* 提交数据库操作事务,执行对数据库的操作
* 将调用beginTranscation()方法后的所有操作进行提交
* @throws DBException 当当前连接已关闭、数据库访问错误或自动提交未被关闭时抛出此异常
*/
public void commit() throws DBException {
try {
con.commit();
} catch (SQLException e) {
Print.er(e);
throw new DBException("当前连接已关闭、数据库访问错误或自动提交未被关闭。");
}
}
/**
* 回滚数据库操作事务,执行数据库的操作
* 取消所有未提交的数据库操作
* @throws DBException 当当前连接已关闭、数据库访问错误或自动提交未被关闭时抛出此异常
*/
public void rollback() throws DBException {
try {
con.rollback();
} catch (SQLException e) {
Print.er(e);
throw new DBException("当前连接已关闭、数据库访问错误或自动提交未被关闭。");
}
}
/**
* 释放此数据库底层操作类对象的连接资源
* @throws DBException 当释放资源出现异常时抛出此异常
*/
public void close() throws DBException {
if (con != null) {
try {
con.close();
} catch (SQLException e) {
Print.er(e);
throw new DBException("数据库连接资源释放出错。");
}
}
}
}