package common;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import org.apache.log4j.Logger;
public class ConnUtil {
private static String DRIVER;
private static String URL;
private static String USER;
private static String PWD;
private static boolean POOL;
private static Logger log = Logger.getLogger(ConnUtil.class);
static {
Properties p = new Properties();
try {
p.load(ConnUtil.class.getResourceAsStream("/db.properties"));
DRIVER = p.getProperty("driver");
URL = p.getProperty("url");
USER = p.getProperty("user");
PWD = p.getProperty("pwd");
POOL = "true".equals(p.getProperty("pool"));
log.info("成功加载连接配置文件!");
} catch (Exception e) {
log.error("加载连接配置文件出错!原因:" + e);
throw new DBAccessException("加载连接配置文件出错!原因:" + e.getMessage());
}
}
public static Connection getConn() {
Connection conn = null;
if (!POOL) {// 普通模式
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/restrant", "root", "ok");
log.info("普通方式获得连接成功");
} catch (Exception e) {
log.error("普通方式获得连接出错!"+e);
throw new DBAccessException("普通方式获得连接出错!原因:" + e.getMessage());
}
} else {
try {
Context ct = new InitialContext();
DataSource ds = (DataSource) ct.lookup("java:comp/env/jdbc/restrant");
conn = ds.getConnection();
log.info("连接池方式获得连接成功");
} catch (Exception e) {
log.error("连接池方式获得连接出错!"+e);
throw new DBAccessException("连接池方式获得连接出错!原因:" + e.getMessage());
}
}
return conn;
}
public static void close(Connection conn) {
try {
if (conn != null && !conn.isClosed()) {
conn.close();
}
} catch (Exception e) {
log.error("关闭连接出错!"+e);
throw new DBAccessException("关闭连接出错!原因:" + e.getMessage());
}
}
public static ResultSet executeQuery(Connection conn, String sql) {
ResultSet res = null;
try {
PreparedStatement ps = conn.prepareStatement(sql);
res = ps.executeQuery();
} catch (SQLException e) {
log.error("执行查询出错!"+e);
throw new DBAccessException("执行查询出错!!原因:" + e.getMessage());
}
return res;
}
public static ResultSet executeQuery(Connection conn, String sql,
Object[] params) {
ResultSet res = null;
try {
PreparedStatement ps = conn.prepareStatement(sql);
if (params != null && params.length > 0) {
for (int i = 0; i < params.length; i++) {
ps.setObject(i + 1, params[i]);
}
}
res = ps.executeQuery();
} catch (Exception e) {
log.error("执行查询出错!"+e);
throw new DBAccessException("执行查询出错!!原因:" + e.getMessage());
}
return res;
}
public static int executeUpdate(Connection conn, String sql, Object[] params) {
int count = 0;
try {
PreparedStatement ps = conn.prepareStatement(sql);
if (params != null && params.length > 0) {
for (int i = 0; i < params.length; i++) {
ps.setObject(i + 1, params[i]);
}
count = ps.executeUpdate();
}
} catch (Exception e) {
log.error("执行更新出错!"+e);
throw new DBAccessException("执行更新出错!!原因:" + e.getMessage());
}
return count;
}
}