封装了一个Java数据库访问管理类
程序员文章站
2022-07-22 14:04:07
复制代码 代码如下:package com.groundhog.codingmouse; import java.sql.connection; import java.s...
复制代码 代码如下:
package com.groundhog.codingmouse;
import java.sql.connection;
import java.sql.drivermanager;
import java.sql.preparedstatement;
import java.sql.resultset;
import java.sql.sqlexception;
/**
* 数据库管理类
* @author codingmouse
* 2009.2.20
*/
public final class dbmanager {
/**
* 数据库连接对象
*/
private connection dbconnection = null;
/**
* 数据库命令执行对象
*/
private preparedstatement prestatement = null;
/**
* 结果集对象
*/
private resultset rsset = null;
/**
* 数据库驱动版本号
*/
private static string driverversion = null;
/**
* 数据库服务器登录用户名和密码字符串常量(默认值均
为'sa')
*/
private static string databaseuser = "sa";
private static string databasepassword = "sa";
/**
* 数据库驱动完整类名字符串常量
*/
private static final string
driver_class_sqlserver2000 =
"com.microsoft.jdbc.sqlserver.sqlserverdriver"; // sql
server 2000 直连
private static final string
driver_class_sqlserver2005 =
"com.microsoft.sqlserver.jdbc.sqlserverdriver"; // sql
server 2005 直连
private static final string
driver_class_bridgeconnect = "sun.jdbc.odbc.jdbcodbcdriver";
// odbc 桥连
/**
* 数据库连接字符串常量
*/
private static final string
database_url_sqlserver2000 =
"jdbc:microsoft:sqlserver://127.0.0.1:1433;databasename=stud
b"; // sql server 2000 直连
private static final string
database_url_sqlserver2005 =
"jdbc:sqlserver://127.0.0.1:1433;databasename=studb";
// sql server 2005 直连
private static final string
database_url_bridgeconnect = "jdbc:odbc:studbsource";
// odbc 桥连
/**
* 定义类自身的实例静态变量(作用于单例[件]模式的应用)
*/
private static dbmanager connectionmanager = null;
/**
* 私有化默认构造(作用于单例[件]模式的应用,防止类被直
接使用new关键字实例化)
*/
private dbmanager() {
super();
}
/**
* 获取数据库连接管理类实例的方法(单例[件]模式的应用)
* @param version 数据库驱动版本号,取值:(version =
2000 | version = 2005 | version = odbc)
* @param user 数据库服务器登录用户名
* @param password 数据库服务器登录密码
* @return 数据库连接管理对象
* @throws exception 参数错误异常
*/
public static dbmanager getinstance(
string version,
string user,
string password)
throws exception {
if (!(version == "2000" || version == "2005"
|| version == "odbc")) {
throw new exception("数据库驱动版本号
不正确,取值只能是“2000/2005/odbc”!");
}
// 保存数据库驱动版本号
driverversion = version;
if (user == null || user.equals("")) {
throw new exception("数据库服务器登录
用户名不能为空!");
}
// 保存数据库服务器登录用户名和密码
databaseuser = user;
databasepassword = password;
// 应用单例[件]模式确保类本身只有一个实例
if (connectionmanager == null) {
connectionmanager = new dbmanager();
}
// 返回类本身的实例
return connectionmanager;
}
/**
* 获取数据库连接的方法
* @return 数据库连接对象
*/
private connection getconnection() {
try {
class.forname(
driverversion ==
"2000"
?
driver_class_sqlserver2000
: (driverversion ==
"2005"
?
driver_class_sqlserver2005
:
driver_class_bridgeconnect));
this.dbconnection =
drivermanager.getconnection(
driverversion ==
"2000"
?
database_url_sqlserver2000
: (driverversion ==
"2005"
?
database_url_sqlserver2005
:
database_url_bridgeconnect),
databaseuser,
databasepassword);
} catch (classnotfoundexception ex) {
system.err.println("未找到sql server
" + driverversion + "数据库驱动类:" + ex.getmessage());
// 在控制台输出异常堆栈信息
// ex.printstacktrace();
} catch (exception ex) {
system.err.println("获取数据库连接错
误:" + ex.getmessage());
// 在控制台输出异常堆栈信息
// ex.printstacktrace();
}
// 返回数据库连接对象
return this.dbconnection;
}
/**
* 获取数据库命令执行对象的方法
* @param sql 要执行的sql命令拼装语句字符串
* @return 数据库命令执行对象
*/
private preparedstatement getpreparedstatement
(string sql) {
try {
// 根据获取的数据库连接对象创建数据库
命令执行对象
this.prestatement = getconnection
().preparestatement(sql);
} catch (exception ex) {
system.err.println("获取数据库命令执
行对象错误:" + ex.getmessage());
// 在控制台输出异常堆栈信息
// ex.printstacktrace();
}
// 返回数据库命令执行对象
return this.prestatement;
}
/**
* 执行更新语句(insert|update|delete)
* @param sql 要执行的sql命令拼装语句字符串
* @return 受影响的行数
*/
public int executeupdate(string sql){
try {
// 置空结果集对象的原有内容
this.rsset = null;
// 执行语句并返回受影响行数
return this.getpreparedstatement
(sql).executeupdate();
} catch (sqlexception e) {
system.err.println("更新数据错误:" +
e.getmessage());
return 0;
}finally{
// 关闭数据库连接资源
closedbresource();
}
}
/**
* 执行查询语句(select)
* @param sql 要执行的sql命令拼装语句字符串
* @return 查询后的结果集对象
*/
public resultset executequery(string sql){
try {
// 置空结果集对象的原有内容
this.rsset = null;
// 执行sql语句获得结果集
this.rsset =
this.getpreparedstatement(sql).executequery();
} catch (sqlexception e) {
system.err.println("查询数据错误:" +
e.getmessage());
}
// 返回结果集对象
return this.rsset;
}
/**
* 获取执行指定sql语句后的返回结果集的记录条数
* @param sql 要执行的sql命令拼装语句字符串
* @return 查询结果得到的记录条数
*/
public int getresultsetcount(string sql) {
// 保存得到指定的sql语句执行后返回记录行数的计数器变量
int count = 0;
try {
// 置空结果集对象的原有内容
this.rsset = null;
// 执行sql语句获得结果集
this.rsset = this.getpreparedstatement
(sql).executequery();
// 遍历结果集并累加计数器
while (this.rsset.next()) {
count++;
}
} catch (sqlexception e) {
e.printstacktrace();
}
return count;
}
/**
* 关闭数据库连接资源(包括结果集对象、命令执行对象、连
接对象)
*/
public void closedbresource() {
try {
closeresultset();
closepreparedstatement();
closeconnection();
} catch (sqlexception sqlex) {
system.err.println(sqlex.getmessage
());
// 在控制台输出异常堆栈信息
// sqlex.printstacktrace();
}
}
/**
* 关闭结果集对象的方法
* @throws sqlexception
*/
private void closeresultset() throws sqlexception {
try {
if (this.rsset != null) {
this.rsset.close();
this.rsset = null;
}
} catch (sqlexception sqlex) {
throw new sqlexception("关闭结果集对
象错误:" + sqlex.getmessage());
// 在控制台输出异常堆栈信息
// sqlex.printstacktrace();
}
}
/**
* 关闭数据库命令执行对象的方法
* @throws sqlexception
*/
private void closepreparedstatement() throws
sqlexception {
try {
if (this.prestatement != null) {
this.prestatement.close();
this.prestatement = null;
}
} catch (sqlexception sqlex) {
throw new sqlexception("关闭数据库命
令执行对象错误:" + sqlex.getmessage());
// 在控制台输出异常堆栈信息
// sqlex.printstacktrace();
}
}
/**
* 关闭数据库连接的方法
* @throws sqlexception
*/
private void closeconnection() throws sqlexception {
try {
if (this.dbconnection != null && (!
this.dbconnection.isclosed())) {
this.dbconnection.close();
}
} catch (sqlexception sqlex) {
throw new sqlexception("关闭数据库连
接错误:" + sqlex.getmessage());
// 在控制台输出异常堆栈信息
// sqlex.printstacktrace();
}
}
}