JDBC元数据

以下摘自http://hi.baidu.com/lisiaccp/blog/item/901a15c30d3876130ef477da.html

想入侵别人的服务器的数据库修改数据吗?不知道别人服务器的数据库类型是不行的,JDBC中有一个获取数据库元数据的方法,可以获得数据库的相关信息。例:

Connection conn = JdbcUtils.getConnection();

DatabaseMetaData dbmd = conn.getMetaData();        //获得数据库元数据信息的对象

System.out.println(“数据库名:” + dbmd.getDatabaseProductName()); //比如打印出MYSQL

Systme.out.println(“是否支持事务处理:”+dbmd.supportsTransactions()); //比如打印出True

……        //还有很多方法,自己看IDE的提示

Conn.close();

 

还有些获取参数的原数据信息:

……

ParameterMetaData pmd = ps.getParameterMetaData(); //参数的元数据信息

 

例如Object[ ] params是通过外界方法调用传进来的,可以用

int count = pmd.getParameterCount(); 来获得传入参数的个数

 

//int index 是索引位,就是(?)占位符的位置

pmd.getParameterClassName( index ) //获得JAVA中的类型名,如打印出java.lang.String

pmd.getParameterType( index ) //获得类型号,比如打印出 12 ,代表VARCHAR类型

pmd.getParameterTypeName( index ) //获得数据库中的类型名,如打印出VARCHAR

这些方法需要依赖于数据库的JDBC是否支持,如MYSQL就不支持,都只会打印出VARCHAR类型的值
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
以 下摘自http://iiec.cqu.edu.cn/wiki/index.php?title=JDBC%E5%85%83%E6%95%B0%E6 %8D%AE%E7%9B%B8%E5%85%B3%E6%8E%A5%E5%8F%A3%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E&oldid=3861

JDBC元数据主要用到DatabaseMetaData、ResultSetMetaData这两个接口
一、interface DatabaseMetaData  此接口由驱动供应商实现,主要描述数据库的整体综合信息,让用户了解DBMS与驱动程序相结合时的能力。
1)  DatabaseMetaData的主要函数功能(对项目有用的)及代码实现(我是以MySQL为实例编写代码)

 (1)获取MySQL中包含数据库的名称,由下图可看出MySQL中有mysql(系统自带)、test(自己创建)两个数据库。         
主要代码: try{ //显示加载MySQL的驱动
 Class.forName("org.gjt.mm.mysql.Driver");
 }catch(Exception e){
 System.out.println("Class not find");
}
 try{
 String url="jdbc:mysql://localhost:3306/mysql";//数据源的名称
 String username="root"; //用户名
 String password="3511996"; //密码
//创建Connection对象连接数据库 Connection conn=DriverManager.getConnection(url, username, password);
//创建一个DatabaseMetaData对象 DatabaseMetaData dbmd=conn.getMetaData();
//获取可在MySQL中使用的数据库名称 ResultSet rCatalogs=dbmd.getCatalogs(); System.out.println("--------------"); System.out.println("获取可在此数据管理系统中使用的数据库名称: ");
//循环输出数据库名称
 while(rCatalogs.next()){
 System.out.println(rCatalogs.getString(1));
 }
 }catch(Exception e){
 System.out.println(e.getMessage());
 }
 控制台显示如图:
  (2)获取某一数据库(以mysql数据库为例如下图)下所有表的名称。         主要代码:
        //获取数据库mysql中表的名称           ResultSet r=dbmd.getTables("mysql",null,null,null);          System.out.println("--------------");         System.out.println("获取数据库中表的名称:"); //循环输出表的名称          while(r.next()){         System.out.println(r.getString(3));         }  控制台显示如图:     
  (3)获取某表的列名和对应的数据类型,如下图(以mysql数据库下func表)为例。        主要代码:
        //获取某表的列相关信息          ResultSet rColumns=dbmd.getColumns("mysql", null, "func", null);          System.out.println("--------------");          System.out.println("获取检索可在指定类别中使用的表列的描述:");          System.out.print("列名\t");          System.out.println("数据类型"); //循环输出列名和数据类型          while(rColumns.next()){              System.out.print(rColumns.getString(4)+"\t");              System.out.println(rColumns.getString(6));              } 控制台显示如图:    
  (4)获取指定表(以mysql数据库下func表为例)的主键,如下图显示name字段为func表的主键。         主要代码:
        //获取表的主键          ResultSet rPrimaryKey=dbmd.getPrimaryKeys("mysql", null, "func");         System.out.println("--------------");         System.out.println("获取指定表中的主键: ");  //循环输出指定表的主键          while(rPrimaryKey.next()){              System.out.println(rPrimaryKey.getString(4));                }    控制台显示如图:   

2)  总结和心得:

(1)该接口还能获取DBMS其他一些信息,如获取JDBC 驱动程序的主版本号,驱动程序,用户名等大家可以查阅Java API相应的文档,我就不一   一列举了。  (2)创建该接口时调用Connection的getMetaData()方法,学习该接口时,可以按API文档个试验每个函数,虽然比较土,但很有效。  (3)安装MySQL时要注意字符集的选择,否则插入记录时可能不能支持中文,如要支持,选择"gb2312"。 

你可能感兴趣的:(jdbc)