功能:

  1. 可获得数据库相关信息

 

说明:

  1. Java使用DatabaseMetaData来获取数据库相关信息
  2. 本文为了代码结构清晰 采用的是try-with-resource结构,请在java7下使用(或者自己改成传统模式)
  3. 具体使用请看例子

 

部分API:

返回类型方法名称说明
StringgetDatabaseProductName()获得数据库产品的名称
StringgetDatabaseProductVersion()获得数据库产品的版本
StringgetDriverVersion()获得JDBC驱动的版本号
StringgetURL()获得当前数据连接的URL
booleanisReadOnly()当前数据连接的数据库是否是只读模式
booleansupportsBatchUpdates()数据库是否支持批量操作
booleansupportsResultSetType(int type)数据库是否支持给定结果集类型
ResultSetgetTables(String catalog,
String schemaPattern,
String tableNamePattern,
String[] types)
简单的讲就是获得数据表的相关信息
ResultSetgetPrimaryKeys(String catalog,
String schema,
String table)
获得某表的主键
ResultSetgetColumns(String catalog,
String schemaPattern,
String tableNamePattern,
String columnNamePattern)
获得某表字段信息

 

程序演示: 放大

  1. package com.cxy.jdbc;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.DatabaseMetaData;  
  5. import java.sql.DriverManager;  
  6. import java.sql.ResultSet;  
  7. import java.sql.SQLException;  
  8.   
  9. /** 
  10.  * @author cxy @ www.cxyapi.com 
  11.  */  
  12. public class DatabaseMetaDataTest  
  13. {  
  14.     public static void main(String[] args) throws Exception  
  15.     {  
  16.         Class.forName("com.mysql.jdbc.Driver");  
  17.         try  
  18.         (  
  19.             Connection con=DriverManager.getConnection("jdbc:mysql://localhost/dbtest""root""root");  
  20.         )  
  21.         {  
  22.             DatabaseMetaData dmd=con.getMetaData();  
  23.             System.out.println("当前数据库是:"+dmd.getDatabaseProductName());  
  24.             System.out.println("当前数据库版本:"+dmd.getDatabaseProductVersion());  
  25.             System.out.println("当前数据库驱动:"+dmd.getDriverVersion());  
  26.             System.out.println("当前数据库URL:"+dmd.getURL());  
  27.             System.out.println("当前数据库是否是只读模式?:"+dmd.isReadOnly());  
  28.             System.out.println("当前数据库是否支持批量更新?:"+dmd.supportsBatchUpdates());  
  29.             System.out.println("当前数据库是否支持结果集的双向移动(数据库数据变动不在ResultSet体现)?:"+dmd.supportsResultSetType(ResultSet.TYPE_SCROLL_INSENSITIVE));  
  30.             System.out.println("当前数据库是否支持结果集的双向移动(数据库数据变动会影响到ResultSet的内容)?:"+dmd.supportsResultSetType(ResultSet.TYPE_SCROLL_SENSITIVE));  
  31.             System.out.println("========================================");  
  32.               
  33.             ResultSet rs=dmd.getTables(nullnull"%"null);  
  34.             System.out.println("表名"+","+"表类型");  
  35.             while(rs.next())  
  36.             {  
  37.                 System.out.println(rs.getString("TABLE_NAME")+","+rs.getString("TABLE_TYPE"));  
  38.             }  
  39.             System.out.println("========================================");  
  40.               
  41.             rs=dmd.getPrimaryKeys(nullnull"t_student");  
  42.             while(rs.next())  
  43.             {  
  44.                 System.out.println(rs.getString(3)+"表的主键是:"+rs.getString(4));  
  45.             }  
  46.             System.out.println("========================================");  
  47.               
  48.             rs=dmd.getColumns(nullnull"t_student","%");  
  49.             System.out.println("t_student表包含的字段:");  
  50.             while(rs.next())  
  51.             {  
  52.                 System.out.println(rs.getString(4)+" "+rs.getString(6)+"("+rs.getString(7)+");");  
  53.             }  
  54.             System.out.println("========================================");  
  55.               
  56.         }catch(SQLException e)  
  57.         {  
  58.             System.out.println("数据库操作出现异常");  
  59.         }  
  60.     }  
  61.   
  62. }