package javacto.taobao.com;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
public class DBUtil {
private static String driverName;
private static String url;
private static String usreName;
private static String pwd;
static {
//加载类之前就会执行
//调用init()方法
init();
}
private static void init() {
Properties ps = new Properties();
String path = "db.properties";
InputStream is = DBUtil.class.getClassLoader().getResourceAsStream(path);
try {
ps.load(is);
} catch (IOException e) {
e.printStackTrace();
}
//请各位同学务必打印输出 值 是否正确
System.out.println(ps.get("db.driverName"));
System.out.println(ps.get("db.url"));
System.out.println(ps.get("db.username"));
System.out.println(ps.get("db.pwd"));
driverName= (String) ps.get("db.driverName");
url= (String) ps.get("db.url");
usreName= (String) ps.get("db.username");
pwd= (String) ps.get("db.pwd");
}
/**
* 建立连接
* @return
*/
public static Connection getConnection(){
//访问网址:javacto.taobao.com
Connection conn = null;
try {
//1.加载驱动 DriverManager
Class.forName(driverName);
//2.建立连接 Connection
conn = DriverManager.getConnection(url,usreName,pwd);
}catch (Exception e ){
e.printStackTrace();
}
return conn;
}
/**
* 释放资源
* PreparedStatement extends Statement
*/
public static void closeAll(Connection conn, Statement pstm, ResultSet rs){
try {
if(rs!=null){
rs.close();
}
if(pstm!=null){
pstm.close();
}
if(conn!=null){
conn.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
/**
* 封装增删改
* 访问网址:javacto.taobao.com
* @return
*/
public static int executeUpdate(String sql,Object agrs[]){
int num=0;
//1.定义变量
Connection conn = null;
PreparedStatement pstm =null;
try{
//2.建立连接 Connection
conn = getConnection();
// 3.PreparedStatement 处理预编译sql语句
//把之前的 DML随便一个复制过来,然后修改两步即可
pstm = conn.prepareStatement(sql);
// 4.给?赋值
//我也不知道 Object agrs[] 变量中 会有 多个参数 直接循环,有就就会循环
for(int i = 0;i<agrs.length;i++){
pstm.setObject(i+1,agrs[i]);
}
// 5.执行预编译sql语句 DML executeUpdate () 返回int类型
num = pstm.executeUpdate();
}catch (Exception e){
e.printStackTrace();
}finally {
// 6.释放资源
closeAll(conn,pstm,null);
}
return num;
}
/**
* 列表查询
* javacto.taobao.com 访问网址
*/
public static<T> List<T> queryListExecute(String sql, ArrayList<Object> paras, Class<T> cls ){
Connection conn = getConnection();
PreparedStatement pst = null;
ResultSet rs = null;
T singleObject = null;
int index = 1;
List <T> list = new ArrayList<T>();
try {
pst = conn.prepareStatement(sql);
if(paras !=null && paras.size()>0) {
pst.clearParameters();
for(int i = 0;i<paras.size();i++) {
pst.setObject(index++, paras.get(i));
}
}
rs = pst.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
while(rs.next()) {
singleObject = cls.newInstance();
for(int i = 0;i<columnCount;i++) {
String columnName = rsmd.getColumnName(i+1);
Object columdValue = rs.getObject(columnName);
Field field = cls.getDeclaredField(columnName);
field.setAccessible(true);
field.set(singleObject, columdValue);
}
list.add(singleObject);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
closeAll(conn, pst, rs);
}
return list;
}
}
db.properties文件中代码