MetaData中繼資料

來源:互聯網
上載者:User

標籤:style   blog   color   io   os   ar   使用   java   for   

一、基礎

    定義:資料庫、表、列相關資訊的描述。
    何時使用:想取得對資料庫的資訊時使用。
    一】資料庫中繼資料——通過DataBaseMetaData
            DataBaseMetaData dbmd = conn.getDataBaseMetaData();
        code:

           Connection conn = C3P0Utils.getMySqlConnection();            //取得資料庫中繼資料 ———— DatabaseMetaData            DatabaseMetaData dbmd = conn.getMetaData();            String driver = dbmd.getDriverName();            System.out.println("driverName : " + driver);//MySQL-AB JDBC Driver            String url = dbmd.getURL();            System.out.println("url : " + url);//jdbc:mysql://127.0.0.1:3306/jdbc            int level = dbmd.getDefaultTransactionIsolation();//得到事務層級,值所對應的層級可有Connectin類的欄位值來查看            System.out.println("level : " + level);//2            String productName = dbmd.getDatabaseProductName();            System.out.println("productName : " + productName);//MySQL    

 


    二】參數中繼資料——通過ParameterMetaData
            ParameterMetaData pmd = pstmt.getParameterMetaData;
        code:

           Connection conn = C3P0Utils.getMySqlConnection();            PreparedStatement pstmt = conn.prepareStatement(SqlMapping.QUERY_INF);//SELECT * FROM jdbc.test_batch WHERE id = ?            //得到參數中繼資料            ParameterMetaData pmd = pstmt.getParameterMetaData();            int cnt = pmd.getParameterCount();            System.out.println("共有" + cnt + "個參數");//公有的參數,即為SQL語句中的 ?  的個數,這裡為1個

 

 


    三】結果集資料元——通過ResultSetMetaData
            ResultSetMetaData rsmd = rs.getMetaData();
        code:

            String SQL = " SELECT * FROM jdbc.test_batch ";            Connection conn = C3P0Utils.getMySqlConnection();            PreparedStatement pstmt = conn.prepareStatement(SQL);            ResultSet rs = pstmt.executeQuery();            ResultSetMetaData rsmd = rs.getMetaData();            int cnt = rsmd.getColumnCount();// 結果集的個數            for (int i = 1; i <= cnt; i++) {                String colName = rsmd.getColumnName(i);//取得每列的名字                System.out.println("colName = " + colName);//colName = id colName = name colName = age            }

   
    總結:
        核心規律如下:
         ResultSetMetaData ResultSet.getMetaData();
         ParameterMetaData psmt.getMetaData();
         DataBaseMetaData conn.getMetaData();

 

二、使用MetaData中繼資料最佳化CUD操作和R操作(封裝成工具方便使用)
    一】CUD操作
        code:

        // CUD操作        public static int update(String sql, Object[] params) throws SQLException {            Connection conn = C3P0Utils.getMySqlConnection();            PreparedStatement pstmt = conn.prepareStatement(sql);// INSERT INTO meta.user(username,salary) VALUES(?, ?)            // 取得參數中繼資料            ParameterMetaData pmd = pstmt.getParameterMetaData();            // 取得參數個數            int size = pmd.getParameterCount();            // 迴圈綁定對象的值            for (int i = 0; i < size; i++) {                pstmt.setObject(i + 1, params[i]);            }            int rows = pstmt.executeUpdate();            C3P0Utils.close(conn);            return rows;        }    

 


    二】R操作
        code:

        //R操作(要求:javaBean的名稱必須要和資料庫欄位的名稱相同)        public static <T> List<T> query(String sql, Object[] params, Class clazz) throws SQLException, InstantiationException, IllegalAccessException, InvocationTargetException {            Connection conn = C3P0Utils.getMySqlConnection();            List<T> list = new ArrayList<T>();                        PreparedStatement pstmt = conn.prepareStatement(sql);//SELECT * FROM meta.user WHERE id = ?            ParameterMetaData pmd = pstmt.getParameterMetaData();            int cnt = pmd.getParameterCount();            for(int i = 0; i < cnt; i++) {                pstmt.setObject(i+1, params[i]);            }            ResultSet rs = pstmt.executeQuery();                        while (rs.next()) {                ResultSetMetaData rsmd = rs.getMetaData();                int column = rsmd.getColumnCount();                T t = (T) clazz.newInstance();                for (int i = 0; i < column; i++) {                    String colName = rsmd.getColumnName(i+1);                    BeanUtils.setProperty(t, colName, rs.getObject(colName));                }                list.add(t);            }
    
            C3P0Utils.closeAll(conn, pstmt, rs);
            
            return list;
        }

 

 


     

 

MetaData中繼資料

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.