1. 程式人生 > >深入體驗JavaWeb開發內幕——JDBC中的三大元資料

深入體驗JavaWeb開發內幕——JDBC中的三大元資料

     在使用JDBC的時候有時我們對關於資料庫的一些資訊並不清楚,但是還要進行相應的操作,那麼我們如何進行操作呢?這時我們就需要使用一些元資料進行相應資訊的獲取。

這裡我們主要介紹三大元資料DataBaseMetaData、ParameterMetaData、ResultSetMetaData 它們分別有自己的作用,下面分別來看:

一、       元資料- DataBaseMetaData

元資料:在改元資料中定義了一些關於資料庫、表、列的資訊。我們可以通過相應的方法進行獲取。

獲取元資料物件

Connection.getDatabaseMetaData()

 相關方法:

DataBaseMetaData物件

•        getURL():返回一個String類物件,代表資料庫的URL。

•        getUserName():返回連線當前資料庫管理系統的使用者名稱。

•        getDatabaseProductName():返回資料庫的產品名稱。

•        getDatabaseProductVersion():返回資料庫的版本號。

•        getDriverName():返回驅動驅動程式的名稱。

•        getDriverVersion():返回驅動程式的版本號。

•        isReadOnly():返回一個boolean值,指示資料庫是否只允許讀操作。

例項:

publicclass DataBaseMetaData {

   static Connection con = null;

  publicstaticvoid main(String[] args) {

     try {

    //注:這裡的C3p0.getConnection()是我使用C3P0的連//接池獲取連線物件

     con = C3p0.getConnection();

     DatabaseMetaData dmeta = (DatabaseMetaData)con.getMetaData();

     String dpName =dmeta.getDatabaseProductName();

     String dpVersion=dmeta.getDatabaseProductVersion();

     String dName = dmeta.getDriverName();

     String dVersion =dmeta.getDriverVersion();

     String url = dmeta.getURL();

     String username = dmeta.getUserName();

         

     System.out.println( dpName);

     System.out.println(dpVersion );

     System.out.println(dName );

     System.out.println(dVersion );

     System.out.println(url );

     System.out.println(username );

   } catch (Exception e) {

     e.printStackTrace();

   }

}

}


效果:


二、       元資料ParameterMetaData

該元資料中主要是包含了一些引數的資訊:

獲取元資料物件:

 PreparedStatement . getParameterMetaData()

•        獲得代表PreparedStatement元資料的ParameterMetaData物件。

•        Select * from user where name=?And password=?

  相關方法:

ParameterMetaData物件

•        getParameterCount()

•        獲得指定引數的個數

•        getParameterType(int param)

•        獲得指定引數的sql型別

例項:

publicclass ParameterMetaData {

 

   static Connection con = null;

   static java.sql.PreparedStatement ps = null;

     publicstaticvoid main(String[] args) {

       try {

//注:這裡的C3p0.getConnection()是我使用C3P0的連//接池獲取連線物件

        con = C3p0.getConnection();

        String sql = "select * from user whereid=?,username=?,password=?";

        ps = con.prepareStatement(sql);

        ps.setInt(1, 1);

        ps.setString(2, "lijizh");

        ps.setString(3, "lijizh1991");

  

        java.sql.ParameterMetaDatapmeta = ps.getParameterMetaData();

          int pcount =pmeta.getParameterCount();

       StringpcName =null;

            int pMode=0;

           int pType=0;

           String ptName=null;

        int prec =0;

         

            for(int i=0;i<=pcount;i++){

             pcName= pmeta.getParameterClassName(i);

            System.out.println(pmeta.getParameterMode(i+1));

            pType = pmeta.getParameterType(i);

            ptName = pmeta.getParameterTypeName(i+1);

             prec =pmeta.getPrecision(i+1);

            }

          System.out.println(pcount);

            System.out.println(pcName);

            System.out.println(pMode);

            System.out.println(pType);

            System.out.println(ptName);

            System.out.println(prec);

   }catch(Exception e){

     e.printStackTrace();

   }

}

}

這裡由於使用的MySQL資料庫,它裡面並沒有對相應的方法進行封裝所以有些方法雖然提供了但是在執行時取會報錯。

如:

   

三、       元資料- ResultSetMetaData

  該元資料中儲存了一些關於資料查詢結果的相關資訊。

獲取元資料物件:

 ResultSet. getMetaData()

•        獲得代表ResultSet物件元資料的ResultSetMetaData物件。

相關方法:

ResultSetMetaData物件

•        getColumnCount()

•        返回resultset物件的列數

•        getColumnName(int column)

•        獲得指定列的名稱

•         getColumnTypeName(int column)

•        獲得指定列的型別

例項:

publicclass ResultSetMetaData {

   static Connection con = null;

   static PreparedStatementps = null;

   static ResultSet rs = null;

     publicstaticvoid main(String[] args){

       try {

//注:這裡的C3p0.getConnection()是我使用C3P0的連//接池獲取連線物件

          con = C3p0.getConnection();

         String sql = "select *from user where id=1";

          ps = con.prepareStatement(sql);

           rs = ps.executeQuery();

          java.sql.ResultSetMetaData rsmeta = rs.getMetaData();

         int cc = rsmeta.getColumnCount();

         String ccName =null;

         String cName=null;

         String tName=null;

         for(int i=0;i<cc;i++){

           ccName = rsmeta.getColumnClassName(i+1);

           cName= rsmeta.getColumnName(i+1);

           tName=rsmeta.getTableName(i+1);

         

         }

         System.out.println(cc);

         System.out.println(ccName);

         System.out.println(cName);

         System.out.println(tName);

         

    

      } catch (Exception e) {

          e.printStackTrace();

        }

   }

}


這裡由於使用的MySQL資料庫,它裡面並沒有對相應的方法進行封裝所以有些方法雖然提供了但是在執行時取會報錯。

這裡只演示正確的效果:


好了,自己利用相關元資料物件去獲取一些資料試試吧!