/** * */ package com.hotel.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.hotel.constant.Constants; /** * 数据库连接通用类 * 连接数据库的步骤: * 1. 导入驱动包 * 2. 加载驱动 * 3. 通过驱动管理器类获取数据库连接 * 4. 通过连接对象创建预编译对象 * 5. 通过编译对象执行SQL指令并处理返回结果 * 6. 关闭相关操作对象 * */ public class DBUtil { /** * 定义获取连接对象的方法 * */ private static Connection getConn() { // 定义连接对象句柄 Connection conn = null; try { // 加载驱动 Class.forName(Constants.DRIVER_NAME); // 通过驱动管理器类获取数据库连接 conn = DriverManager.getConnection(Constants.URL, Constants.USERNAME, Constants.PASSWORD); } catch (Exception e) { e.printStackTrace(); } return conn; } /** * 定义执行简单SQL的增,删,改指令 * @param sql 调用传入的SQL指令 * @param objects 执行SQL指令需要的参数 * @return int 返回方法操作后受影响的行数 */ public static int executeMyUpdate(String sql,Object... objects) { // 定义接受受影响行数的变量 int row = 0; // 定义连接对象句柄 Connection conn = null; // 定义编译对象句柄 PreparedStatement pst = null; // 通过调用本类中的获取连接对象 conn = getConn(); try { // 通过连接对象创建编译对象 pst = conn.prepareStatement(sql); // 设置SQL命令所需的参数 if(objects != null) { for(int i =0 ;i<objects.length;i++) { pst.setObject(i+1, objects[i]); } } // 执行SQL指令并处理返回结果 row = pst.executeUpdate(); } catch (Exception e) { e.printStackTrace(); } finally { closeObjects(pst,conn); } // 返回受影响行数 return row; } /** * 定义执行简单查询语句的通用方法 * @param sql 调用传入查询的SQL指令 * @param objects 查询所需参数 * @return List<Map<String,Object>> 返回查询构建集合对象 */ public static List<Map<String,Object>> executeQuery(String sql,Object...objects) { // 定义表集合对象 List<Map<String,Object>> table = new ArrayList<Map<String,Object>>(); // 定义连接对象句柄 Connection conn = null; // 定义编译对象句柄 PreparedStatement pst = null; // 定义结果集句柄 ResultSet rs = null; // 通过调用本类中的获取连接对象 conn = getConn(); try { // 通过连接对象创建预编译对象 pst = conn.prepareStatement(sql); // 为查询编译对象设置参数 if(objects != null) { for(int i=0;i<objects.length;i++) { pst.setObject(i+1, objects[i]); } } // 通过编译对象执行SQL命令 rs = pst.executeQuery(); // 判断结果是否为空 if(rs != null) { // 把得到结果集转化为一张虚拟表 ResultSetMetaData rsd = rs.getMetaData(); // 得到查询表有多少个字段(列) int count = rsd.getColumnCount(); // 得到当前遍历的行Map(key,value) while(rs.next()) { // 定义存储行的Map集合对象 Map<String,Object> row = new HashMap<String,Object>(); // 循环列 /* userId(key) userName userPass userRemark ----------- -------------------- ------------------------------ 10002 (value) normal 123 normal */ /* * rsd.getColumnName(i+1) 得到当前遍历行对应列的名称 */ for(int i=0;i<count;i++) { row.put(rsd.getColumnName(i+1), rs.getObject(rsd.getColumnName(i+1))); } // 把每次遍历的行存储到表集合中 table.add(row); } } } catch (Exception e) { e.printStackTrace(); } finally { closeObjects(rs,pst,conn); } return table; } /** * 释放操作对象的方法 * @param objects 需要释放对象的列表 */ private static void closeObjects(Object...objects) { if(objects != null) { for(Object param : objects) { try { if(param instanceof ResultSet) { ((ResultSet)param).close(); } if(param instanceof PreparedStatement) { ((PreparedStatement)param).close(); } if(param instanceof Connection) { Connection conn = ((Connection)param); if(!conn.isClosed()) { conn.close(); conn = null; } } } catch (Exception e) { e.printStackTrace(); } } } } }/** * */ package com.hotel.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.hotel.constant.Constants; /** * 数据库连接通用类 * 连接数据库的步骤: * 1. 导入驱动包 * 2. 加载驱动 * 3. 通过驱动管理器类获取数据库连接 * 4. 通过连接对象创建预编译对象 * 5. 通过编译对象执行SQL指令并处理返回结果 * 6. 关闭相关操作对象 * */ public class DBUtil { /** * 定义获取连接对象的方法 * */ private static Connection getConn() { // 定义连接对象句柄 Connection conn = null; try { // 加载驱动 Class.forName(Constants.DRIVER_NAME); // 通过驱动管理器类获取数据库连接 conn = DriverManager.getConnection(Constants.URL, Constants.USERNAME, Constants.PASSWORD); } catch (Exception e) { e.printStackTrace(); } return conn; } /** * 定义执行简单SQL的增,删,改指令 * @param sql 调用传入的SQL指令 * @param objects 执行SQL指令需要的参数 * @return int 返回方法操作后受影响的行数 */ public static int executeMyUpdate(String sql,Object... objects) { // 定义接受受影响行数的变量 int row = 0; // 定义连接对象句柄 Connection conn = null; // 定义编译对象句柄 PreparedStatement pst = null; // 通过调用本类中的获取连接对象 conn = getConn(); try { // 通过连接对象创建编译对象 pst = conn.prepareStatement(sql); // 设置SQL命令所需的参数 if(objects != null) { for(int i =0 ;i<objects.length;i++) { pst.setObject(i+1, objects[i]); } } // 执行SQL指令并处理返回结果 row = pst.executeUpdate(); } catch (Exception e) { e.printStackTrace(); } finally { closeObjects(pst,conn); } // 返回受影响行数 return row; } /** * 定义执行简单查询语句的通用方法 * @param sql 调用传入查询的SQL指令 * @param objects 查询所需参数 * @return List<Map<String,Object>> 返回查询构建集合对象 */ public static List<Map<String,Object>> executeQuery(String sql,Object...objects) { // 定义表集合对象 List<Map<String,Object>> table = new ArrayList<Map<String,Object>>(); // 定义连接对象句柄 Connection conn = null; // 定义编译对象句柄 PreparedStatement pst = null; // 定义结果集句柄 ResultSet rs = null; // 通过调用本类中的获取连接对象 conn = getConn(); try { // 通过连接对象创建预编译对象 pst = conn.prepareStatement(sql); // 为查询编译对象设置参数 if(objects != null) { for(int i=0;i<objects.length;i++) { pst.setObject(i+1, objects[i]); } } // 通过编译对象执行SQL命令 rs = pst.executeQuery(); // 判断结果是否为空 if(rs != null) { // 把得到结果集转化为一张虚拟表 ResultSetMetaData rsd = rs.getMetaData(); // 得到查询表有多少个字段(列) int count = rsd.getColumnCount(); // 得到当前遍历的行Map(key,value) while(rs.next()) { // 定义存储行的Map集合对象 Map<String,Object> row = new HashMap<String,Object>(); // 循环列 /* userId(key) userName userPass userRemark ----------- -------------------- ------------------------------ 10002 (value) normal 123 normal */ /* * rsd.getColumnName(i+1) 得到当前遍历行对应列的名称 */ for(int i=0;i<count;i++) { row.put(rsd.getColumnName(i+1), rs.getObject(rsd.getColumnName(i+1))); } // 把每次遍历的行存储到表集合中 table.add(row); } } } catch (Exception e) { e.printStackTrace(); } finally { closeObjects(rs,pst,conn); } return table; } /** * 释放操作对象的方法 * @param objects 需要释放对象的列表 */ private static void closeObjects(Object...objects) { if(objects != null) { for(Object param : objects) { try { if(param instanceof ResultSet) { ((ResultSet)param).close(); } if(param instanceof PreparedStatement) { ((PreparedStatement)param).close(); } if(param instanceof Connection) { Connection conn = ((Connection)param); if(!conn.isClosed()) { conn.close(); conn = null; } } } catch (Exception e) { e.printStackTrace(); } } } } }
原文:http://lhmjava.blog.51cto.com/9668287/1623228