日期:2014-05-16 浏览次数:20383 次
工具类BaseDao.java
package com.accp.jdbc; 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 org.apache.log4j.Logger; public class BaseDao { // 使用log4j记录日志 private static Logger logger = Logger.getLogger(BaseDao.class); // 连接驱动 private static final String DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; // 连接路径 private static final String URL = "jdbc:sqlserver://localhost:1433;databaseName=test"; // 用户名 private static final String USERNAME = "sa"; // 密码 private static final String PASSWORD = "sa"; //静态代码块 static { try { // 加载驱动 Class.forName(DRIVER); } catch (ClassNotFoundException e) { e.printStackTrace(); logger.error("加载驱动失败", e); } } /* * 获取数据库连接 */ public Connection getConnection() { Connection conn = null; logger.debug("开始连接数据库"); try{ //与数据库建立连接 conn=DriverManager.getConnection(URL, USERNAME, PASSWORD); }catch(SQLException e){ e.printStackTrace(); logger.error("数据库连接失败!",e); } logger.debug("数据库连接成功"); return conn; } /* * 关闭数据库连接,注意关闭的顺序 */ public void close(ResultSet rs, PreparedStatement ps, Connection conn) { //注意:最后打开的最先关闭 if(rs!=null){ try{ rs.close(); rs=null; }catch(SQLException e){ e.printStackTrace(); logger.error("关闭ResultSet失败",e); } } if(ps!=null){ try{ ps.close(); ps=null; }catch(SQLException e){ e.printStackTrace(); logger.error("关闭PreparedStatement失败",e); } } if(conn!=null){ try{ conn.close(); conn=null; }catch(SQLException e){ e.printStackTrace(); logger.error("关闭Connection失败",e); } } } /* * 查询多个对象的方法 * * sql: 要执行的sql语句 * obj:可变参数列表 */ public List<Map<String,Object>> queryList(String sql,Object... obj){ List<Map<String,Object>> data=new ArrayList<Map<String,Object>>(); Connection conn=getConnection(); //获得连接 PreparedStatement ps=null; ResultSet rs=null; try{ //创建PreparedStatement对象 ps=conn.prepareStatement(sql); //为查询语句设置参数 setParameter(ps, obj); //获得ResultSet结果集 rs=ps.executeQuery(); //获得结果集信息 ResultSetMetaData rsmd=rs.getMetaData(); // 获得列的总数 int columnCount=rsmd.getColumnCount(); Map<String,Object> row=null; // 遍历结果集,根据信息封装成Map while(rs.next()){ row=new HashMap<String, Object>(); for(int i=0;i<columnCount;i++){ String columnLabel=rsmd.getColumnLabel(i+1); row.put(columnLabel, rs.getObject(columnLabel)); } data.add(row); } }catch(SQLException e){ e.printStackTrace(); logger.error("数据库操作异常",e); }finally{ //关闭连接 close(rs,ps,conn); logger.debug("释放资源成功"); } return data; } /* * 查询一个对象的方法 * * sql: 要执行的sql语句 * obj:可变参数列表 */ public Map<String,Object> query(String sql,Object... obj){ Map<String,Object> data=null; Connection conn=getConnection(); //获得连接 PreparedStatement ps=null; ResultSet rs=null; try{ //创建PreparedStatement对象 ps=conn.prepareStatement(sql); //为查询语句设置参数 setParameter(ps, obj); //获得ResultSet结果集 rs=ps.executeQuery(); //获得结果集信息 ResultSetMetaData rsmd=rs.getMetaData(); // 获得列的总数 int columnCount=rsmd.getColumnCount(); // 遍历结果集,根据信息封装成Map while(rs.next()){ data=new HashMap<String, Object>(); for(int i=0;i<columnCount;i++){ String columnLabel=rsmd.getColumnLabel(i+1); data.put(columnLabel, rs.getObject(columnLabel)); } } }catch(S