package com.Demo.utils;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ResourceBundle;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.Statement;
/**本类用于连接数据库 连接,使用本类只要输入对应的参数就可以方便使用数据库,简化繁杂的代码
* 初始化链接数据库所需的变量值
* 读取dbinfo.properties文档中的参数
* driverclass=com.mysql.jdbc.Driver
* url=jdbc:mysql://localhost:3306/day06
* username=root password=root
*/
public class DBUtil {
/**
* 设定driverclass变量(数据库厂商提供的类)
*/
private static String driverclass; // 设定driverclass变量
/**
* 设定url变量(数据库的路径和库名)
*/
private static String url; // 设定url变量
/**
* 设定username变量(数据库的登录账号)
*/
private static String username; // 设定username变量
/**
* 设定password变量(数据库的登录账号的密码)
*/
private static String password; // 设定password变量
/**
* 设定stmt变量
*/
private static PreparedStatement stmt; // 设定读取stmt变量
/**
* 设定conn变量
*/
private static Connection conn; // 设定读取conn变量
/**
* 设定rs变量
*/
private static ResultSet rs; // 设定读取rs变量
static {
ResourceBundle rb = ResourceBundle.getBundle("dbinfo");
driverclass = rb.getString("driverclass");
url = rb.getString("url");
username = rb.getString("username");
password = rb.getString("password");
try {
/**
* 创建数据库连接
*/
// 创建数据库连接
Class.forName(driverclass);
conn = (Connection) DriverManager.getConnection(url, username,
password);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 如果在您创建类中创建了以下参数,提供您设置参数的方法
* @param conns 设置Connection类型值
* @param stmts 设置PreparedStatement类型值
* @param rss 设置ResultSet类型值
*/
public static void setCSR(Connection conns,PreparedStatement stmts,ResultSet...rss){
conn=conns;
stmt=stmts;
ResultSet[] arr=rss;
for(int i=0;i<arr.length;i++)
{
rs=arr[i];
}
}
/**
* 提供接受SQL语句,以及设置对应SQL语句中的"?"参数的值,请务必添加与SQL语句中?
* 的数量一致的参数。目的为了过滤用户输入,确保防止SQL注入问题。
* @param sql 输入的SQL语句,次语句中的值用?替代
* @param args 此为可变参数,输入SQL语句中?的替代参数,参数数量与?数量必须相同。
* @throws SQLException 处理此方法的异常
*/
private static void Sql(String sql, String...args) throws SQLException {
stmt = (PreparedStatement) conn.prepareStatement(sql);
String[] arr=args;
for(int i=0;i<arr.length;i++)
{
stmt.setString(i+1,arr[i]);
}
}
/**
* 创建Query连接,使用数据库中的executeQuery方法。
* @param sql 输入的SQL语句,次语句中的值用?替代
* @param args 此为可变参数,输入SQL语句中?的替代参数,参数数量与?数量必须相同。
* @return 返回ResultSet值
* @throws Exception 处理此方法的异常
*/
// 创建Query连接,使用数据库中的executeQuery方法
public ResultSet Query(String sql,String...args) throws Exception {
Sql(sql, args);
rs = stmt.executeQuery();
return rs;
}
/**
* 创建execute连接,使用数据库中的execute方法
* @param sql 输入的SQL语句,次语句中的值用?替代
* @param args 此为可变参数,输入SQL语句中?的替代参数,参数数量与?数量必须相同。
* @return 返回boolean类型值
* @throws Exception 处理此方法的异常
*/
// 创建execute连接
public boolean execute(String sql,String…args) throws Exception {
Sql(sql, args);
boolean i = stmt.execute();
return i;
}
/**
* 创建Update连接,使用数据库中的executeUpdate方法
* @param sql 输入的SQL语句,次语句中的值用?替代
* @param args 此为可变参数,输入SQL语句中?的替代参数,参数数量与?数量必须相同。
* @return 返回int数值类型
* @throws Exception 处理此方法的异常
*/
// 创建Update连接
public int Update(String sql,String…args) throws Exception {
Sql(sql, args);
int i = stmt.executeUpdate();
return i;
}
/**
* 提供关闭您创建class所在中的相关参数的值,RS为可变参数,当使用Update时无需关闭此变量。
* @param stmt 此类中的PreparedStatement对象
* @param conn 此类中的Connection对象
* @param rs 此类中的ResultSet对象 ,此参数为可变参数
*/
// 提供关闭您创建class所在中资源连接
public static void closeAlls(Statement stmt, Connection conn,
ResultSet…rs) {
if (rs != null) {
try {
for (int i = 0; i < rs.length; i++)
rs[i].close();
} catch (SQLException e) {
e.printStackTrace();
}
rs = null;
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
stmt = null;
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
conn = null;
}
}
/**
* 提供关闭本类中资源,RS为可变参数,当使用Update时无需关闭此变量。
* stmt 本类中的PreparedStatement对象
* conn 本类中的Connection对象
* rs 本类中的ResultSet对象 ,此参数为可变参数
*/
// 提供关闭本类中资源连接
public static void closeAll() {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
rs = null;
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
stmt = null;
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
conn = null;
}
}
}
}