package com.bank.common;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class ConnectionManager {
private static Connection conn = null;
/**
* 通过JNDI获取数据库连接
* @return
* @throws Exception
*/
public static Connection getConn() throws Exception {
Context context = new InitialContext();
DataSource dataSource = (DataSource) context.lookup("java:comp/env/jdbc/bank");
return dataSource.getConnection();
}
/**
* 更新方法
* @param sql
* @param params
* @return
*/
public static int update(String sql, Object... params) {
try {
return makeState(sql, params).executeUpdate();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
closeConn(conn);
}
return 0;
}
/**
* 查询方法
* @param sql
* @param params
* @return
*/
public static List<Map<String, Object>> find(String sql, Object... params) {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
try {
ResultSet rs = makeState(sql, params).executeQuery();
ResultSetMetaData columns = rs.getMetaData();
int count = columns.getColumnCount();
while (rs.next()) {
Map<String, Object> row = new HashMap<String, Object>();
for (int i = 0; i < count; i++) {
String columnName = columns.getColumnName(i + 1);
row.put(columnName, rs.getObject(columnName));
}
list.add(row);
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
closeConn(conn);
}
return list;
}
/**
* 遍历参数
* @param sql
* @param params
* @return
* @throws Exception
*/
public static PreparedStatement makeState(String sql, Object... params)
throws Exception {
conn = getConn();
PreparedStatement pstmt = conn.prepareStatement(sql);
for (int i = 0; i < params.length; i++) {
pstmt.setObject(i + 1, params[i]);
}
return pstmt;
}
public static void closeConn(Connection conn) {
if (conn != null)
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}