`
aa00aa00
  • 浏览: 331581 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
文章分类
社区版块
存档分类
最新评论

jdbc 数据库封装类

阅读更多

package test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * 数据库管理类
 *
 */
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"; // SQL2000

 private static final String DRIVER_CLASS_SQLSERVER2005 = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; // SQL2005

 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=stuDB"; // 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();
  }
 }
}

分享到:
评论

相关推荐

    Java连接数据库 JDBC封装类 带使用例子

    Java JDBC封装类,带增删改查例子,支持oracle,MySql,hsqldb 等,支持事务,返回数据格式 支持二维数组,MAP格式,以及javabean对象。有利于初学者DbDemo.java为demo,Connect为jdbc封装类,可以作为项目共通类使用。

    jdbc 连接数据库封装类,可返回map,或者vo(自用)

    标题中的“jdbc 连接数据库封装类,可返回map,或者vo(自用)”指的是一个自定义的Java类库,用于简化Java应用程序通过JDBC(Java Database Connectivity)与数据库的交互。这类库通常会提供方便的方法来执行SQL...

    JDBC数据库辅助类

    综上所述,这个JDBC数据库辅助类通过一系列辅助类和配置文件,实现了对JDBC操作的抽象和封装,降低了直接使用JDBC的复杂性,提高了代码的可读性和可维护性。开发者可以更专注于业务逻辑,而不用过于关注数据库连接和...

    用于实习jdbc的数据库连接封装类

    java用于jdbc的连接的实现类,在数据库连接的时候直接new出来就OK了!DAO层自己加写...

    JDBC数据库驱动MySql

    在本压缩包文件“JDBC数据库驱动MySql”中,主要包含的是MySQL数据库的JDBC驱动程序,具体版本为8.0。MySQL是一种广泛使用的开源关系型数据库管理系统,它以其高效、稳定和易用性而受到开发者的青睐。JDBC驱动程序...

    mysql数据库封装类

    MySQL数据库封装类是一种将数据库操作抽象化、模块化的编程技术,它使得开发者可以更方便、高效地进行数据存取和管理。在这个特定的教学资源中,我们可能会遇到以下几个关键知识点: 1. **数据库连接**:封装类通常...

    JDBC简单封装类

    在这个"JDBC简单封装类"中,我们可以预期找到一种方法来简化这些常见的数据库操作。 首先,让我们详细了解一下JDBC的基本步骤: 1. **加载驱动**:通过`Class.forName()`方法加载数据库驱动,使Java应用程序能够与...

    JDBC数据库访问工具类 强大 精巧 高效

    总结来说,一个强大的JDBC数据库访问工具类是Java项目中必不可少的一部分,它通过封装和优化JDBC操作,降低了开发难度,提高了代码的可读性和维护性,同时提升了系统的运行效率。在设计和实现这样的工具类时,我们...

    JDBC数据库连接工具类

    总的来说,JDBC数据库连接工具类是Java开发中的一个重要组件,它封装了数据库连接的细节,提高了代码的可读性和可维护性。开发者可以根据项目的具体需求,设计并实现功能更加完善的工具类,以满足不同场景下的数据库...

    JDBC与Java数据库编程

    - **JDBC API**:这是开发者直接使用的API层,包含了所有与数据库交互的接口和类。 **1.4 JDBC体系结构图** JDBC体系结构图展示了Java数据库应用程序、JDBC API、JDBC驱动程序接口以及数据库之间的关系。应用程序...

    原创的JDBC封装可支持各种数据库

    本文将详细探讨如何进行JDBC的封装,以便支持多种数据库,以及在配置文件中进行灵活配置。 首先,了解JDBC的基本步骤:加载驱动、建立连接、创建Statement或PreparedStatement对象、执行SQL语句、处理结果集、关闭...

    JDBC链接Oracle数据库增删改查通用工具类

    标题中的“JDBC链接Oracle数据库增删改查通用工具类”指的是一个Java编程中的实用工具类,它封装了与Oracle数据库交互的JDBC操作,包括插入(Insert)、删除(Delete)、更新(Update)和查询(Select)这四种基本...

    JDBC数据库操作工具类

    "JDBC数据库操作工具类"是对JDBC API进行封装,以简化数据库操作,提高代码的可读性和可维护性。这个工具类通常包含了连接数据库、执行SQL语句、处理结果集以及关闭资源等常用操作,使得开发者无需关心底层的细节,...

    SpringBoot中封装jdbc工具类

    现在的数据层的开发,大多会使用如MyBatis或...由于部分场景下MyBatis或JPA之类无法满足我的需求,所以我打算自己封装一套查数据库的工具类。 文章地址: https://blog.csdn.net/lxyoucan/article/details/124042295

    使用JDBC操作数据库

    2. **Database Driver**:由数据库供应商提供,实现了JDBC接口的类,使得Java应用程序能够与特定的数据库通信。常见的有MySQL Connector/J、Oracle JDBC驱动等。 3. **Connection**:代表数据库的会话,是Java应用...

    JDBCjava 与数据库之间的链接

    JDBC java 与数据库之间的链接 java 与数据库之间的链接 java 与数据库之间的链接

    JDBC封装类升级版,支持DBCP、C3P0连接池,Java连接数据库带例子

    Java JDBC封装类升级版,带增删改查例子,支持oracle,MySql,hsqldb 等,支持事务,返回数据格式 支持二维数组,MAP格式,以及javabean对象。有利于初学者DbDemo.java为demo,Connect为jdbc封装类,可以作为项目共通类...

    Java数据库操作封装类

    "Java数据库操作封装类"的设计往往借鉴了如JDBC(Java Database Connectivity)、Hibernate、MyBatis等主流类库的思想。JDBC是Java中标准的数据库访问接口,它提供了与各种数据库通信的能力,但其API较为底层,使用...

    实验3 JDBC操作数据库3

    7. **数据库工具类DBUtil**:在实际开发中,通常会封装一个DBUtil工具类,用于管理和关闭数据库资源,以简化代码和避免资源泄露。这个工具类可能包含数据库连接池等高级功能,提供更方便的数据库操作接口。 8. **...

Global site tag (gtag.js) - Google Analytics