封装了一个Java数据库访问管理类

 更新时间:2009年02月22日 02:28:54   作者:  
刚刚试着用JDBC,仿着原来C#的写法写了这段代码,自己觉得还是挺粗糙的,还烦请路过的朋友推荐一个写得较好较完整的相关例程以便学习。谢谢!
复制代码 代码如下:

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();
}
}
}

相关文章

  • spring基础概念AOP与动态代理理解

    spring基础概念AOP与动态代理理解

    这篇文章主要为大家详细介绍了spring基础概念AOP与动态代理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • Java中驼峰命名与下划线命名相互转换

    Java中驼峰命名与下划线命名相互转换

    这篇文章主要介绍了Java中驼峰命名与下划线命名相互转换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • RestTemplate如何通过HTTP Basic Auth认证示例说明

    RestTemplate如何通过HTTP Basic Auth认证示例说明

    这篇文章主要为大家介绍了RestTemplate如何通过HTTP Basic Auth认证的示例说明,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • Java SSM整合开发统一结果封装详解

    Java SSM整合开发统一结果封装详解

    这篇文章主要介绍了Java SSM整合开发实现统一结果封装,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • JavaWeb响应下载功能实例代码(包含工具类)

    JavaWeb响应下载功能实例代码(包含工具类)

    今天通过本文给大家分享的是关于javaweb的响应(response)下载功能,需要的朋友参考下吧
    2017-07-07
  • Java通过 Socket 实现 TCP服务端

    Java通过 Socket 实现 TCP服务端

    这篇文章主要介绍了Java通过 Socket 实现 TCP服务端的相关资料,需要的朋友可以参考下
    2017-05-05
  • MyBatis拦截器:给参数对象属性赋值的实例

    MyBatis拦截器:给参数对象属性赋值的实例

    下面小编就为大家带来一篇MyBatis拦截器:给参数对象属性赋值的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • Mybatis 插入和删除批处理操作

    Mybatis 插入和删除批处理操作

    在操作数据库时,经常会碰到批量插入、批量删除的情况,直接执行SQL语句还好做一点,当使用Mybatis进行批量插入、批量删除时会有一些问题。下面对使用Mybatis批量插入,批量删除进行介绍
    2016-12-12
  • 详解Java设计模式编程中的里氏替换原则

    详解Java设计模式编程中的里氏替换原则

    这篇文章主要介绍了Java设计模式编程中的里氏替换原则,有这个名字是因为这是由麻省理工学院的一位姓里的女士Barbara Liskov提出来的(嗯...),需要的朋友可以参考下
    2016-02-02
  • Java线程池中的各个参数如何合理设置

    Java线程池中的各个参数如何合理设置

    这篇文章主要介绍了Java线程池中的各个参数如何合理设置操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06

最新评论