JDBC通用操作类

  关于数据库的主要操作有:获取数据库连接;数据库查询、插入、修改、删除;
  断开数据库连接。这些数据库操作对于操作不同的数据表应该说都是统一的,
  因此,数据库的JDBC操作是可以做成一个通用类,这样就能达到重用目的。

package com.jdon.simpleregister;

import java.sql.*;
import javax.sql.*;
import java.io.*;
import javax.naming.*;

public class Mysql {

  private Connection conn = null;
  private Statement stmt = null;
  private PreparedStatement prepstmt = null;

  /**
   * 以创建Statement 初始化Mysql
   */
  public Mysql() {
    try {
      getDataSource();
      stmt = conn.createStatement();
    } catch (Exception e) {
      System.err.println("Mysql init error: " + e);
    }
  }

  private void getDataSource() {
    try {
      Context ctx = new InitialContext();
      if (ctx == null)
        throw new Exception("Boom - No Context");

      DataSource ds =
          (DataSource) ctx.lookup("java:comp/env/jdbc/userDB");
      if (ds != null)
        conn = ds.getConnection();

    } catch (Exception e) {
      System.err.println("getDataSource() error: " + e);
    }
  }

//数据库Connection是使用DataSource接口建立,它为用户提供的能力比DriverManager提供的基本Connection对象的能力要多得多v

  private void getDirectConn(){
    try {
      Class.forName(Constants.dbdriver).newInstance();
      conn = DriverManager.getConnection(Constants.dburl);
    } catch (Exception e) {
      System.err.println("getDataSource() error: " + e);
    }

  }

  /**
   * 以创建PreparedStatement 初始化Mysql
   */
  public Mysql(String sql) {
    try {
      getDataSource();
      prepareStatement(sql);
    } catch (Exception e) {
      System.err.println("Mysql init error: " + e);
    }
  }

  public Connection getConnection() {
    return conn;
  }

  public void prepareStatement(String sql) throws SQLException {
    prepstmt = conn.prepareStatement(sql);
  }

  public void setString(int index, String value) throws SQLException {
    prepstmt.setString(index, value);
  }

  public void setInt(int index, int value) throws SQLException {
    prepstmt.setInt(index, value);
  }

  public void setBoolean(int index, boolean value) throws SQLException {
    prepstmt.setBoolean(index, value);
  }

  public void setDate(int index, Date value) throws SQLException {
    prepstmt.setDate(index, value);
  }

  public void setLong(int index, long value) throws SQLException {
    prepstmt.setLong(index, value);
  }

  public void setFloat(int index, float value) throws SQLException {
    prepstmt.setFloat(index, value);
  }

  public void setBinaryStream(int index, InputStream in, int length) throws
      SQLException {
    prepstmt.setBinaryStream(index, in, length);
  }

  public void clearParameters() throws SQLException {
    prepstmt.clearParameters();
  }

  public PreparedStatement getPreparedStatement() {
    return prepstmt;
  }

  public Statement getStatement() {
    return stmt;
  }

  /**
   * 执行Statement查询语句
   * @param sql
   * @return
   * @throws SQLException
   */
  public ResultSet executeQuery(String sql) throws SQLException {
    if (stmt != null) {
      return stmt.executeQuery(sql);
    } else
      return null;
  }

  /**
   * 执行PreparedStatement查询语句
   * @return
   * @throws SQLException
   */
  public ResultSet executeQuery() throws SQLException {
    if (prepstmt != null) {
      return prepstmt.executeQuery();
    } else
      return null;
  }

  /**
   * 执行Statement更改语句
   * @param sql
   * @throws SQLException
   */
  public void executeUpdate(String sql) throws SQLException {
    if (stmt != null)
      stmt.executeUpdate(sql);
  }

  /**
   * 执行PreparedStatement更改语句
   * @throws SQLException
   */
  public void executeUpdate() throws SQLException {
    if (prepstmt != null)
      prepstmt.executeUpdate();
  }

  /**
   * 关闭连接
   */
  public void close() {
    try {
      if (stmt != null) {
        stmt.close();
        stmt = null;
      }
      if (prepstmt != null) {
        prepstmt.close();
        prepstmt = null;
      }
      conn.close();
      conn = null;
    } catch (Exception e) {
      System.err.println("Mysql close error: " + e);
    }

  }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JDBC通用查询封装是指将JDBC查询操作封装为通用方法,方便开发者在项目中进行调用,避免了重复的代码编写。 以下是一个简单的JDBC通用查询封装的示例代码: ```java public class JdbcUtil { private static String driver = "com.mysql.cj.jdbc.Driver"; // 数据库驱动 private static String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false"; // 数据库连接地址 private static String user = "root"; // 数据库用户名 private static String password = "123456"; // 数据库密码 static { try { // 加载数据库驱动 Class.forName(driver); } catch (ClassNotFoundException e) { e.printStackTrace(); } } /** * 获取数据库连接 * * @return Connection对象 */ public static Connection getConnection() throws SQLException { return DriverManager.getConnection(url, user, password); } /** * 关闭数据库连接 * * @param conn Connection对象 * @param stmt Statement对象 * @param rs ResultSet对象 */ public static void close(Connection conn, Statement stmt, ResultSet rs) { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (stmt != null) { try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } /** * 执行查询操作,返回结果集 * * @param sql SQL语句 * @param args 参数列表 * @return ResultSet对象 */ public static ResultSet executeQuery(String sql, Object... args) throws SQLException { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { conn = getConnection(); // 获取数据库连接 pstmt = conn.prepareStatement(sql); // 创建PreparedStatement对象 // 设置SQL语句中的参数 for (int i = 0; i < args.length; i++) { pstmt.setObject(i + 1, args[i]); } rs = pstmt.executeQuery(); // 执行查询操作 } catch (SQLException e) { e.printStackTrace(); throw e; } finally { close(conn, pstmt, null); // 关闭连接 } return rs; } } ``` 以上代码中,JdbcUtil封装了获取数据库连接、关闭数据库连接、执行查询操作通用方法。开发者只需要调用`executeQuery`方法即可实现查询操作,无需重复编写获取连接、执行SQL语句、关闭连接等代码。 示例调用代码如下: ```java String sql = "SELECT * FROM user WHERE age > ?"; ResultSet rs = JdbcUtil.executeQuery(sql, 18); while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); int age = rs.getInt("age"); System.out.println("id=" + id + ", name=" + name + ", age=" + age); } JdbcUtil.close(null, null, rs); // 关闭ResultSet对象 ``` 以上代码中,开发者只需要传入SQL语句和参数列表即可实现查询操作。同时,JdbcUtil也封装了关闭ResultSet对象的方法,避免了重复的代码编写。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值