JDBC连接工具

JDBC连接工具

JDBCUtils

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Arrays;

public class JDBCUtils {

  private JDBCUtils() {
  }

  public static Connection getConnection() {
    try {
      Class.forName("com.mysql.jdbc.Driver");
      String url = "jdbc:mysql://localhost:3306/user?useSSL=false";
      String user = "root";
      String password = "root";
      Connection conn =
          DriverManager.getConnection(url, user, password);
      return conn;
    } catch (Exception e) {
      e.printStackTrace();
    }

    return null;
  }

  public static void close(Connection conn, Statement st, ResultSet rs) {
    if (rs != null) {
      try {
        rs.close();
      } catch (SQLException e) {
        e.printStackTrace();
      } finally {
        rs = null;
      }
    }
    if (st != null) {
      try {
        st.close();
      } catch (SQLException e) {
        e.printStackTrace();
      } finally {
        st = null;
      }
    }
    if (conn != null) {
      try {
        conn.close();
      } catch (SQLException e) {
        e.printStackTrace();
      } finally {
        conn = null;
      }
    }

  }


  /**
   * @param sql      执行的SQL
   * @param valueArr 占位符数组
   * @return int executeUpdate?(String sql)
   * 执行给定的SQL语句,这可能是 INSERT , UPDATE ,或 DELETE语句,或者不返回任何内容,如SQL DDL语句的SQL语句。
   */
  public static int addOrUpdate(String sql, String[] valueArr) {
    int ret = 0;

    try {
      //链接
      Connection connection = JDBCUtils.getConnection();
      //生成PreparedStatement容器对象
      PreparedStatement stm = connection.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE,
          ResultSet.CONCUR_UPDATABLE);

      //有占位符的?的要先赋值
      if (valueArr != null && valueArr.length > 0) {
        for (int i = 0; i < valueArr.length; i++) {
          stm.setString(i + 1, valueArr[i]);
        }
      }

      //执行更新语句,获取结果
      ret = stm.executeUpdate();
      //关闭操作
      close(connection, stm, null);


    } catch (SQLException e) {
      e.printStackTrace();
    }

    return ret;
  }


  /**
   * 查询当前的个数
   *
   * @param sql
   * @param valueArr
   * @return
   */
  public static int queryCount(String sql, String[] valueArr) {

    //数据库链接上
    Connection connection = JDBCUtils.getConnection();
    int n = 0;//查询的条数
    try {
      PreparedStatement stmt = connection.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE,
          ResultSet.CONCUR_UPDATABLE);
      //有占位符的?的要先赋值
      if (valueArr != null && valueArr.length > 0) {
        for (int i = 0; i < valueArr.length; i++) {
          stmt.setString(i + 1, valueArr[i]);
        }
      }

      //执行sql语句,返回执行结果
      ResultSet rs = stmt.executeQuery();

      //处理结果
      //结果集的行的动态获取大小
      rs.last();
      n = rs.getRow();

      //关闭资源
      close(connection, stmt, rs);
    } catch (SQLException e) {
      e.printStackTrace();
    }
    return n;
  }


  /**
   * @param sql
   * @param arrValue 有占位符
   * @return
   */
  public static Object[][] queryList(String sql, String[] arrValue) {
    ArrayList<Object> retList = new ArrayList<>();
    Object[][] data = null;
    //数据库链接上
    Connection connection = JDBCUtils.getConnection();
    try {
      //生成PreparedStatement容器对象
      PreparedStatement stmt = connection.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE,
          ResultSet.CONCUR_UPDATABLE);

      //有占位符的?的要先赋值
      if (arrValue != null && arrValue.length > 0) {
        for (int i = 0; i < arrValue.length; i++) {
          stmt.setString(i + 1, arrValue[i]);
        }
      }

      //执行sql语句,返回执行结果
      ResultSet rs = stmt.executeQuery();

      //处理结果
      //结果集的行的动态获取大小
      rs.last();
      int n = rs.getRow();

      //结果集列的动态获取大小
      ResultSetMetaData rsMetaData = rs.getMetaData();
      int m = rsMetaData.getColumnCount();
      data = new Object[n][m];

      rs.beforeFirst();//移到第一行之前
      int i = 0;
      while (rs.next()) {//顺序查询
        for (int j = 0; j < m; j++) {
          data[i][j] = rs.getString(j + 1);
        }
        i++;
      }

      //关闭资源
      close(connection, stmt, rs);
    } catch (SQLException e) {
      e.printStackTrace();
    }
    return data;
  }


  public static ResultSet getResultSet(String sql) {
    Connection connection = getConnection();
    //生成PreparedStatement容器对象
    try {
      PreparedStatement stmt = connection.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE,
          ResultSet.CONCUR_UPDATABLE);
      return stmt.executeQuery(sql);
    } catch (SQLException e) {
      e.printStackTrace();
    }
    return null;
  }


  public static void main(String[] args) {
    Object[][] objects = queryList("select * from user", null);
    System.out.println(objects);
    for (int i = 0; i < objects.length; i++) {
      System.out.println(Arrays.toString(objects[i]));
    }

  }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值