JDBC封装数据库的工具类【多测师】
一、先写一个数据库的工具函数 要求: 1、可以通过IP地址账号密码等进行连接数据库 2、封装一 封装一个查询的方法 ==》多测师_王sir package com.xiaoshu; 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.Properties; public class DBUtils { //硬编码,写死的代码--》解耦-》配置文件 /** * 连接字符串 */ private static String url; /** * 用户名 */ private static String user; /** * 密码 */ private static String password; /** * 上面的这些信息会变吗?? * 数据库名 * 用户名密码变了 * 数据库服务器ip换了 * 测试环境切换到生产服务器 * 数据库:mysql--》oracle * 测试环境 */ //注册驱动:只需要一次,当你用DBUtils类的时候,就注册好 把注册驱动写进静态代码块当中 //静态代码块:只在类加载到jvm中执行一遍 static { try { Properties properties = new Properties(); properties.load(Tester.class.getResourceAsStream("/jdbc.properties")); url = properties.getProperty("jdbc.url"); user = properties.getProperty("jdbc.user"); password = properties.getProperty("jdbc.password"); String driver = properties.getProperty("jdbc.driver"); Class.forName(driver); } catch (Exception e) { e.printStackTrace(); } } //获得连接的方法 private static Connection getConnection() { try { return DriverManager.getConnection(url, user, password); } catch (SQLException e) { e.printStackTrace(); } return null; } /** * 增删改 * @param sql * @param parameters * @throws ClassNotFoundException * @throws SQLException */ public static void excuteSQL(String sql, String... parameters) { Connection conn = null; //先进行初始化 为了后面的资源可以在finally当中进行关闭 PreparedStatement pstmt = null; try { conn = getConnection(); pstmt = conn.prepareStatement(sql); for (int i = 0; i < parameters.length; i++) { pstmt.setString(i + 1, parameters); } pstmt.execute(); } catch (SQLException e) { e.printStackTrace(); } finally { close(conn, pstmt); } } /** * 查询 * @param sql * @param parameters * @return * @throws ClassNotFoundException * @throws SQLException */ public static List<HashMap<String, String>> select(String sql, String... parameters) { //是可能有多条记录记录--》保存到一个什么数据容器 List<HashMap<String, String>> allRecordList = null; Connection conn = null; PreparedStatement pstmt = null; ResultSet resultSet = null; try { //获得连接 conn = getConnection(); pstmt = conn.prepareStatement(sql); //参数设值 for (int i = 0; i < parameters.length; i++) { pstmt.setString(i + 1, parameters); } //执行查询获取结果集 resultSet = pstmt.executeQuery(); //获取结果集的元数据: 元数据(描述数据的数据) ResultSetMetaData metaData = resultSet.getMetaData(); //获得每个字段,需要知道字段数,获得列数 int columnCount = metaData.getColumnCount();//5 allRecordList = new ArrayList<HashMap<String, String>>(); //遍历结果集 while (resultSet.next()) { //一条记录是包装成一个map HashMap<String, String> recordMap = new HashMap<String, String>(); //遍历所有的列 for (int i = 1; i <= columnCount; i++) { String columnName = metaData.getColumnName(i); String value = resultSet.getString(i); // System.out.print(columnName+":"+value +" "); //把字段名作为key,对应数据作为值: key -value: recordMap.put(columnName, value); } //添加到List容器中 allRecordList.add(recordMap); } } catch (SQLException e) { e.printStackTrace(); } finally { close(conn, pstmt, resultSet); } return allRecordList; } /** * 关闭资源 * @param conn * @param pstmt * @param resultSet */ private static void close(Connection conn, PreparedStatement pstmt, ResultSet resultSet) { //关闭资源 if (resultSet != null) { try { resultSet.close(); } catch (SQLException e) { e.printStackTrace(); } } close(conn, pstmt); } /** * 关闭资源 * @param conn * @param pstmt */ private static void close(Connection conn, PreparedStatement pstmt) { if (pstmt != null) { try { pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } 二、调用工具类当中的select查询方法 package com.xiaoshu; import java.io.IOException; import java.sql.SQLException; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; public class Tester { public static void main(String[] args) throws ClassNotFoundException, SQLException, IOException { String sql = "select * from member;"; List<HashMap<String, String>> recordList = DBUtils.select(sql); //查询的结果以键值对的形式返回保存在列表容器当中 for (HashMap<String, String> record : recordList) { //对recordList对象进行循环遍历 取到单个的键和值 System.out.println(record); }