package com.aaa.util; import java.sql.*; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * JDBC工具類? * 一、增刪改的通用方法 * 二、查詢的通用方法 * 三、關閉的通用方法 */ public class DBUtil { static { try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public static Connection getConnection(){ try { return DriverManager.getConnection("jdbc:mysql://localhost:3306/qy66?characterEnconding=UTF-8", "root", "root"); } catch (SQLException e) { e.printStackTrace(); } return null; } /** 增刪改的通用方法 * @paramString sql 要執行的sql * @paramObject[] obj 對象類型的數組 里面存放着 sql執行的占位符參數 * 【name,age,id】 * 【id】 * 【name,age】 * Object... 可變參數 * */ public static boolean executeUpdate(String sql,Object... args){ Connection conn = null; PreparedStatement ps = null; try { conn = getConnection(); ps = conn.prepareStatement(sql); for (int i=0;i<args.length;i++){ ps.setObject(i+1,args[i]); } int i = ps.executeUpdate(); if (i>0)return true; } catch (SQLException e) { e.printStackTrace(); } finally { //關閉 close(conn,ps,null); } return false; } /** * c查詢的通用方法 * @param sql * @param args * @return */ public static List<Map<String,Object>> executeQuery(String sql,Object... args){ //可變參數 Object... args Connection conn = null; PreparedStatement ps = null; ResultSet set = null; try { conn = DBUtil.getConnection(); ps = conn.prepareStatement(sql); /* 有可能有參數 */ for (int i=0;i<args.length;i++){ ps.setObject(i+1,args[i]); } /*執行*/ set = ps.executeQuery(); /*需要將所有數據都存放到 List中 每一行 用一個 map存放*/ List<Map<String,Object>> list = new ArrayList<>(); /*獲取本次查詢結果集有多少列*/ int count = set.getMetaData().getColumnCount(); while(set.next()){ Map<String, Object> map = new HashMap<>();//一行數據 用一個map 接收 /* 我們不用在乎數據庫表中有幾列 通過 getMetData().getColumnLabel() 獲取列 因為用的map鍵值對集合 得到了列 就能得到相應的values值 */ for(int i=0;i<count;i++){ String name = set.getMetaData().getColumnLabel(i+1); map.put(name,set.getObject(name)); } /*將每行的map存放到 List中*/ list.add(map); } return list; } catch (Exception e) { e.printStackTrace(); }finally { close(conn,ps,set); } return null; } /** 關閉的通用方法 * 先進后出的原則 * */ private static void close(Connection conn,PreparedStatement st,ResultSet set){ try { if(set!=null){ set.close(); } if(st!=null){ st.close(); } if(conn != null){ conn.close(); } }catch (Exception e){ e.printStackTrace(); } } }