package com.msb.blog;
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 BaseDao {
private static final String URL;
private static final String DRIVER;
private static final String USERNAME;
private static final String PASSWORD;
// 读取properties
static {
Properties properties = new Properties();
InputStream is = BaseDao.class.getResourceAsStream("/db.properties");
try {
properties.load(is);
} catch (IOException e) {
e.printStackTrace();
}
// 赋值
URL = properties.getProperty("URL");
DRIVER = properties.getProperty("DRIVER");
USERNAME = properties.getProperty("USERNAME");
PASSWORD = properties.getProperty("PASSWORD");
try {
// 释放InputStream
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取Sql连接
*
* @return
*/
private Connection getConnection() {
Connection conn = null;
try {
Class.forName(DRIVER);
conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
/**
* 修改
*
* @param sql
* @param param
* @return
*/
public int executeUpdate(String sql, Object... param) {
Connection connection = getConnection();
PreparedStatement preparedStatement = null;
int result = 0;
try {
connection.setAutoCommit(false);
preparedStatement = connection.prepareStatement(sql);
for (int i = 0; i < param.length; i++) {
preparedStatement.setObject(i + 1, param[i]);
}
result = preparedStatement.executeUpdate();
connection.commit();
} catch (SQLException e) {
e.printStackTrace();
try {
connection.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
} finally {
closeAll(connection, preparedStatement);
}
return result;
}
/**
* 查询
*
* @param sql
* @param param
* @return
*/
public List executeQuery(Class clazz, String sql, Object... param) {
ArrayList<Object> result = new ArrayList<>();
Connection connection = getConnection();
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
preparedStatement = connection.prepareStatement(sql);
for (int i = 0; i < param.length; i++) {
preparedStatement.setObject(i + 1, param[i]);
}
resultSet = preparedStatement.executeQuery();
ResultSetMetaData metaData = resultSet.getMetaData();
int columnCount = metaData.getColumnCount();
while (resultSet.next()) {
Object obj = clazz.newInstance();
for (int i = 1; i <= columnCount; i++) {
String columnName = metaData.getColumnName(i);
Field field = clazz.getDeclaredField(columnName.toLowerCase());
field.setAccessible(true);
field.set(obj,resultSet.getObject(columnName));
}
result.add(obj);
}
} catch (SQLException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}finally {
closeAll(connection,preparedStatement,resultSet);
}
return result;
}
/**
* 释放
*
* @param conn
* @param pstmt
* @param rs
*/
public void closeAll(Connection conn, PreparedStatement pstmt, ResultSet rs) {
try {
if (rs != null) {
rs.close();
}
if (pstmt != null) {
pstmt.close();
}
if (conn !=