广

Java编程

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

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

    2018-10-28 11:05:22 次阅读 稿源:互联网
    零七广告
    代码如下:

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

    零七网部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与零七网进行文章共享合作。

    零七广告
    零七广告
    零七广告
    零七广告