JavaEE之元資料
阿新 • • 發佈:2019-01-03
元資料
什麼是元資料?
一、資料庫相關的資訊:(封裝到資料庫元物件: DataBaseMetaData)
資料庫的版本
驅動程式的版本
二、引數相關的資訊:(封裝到引數元物件:ParameterMetaData)
引數數量
引數型別
三、結果相關的資訊:(封裝到結果集元物件: ResultSetMetaData)
列數量
列名稱
jdbc步驟:
1)連線資料庫,獲取Connection物件 (得到DataBaseMetaData)
2)建立Statment,預編譯sql語句 (得到ParameterMetaData)
3)設定引數
4)執行sql,返回結果集 (得到ResultSetMetaData)
5)遍歷結果集
6)關閉連線
練習:
抽取兩個通用的jdbc方法
1)通用的修改方法(insert、update、delete)
update() 用於任何表的任何更新操作
2)通用的查詢方法,查詢後返回List集合
find() 無論查詢什麼表,都能返回我們需要的List集合
提示:使用元資料
/** * jdbc的工具方法 * @author APPle * */ public class DBUtil { private static ComboPooledDataSource ds = new ComboPooledDataSource(); /** * 通用的更新方法 * 不同更新操作的不同點: * 1)sql語句不同 * 2)引數列表不同 */ public static void update(String sql,Object[] values){ Connection conn = null; PreparedStatement stmt = null; try { //獲取連線 conn = ds.getConnection(); //預編譯sql stmt = conn.prepareStatement(sql); //設定引數 ParameterMetaData md = stmt.getParameterMetaData(); //得到引數數量 int count = md.getParameterCount(); if(values!=null){ for(int i=1;i<=count;i++){ stmt.setObject(i, values[i-1]); } } //執行sql stmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } finally{ if(stmt!=null) try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } if(conn!=null) try { conn.close(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } } } /** * 通用的查詢方法 * 不同點: * 1)sql語句不同 * 2)引數不同 * 3)List集合中的物件不同 */ public static List find(String sql,Object[] values,Class clazz){ Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; List list = new ArrayList(); try { //獲取連線 conn = ds.getConnection(); //預編譯sql stmt = conn.prepareStatement(sql); //設定引數 ParameterMetaData md = stmt.getParameterMetaData(); int count = md.getParameterCount(); if(values!=null){ for(int i=1;i<=count;i++){ stmt.setObject(i, values[i-1]); } } //執行sql rs = stmt.executeQuery(); //得到結果集的元資料 ResultSetMetaData rsmd = rs.getMetaData(); //得到列資料 int columnCount = rsmd.getColumnCount(); //遍歷結果集 while(rs.next()){ //建立一個javabean物件 Object obj = clazz.newInstance(); //把每行的結果放入javabean物件 //遍歷每列 for(int i=1;i<=columnCount;i++){ //得到列名稱 String columnName = rsmd.getColumnName(i); //得到列內容 Object value = rs.getObject(columnName); //把列內容賦值給javabean /** * 約定前提: 資料庫表的欄位名稱和javabean的屬性名稱保持一致!!!! */ BeanUtils.copyProperty(obj, columnName, value); } //把javabean放入list集合 list.add(obj); } return list; } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } finally{ if(stmt!=null) try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } if(conn!=null) try { conn.close(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } } } }