看韩顺平老师的视频时候非常喜欢的喜欢的一个小工具就是操作数据库的SqlHelper
所以我就又写了一遍,加了点注释,基本上能满足平常开发使用。
DBUtil类,主要是操作数据连接池
- package com.tig.util;
- import java.io.InputStream;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.Statement;
- import java.util.Properties;
- public class DBUtil {
- //定义链接所需要的变量
- private static Connection con = null;
- private static PreparedStatement ps = null;
- private static ResultSet rs = null;
- //定义链接数据库所需要的参数
- private static String url = "";
- private static String username = "";
- private static String driver="";
- private static String password="";
- //定义读取配置文件所需要的变量
- private static Properties pp = null;
- private static InputStream fis = null;
- /**
- * 加载驱动
- */
- static {
- try {
- //从dbinfo.properties配置文件中读取配置信息
- pp = new Properties();
- fis = DBUtil.class.getClassLoader().getResourceAsStream("com/tig/util/dbinfo.properties");
- pp.load(fis);
- url = pp.getProperty("url");
- username = pp.getProperty("username");
- driver=pp.getProperty("driver");
- password=pp.getProperty("password");
- //加载驱动
- Class.forName(driver);
- } catch (Exception e) {
- System.out.println("驱动加载失败!");
- e.printStackTrace();
- } finally {
- try {
- fis.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- fis = null; //垃圾回收自动处理
- }
- }
- /**
- * 得到Connection链接
- * @return Connection
- */
- public static Connection getConnection() {
- try {
- //建立连接
- con = DriverManager.getConnection(url, username, password);
- } catch (Exception e) {
- System.out.println("数据库链接失败!");
- e.printStackTrace();
- }
- return con;
- }
- /**
- * 统一的资源关闭函数
- * @param rs
- * @param ps
- * @param ct
- */
- public static void close(ResultSet rs,Statement ps, Connection con){
- if(rs != null) {
- try {
- rs.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- if(ps != null) {
- try {
- ps.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- if(con != null) {
- try {
- con.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- }
SqlHelper类
- package com.tig.util;
- import java.sql.CallableStatement;
- import java.sql.Connection;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.ResultSetMetaData;
- import java.util.ArrayList;
- import java.util.List;
- public class SqlHelper {
- private static Connection con = null;
- private static PreparedStatement ps = null;
- private static ResultSet rs = null;
- private static CallableStatement cs = null;
- /**
- * 提供查询方法
- * @param sql sql语句
- * @param parameters 给问号赋值的参数组
- * @return {@link ArrayList}
- */
- public static ArrayList executeQuery(String sql, String[] parameters) {
- ArrayList al = new ArrayList();
- try {
- con = DBUtil.getConnection();
- ps = con.prepareStatement(sql);
- //给sql语句中的问号赋值
- if (parameters != null) {
- for (int i = 0; i < parameters.length; i++) {
- ps.setObject(i+1, parameters[i]);
- }
- }
- rs = ps.executeQuery();
- //得到结果集(rs)的结构
- ResultSetMetaData rsmd = rs.getMetaData();
- //通过rsmd可以得到该结果集有多少列
- int columnNum = rsmd.getColumnCount();
- //从rs中取出数据,并且封装到ArrayList中
- while (rs.next()) {
- Object []objects = new Object[columnNum];
- for(int i = 0; i < objects.length; i++) {
- objects[i] = rs.getObject(i + 1);
- }
- al.add(objects);
- }
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- DBUtil.close(rs, ps, con);
- }
- return al;
- }
- /**
- * 提供统一的插入/删除/更新方法
- * @param sql sql语句
- * @param parameteres 给问号赋值的参数组
- * @return
- */
- public static boolean executeUpdate(String sql,String[] parameteres) {
- boolean success = false;
- try {
- con = DBUtil.getConnection();
- ps = con.prepareStatement(sql);
- //给问号赋值
- if (parameteres != null) {
- for (int i = 0; i < parameteres.length; i++) {
- ps.setString(i + 1, parameteres[i]);
- }
- }
- //执行动作,如果返回“1” 则为操作成功
- if (ps.executeUpdate() == 1) {
- success = true;
- }
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- DBUtil.close(rs, ps, con);
- }
- return success;
- }
- /**
- * 提供统一的插入/删除/更新方法[需要考虑事物]
- * @param sql
- * @param parameters
- */
- public static void executeUpdate(String sql[], String[][] parameters){
- try {
- con = DBUtil.getConnection();
- //sql命令的提交由应用程序负责,程序必须调用commit或者rollback方法
- con.setAutoCommit(false);
- for (int i = 0; i < sql.length; i++) {
- if (parameters[i] != null) {
- ps = con.prepareStatement(sql[i]);
- for (int j = 0; j < parameters[i].length; i++){
- ps.setString(j + 1, parameters[i][j]);
- }
- ps.executeUpdate();
- }
- }
- con.commit();
- } catch (Exception e) {
- e.printStackTrace();
- //回滚操作
- try {
- con.rollback();
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- throw new RuntimeException(e.getMessage());
- } finally {
- DBUtil.close(rs, ps, con);
- }
- }
- }
dbinfo.properties 配置文件.主要配置一下数据库的名字,用户名,密码
- url=jdbc:mysql://localhost:3306/studentinfo
- username=root
- driver=com.mysql.jdbc.Driver
- password=1234