package com.bimoku.util.db;
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.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class Db {
//private Connection conn = null;
public Connection connection() throws SQLException {
Connection conn = null;
if(conn == null || conn.isClosed()){
try {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/testdb1?user=root&password=195891&useUnicode=true&characterEncoding=gbk";
try {
conn = DriverManager.getConnection(url);
} catch (Exception e) {
e.printStackTrace();
}
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
}
}
return conn;
}
/**
*
* @param sql
* @return
* @throws SQLException
*/
public List<HashMap<String,Object>> ExecuteQuery(String sql) throws SQLException{
List<HashMap<String,Object>> datas=null;
PreparedStatement sta=null;
ResultSet rs=null;
Connection conn = connection();;
try{
sta=conn.prepareStatement(sql);
rs=sta.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int recount = rsmd.getColumnCount();
String[] colLabels = new String[recount];
for (int i = 0; i < recount; i++) {
colLabels[i] = rsmd.getColumnLabel(i + 1);
}
datas=new ArrayList<HashMap<String,Object>>();
while (rs.next()) {
rs.getObject(1);
HashMap<String, Object> data = new HashMap<String, Object>();
for (int i = 0; i < colLabels.length; i++) {
data.put(colLabels[i], rs.getObject(colLabels[i]));
// System.out.println(colLabels[i]
// +"----->"+data.get(colLabels[i]));
}
datas.add(data);
}
}catch(Exception e){
e.printStackTrace();
}finally{
close(sta, rs, conn);
}
return datas;
}
/**
*
* @param ps
* @param rs
* @param conn
*/
public void close(Statement ps,ResultSet rs,Connection conn){
try {
if(rs!=null)rs.close();
} catch (SQLException e) {
e.printStackTrace();
}finally{
try{
if(ps!=null)ps.close();
}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(conn!=null)conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
}
/**
*
* @param sql
* @return
* @throws SQLException
*/
public int ExecuteNonQuery(String sql) throws SQLException{
int reNum=-1;
Connection conn = connection();
Statement stat=null;
try{
stat=conn.createStatement();
reNum=stat.executeUpdate(sql);
}catch(Exception e){
e.printStackTrace();
}finally{
}
return reNum;
}
/**
*
* @param sql
* @param params
* @return
*/
public int ExecuteNonQuery(String sql,Object[] params){
int reNum=-1;
Connection conn=null;
PreparedStatement ps=null;
try{
ps=conn.prepareStatement(sql);
for(int i=0;i<params.length;i++){
ps.setObject(i+1, params[i]);
}
reNum=ps.executeUpdate();
}catch(Exception e){
e.printStackTrace();
}finally{
this.close(ps, null, conn);
}
return reNum;
}
/**
* 执行带参数的sql语句返回List<HashMap<String,Object>>
* @param sql 传入SQL语句
* @param params 参数
* @return List<HashMap<String,Object>>
*/
public List<HashMap<String,Object>> ExecuteQuery(String sql,Object[] params){
List<HashMap<String,Object>> datas=null;
PreparedStatement ps=null;
ResultSet rs=null;
Connection conn=null;
try{
ps=conn.prepareStatement(sql);
for (int i = 0; i < params.length; i++) {
ps.setObject(i + 1, params[i]);
}
rs = ps.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int recount = rsmd.getColumnCount();
String[] colLabels = new String[recount];
for (int i = 0; i < recount; i++) {
colLabels[i] = rsmd.getColumnLabel(i + 1);
}
datas = new ArrayList<HashMap<String, Object>>();
while (rs.next()) {
HashMap<String, Object> data = new HashMap<String, Object>();
for (int i = 0; i < colLabels.length; i++) {
data.put(colLabels[i], rs.getObject(colLabels[i]));
}
datas.add(data);
}
}catch(Exception e){
e.printStackTrace();
}finally{
this.close(ps, rs, conn);
}
return datas;
}
}