import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**Mysql工具类,驱动为com.mysql.jdbc.Driver版本

  • @author 知了堂辉哥
  • @version v1.0.0
    */

public class MysqlUtil {

// 驱动信息
public static String DRIVER = "com.mysql.jdbc.Driver";

private Connection con = null;
private PreparedStatement ps = null;
private ResultSet rs = null;
private ResultSetMetaData rst = null;

// 静态加载驱动
static {
    try {
        Class.forName(DRIVER);
        System.out.println("数据库驱动加载成功!");
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        System.out.println("数据库驱动加载异常!");
    }
}

// 连接数据库(dbname数据库为数据库名)
/**连接数据库(dbinfo为数据库基本信息,由操作类传入)
 * @param dbinfo 数据库基本信息;<p>
 *           dbinfo[0]:数据库URL 如:jdbc:mysql://localhost:3306/<p>
 *           dbinfo[1]:数据库DBName 如:zhiliaotangdb<p>
 *        dbinfo[2]:数据库UserName 如:root<p>
 *        dbinfo[3]:数据库PassWord 如:root
 * @return 数据库链接对象 Connection
 */
private Connection getConnection(String[] dbinfo) {
    try {
        con = DriverManager.getConnection(dbinfo[0] + dbinfo[1], dbinfo[2], dbinfo[3]);
        System.out.println("知了堂:数据库连接成功!");
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        System.out.println("知了堂:数据库连接异常!");
    }
    return con;
}

// 加载sql语句
/**加载sql语句
 * @param dbinfo 数据库基本信息;<p>
 *           dbinfo[0]:数据库URL 如:jdbc:mysql://localhost:3306/<p>
 *           dbinfo[1]:数据库DBName 如:zhiliaotangdb<p>
 *        dbinfo[2]:数据库UserName 如:root<p>
 *        dbinfo[3]:数据库PassWord 如:root
 * @param sql sql语句
 * @return 返回 PreparedStatement 对象
 */
private PreparedStatement setPs(String[] dbinfo, String sql) {
    getConnection(dbinfo);
    try {
        // 获得连接
        ps = con.prepareStatement(sql);
        System.out.println("知了堂:加载sql语句成功!");
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        System.out.println("知了堂:加载sql语句成功异常!");
    }
    return ps;
}

// 关流
private void CloseAll() {
    if (rs != null) {
        try {
            rs.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            System.out.println("知了堂:查询结果集关闭失败!");
            e.printStackTrace();
        }
    }
    if (ps != null) {
        try {
            ps.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            System.out.println("知了堂:语句对象关闭异常!");
            e.printStackTrace();
        }
    }
    if (con != null) {
        try {
            con.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            System.out.println("知了堂:语句对象关闭异常!");
            e.printStackTrace();
        }
    }
}

// 查询 (Object[] obj 充当占位符? )
/**查询 (Object[] obj 充当占位符? )
 * @param dbinfo 数据库基本信息;<p>
 *           dbinfo[0]:数据库URL 如:jdbc:mysql://localhost:3306/<p>
 *           dbinfo[1]:数据库DBName 如:zhiliaotangdb<p>
 *        dbinfo[2]:数据库UserName 如:root<p>
 *        dbinfo[3]:数据库PassWord 如:root
 * @param sql sql语句
 * @param obj Object[] obj 充当占位符?
 * @return List
 */
public List<Map<String, Object>> select(String[] dbinfo, String sql, Object[] obj) {
    List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
    setPs(dbinfo, sql);
    try {
        if (obj != null) {
            // 对占位符?进行复制
            for (int i = 0; i < obj.length; i++) {
                ps.setObject(i + 1, obj[i]);// 从第一个开始 i+1 ,值为obj[i]
            }
        }
        // 执行
        rs = ps.executeQuery();
        rst = rs.getMetaData();
        while (rs.next()) {
            Map<String, Object> map = new HashMap<String, Object>();
            for (int i = 1; i <= rst.getColumnCount(); i++) {
                String key = rst.getColumnName(i);
                map.put(key, rs.getString(key));
            }
            list.add(map);
        }
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        System.out.println("知了堂:查询出现异常!");
        e.printStackTrace();
    } finally {
        CloseAll();
    }
    return list;
}

// 查询无set (用于展示所有列表)
/**查询无set (用于展示所有列表)
 * @param dbinfo 数据库基本信息;<p>
 *           dbinfo[0]:数据库URL 如:jdbc:mysql://localhost:3306/<p>
 *           dbinfo[1]:数据库DBName 如:zhiliaotangdb<p>
 *        dbinfo[2]:数据库UserName 如:root<p>
 *        dbinfo[3]:数据库PassWord 如:root
 * @param sql sql语句
 * @return List
 */
public List<Map<String, Object>> select(String[] dbinfo, String sql) {
    return select(dbinfo, sql, new Object[] {});
}

// 添加、删除、修改()
/**添加、删除、修改SQL万能方法
 * @param dbinfo 数据库基本信息;<p>
 *           dbinfo[0]:数据库URL 如:jdbc:mysql://localhost:3306/<p>
 *           dbinfo[1]:数据库DBName 如:zhiliaotangdb<p>
 *        dbinfo[2]:数据库UserName 如:root<p>
 *        dbinfo[3]:数据库PassWord 如:root
 * @param sql sql语句
 * @param obj Object[] obj 充当占位符?
 * @return 成功返回大于等于0,失败返回-1
 */
public int update(String[] dbinfo, String sql, Object[] obj) {
    ps = setPs(dbinfo, sql);
    try {
        if (obj != null) {
            for (int i = 0; i < obj.length; i++) {
                ps.setObject(i + 1, obj[i]);
            }
        }
        return ps.executeUpdate();
    } catch (SQLException e) {
        // TODO: handle exception
        System.out.println("知了堂:更新失败,请检查!");
        e.printStackTrace();
    } finally {
        CloseAll();
    }
    return -1;
}

// 注册
/**带重复数据检验的注册方法
 * @param dbinfo 数据库基本信息;<p>
 *           dbinfo[0]:数据库URL 如:jdbc:mysql://localhost:3306/<p>
 *           dbinfo[1]:数据库DBName 如:zhiliaotangdb<p>
 *        dbinfo[2]:数据库UserName 如:root<p>
 *        dbinfo[3]:数据库PassWord 如:root
 * @param insertsql 注册的Insert语句
 * @param selectsql 查重的Select语句
 * @param obj 注册的Insert语句Object[] obj 充当占位符?
 * @param obj1 查重的Select语句Object[] obj 充当占位符?
 * @return 如果重复数据则返回-1
 */
public int register(String[] dbinfo, String insertsql, String selectsql, Object[] obj, Object[] obj1) {
    List<Map<String, Object>> list = select(dbinfo, selectsql, obj1);
    if (list.size() == 0) {// 判断是否有数据
        ps = setPs(dbinfo, insertsql);
        try {
            if (obj != null) {
                for (int i = 0; i < obj.length; i++) {
                    ps.setObject(i + 1, obj[i]);
                }
            }
            return ps.executeUpdate();
        } catch (SQLException e) {
            // TODO: handle exception
            System.out.println("知了堂:更新失败,请检查!");
            e.printStackTrace();
        } finally {
            CloseAll();
        }
    }

    return -1;
}

}

最后修改:2019 年 03 月 09 日
如果觉得我的文章对你有用,请随意赞赏