深入体验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数据库,它里面并没有对相应的方法进行封装所以有些方法虽然提供了但是在运行时取会报错。

 

这里只演示正确的效果:


好了,自己利用相关元数据对象去获取一些数据试试吧!


  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值