在使用JDBC的时候有时我们对关于数据库的一些信息并不清楚,但是还要进行相应的操作,那么我们如何进行操作呢?这时我们就需要使用一些元数据进行相应信息的获取。
这里我们主要介绍三大元数据DataBaseMetaData、ParameterMetaData、ResultSetMetaData 它们分别有自己的作用,下面分别来看:
元数据:在改元数据中定义了一些关于数据库、表、列的信息。我们可以通过相应的方法进行获取。
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(); } } }
效果:
该元数据中主要是包含了一些参数的信息:
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数据库,它里面并没有对相应的方法进行封装所以有些方法虽然提供了但是在运行时取会报错。
如:
该元数据中保存了一些关于数据查询结果的相关信息。
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数据库,它里面并没有对相应的方法进行封装所以有些方法虽然提供了但是在运行时取会报错。
这里只演示正确的效果:
好了,自己利用相关元数据对象去获取一些数据试试吧!