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