JDBC-util 封裝了jdbc並封裝dbutil方法,查詢直接返回List<map<String,Object>>,將一大堆代碼放在一塊是真的不好看
代碼如下:
package com.cmos.util; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Properties; /** * 數據庫連接工具類 * * @author Wx * */ public class JDBCUtil { private static Properties ps = new Properties(); static { // 讀入配置文件 InputStream is = JDBCUtil.class.getResourceAsStream("jdbc.properties"); try { ps.load(is); } catch (IOException e) { e.printStackTrace(); } } /** * 建立連接方法 * @return * @throws Exception */ public static Connection getConnection() throws Exception { Connection conn = null; if (conn == null) { //加載驅動 Class.forName(ps.getProperty("driver")); conn = DriverManager.getConnection(ps.getProperty("url"), ps.getProperty("username"), ps.getProperty("password")); return conn; } else { return conn; } } /** * 關閉連接 * @param conn * @param pre * @param rs */ public static void close(Connection conn, PreparedStatement pre, ResultSet rs) { if (rs != null) try { rs.close(); } catch (SQLException e2) { // TODO Auto-generated catch block e2.printStackTrace(); } if (pre != null) try { pre.close(); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } if (conn != null) try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 關閉連接方法 * @param conn * @param pre */ public static void close(Connection conn, PreparedStatement pre) { if (pre != null) try { pre.close(); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } if (conn != null) try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
DButil
package com.cmos.util; import java.sql.Connection; import java.sql.DatabaseMetaData; 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; public class DBUtil { private static Connection conn = null; private static PreparedStatement pstmt = null; private static ResultSet rs = null; /** * 增刪改操作 * @param sql * @param paramsValue * @return */ public static int execute(String sql, Object[] paramsValue) { int result = 0; try { // 1. 數據庫連接 conn = JDBCUtil.getConnection(); // 2. 獲取PreparedStatement pstmt = conn.prepareStatement(sql); // 3. 得到參數元數據個數 int count = pstmt.getParameterMetaData().getParameterCount(); // 4. 利用參數元數據給SQL語句的佔位符需要的參數賦值 if (paramsValue != null && paramsValue.length > 0) { for (int i = 0; i < count; i++) { // 循環結束,可以給SQL語句完整賦值 pstmt.setObject(i + 1, paramsValue[i]); } } // 5. 執行 result = pstmt.executeUpdate(); } catch (Exception e) { throw new RuntimeException(e); } finally { JDBCUtil.close(conn, pstmt); } return result; } /** * 查詢操作 * @param sql * @param params * @return */ public static List<Map<String, Object>> executeQuery(String sql, Object[] params) { List<Map<String, Object>> list = new ArrayList<>(); try { conn = JDBCUtil.getConnection(); pstmt = conn.prepareStatement(sql); // 設置參數 if (params != null) { for (int i = 0; i < params.length; i++) { pstmt.setObject(i + 1, params[i]); } } rs = pstmt.executeQuery(); // 得到ResultSetMetaData對象,這個對象包括列的信息(列的名稱和類型等等) ResultSetMetaData metaData = rs.getMetaData(); // 得到結果集中列的個數 int columnCount = metaData.getColumnCount(); while (rs.next()) { Map<String, Object> map = new HashMap<String, Object>(); for (int i = 1; i <= columnCount; i++) { // 得到指定的列名的別名 String name = metaData.getColumnLabel(i); Object value = rs.getObject(i); map.put(name, value); } list.add(map); } } catch (Exception e) { e.printStackTrace(); } finally { JDBCUtil.close(conn, pstmt, rs); } return list; } }