欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

封装了一个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();
}
}
}