通过JDBC的DatabaseMetaData获取数据库元数据

1.      在项目src目录下创建jdbc.properties文件

内容:

dbName=JMJL

className=oracle.jdbc.driver.OracleDriver

url=jdbc:oracle:thin:@168.9.202.49:1521:test

user=TEST

password=TEST


2.      写一个jdbc处理通用的简单处理工具类JdbcByPropertiesUtil 

参照《JDBC获取连接、关闭连接的简单工具类2》,

地址:http://blog.youkuaiyun.com/hu_shengyang/article/details/7861187


3.      下面就是一段获取数据库元数据的示例代码:

[java]  view plain copy
  1. package com.adam.test.entity;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.DatabaseMetaData;  
  5. import java.sql.ResultSet;  
  6. import java.sql.SQLException;  
  7. import java.util.ArrayList;  
  8. import java.util.HashMap;  
  9. import java.util.List;  
  10. import java.util.Map;  
  11. import java.util.Properties;  
  12.   
  13. import com.adam.dev.utils.JdbcByPropertiesUtil;  
  14.   
  15. public class TestDatabaseMetaData {  
  16.     private JdbcByPropertiesUtil jbpu = JdbcByPropertiesUtil.getInstance();  
  17.       
  18.     public JdbcByPropertiesUtil getJbpu() {  
  19.         return jbpu;  
  20.     }  
  21.       
  22.     public void setJbpu(JdbcByPropertiesUtil jbpu){  
  23.         this.jbpu = jbpu;  
  24.     }  
  25.       
  26.     public Properties getProperties(){  
  27.         Properties pros = JdbcByPropertiesUtil.readPropertiesFile();  
  28.         return pros;  
  29.     }  
  30.   
  31.     /** 
  32.      * 读取配置文件jdbc.properties中的数据库名称 
  33.      * @return 
  34.      * @throws Exception 
  35.      */  
  36.     public String getDataSourceName()throws Exception{  
  37.         Properties pros = this.getProperties();  
  38.         String dbName = pros.get("dbName").toString();  
  39.         return dbName;  
  40.     }  
  41.       
  42.     /** 
  43.      * 获取数据库中的表名称与视图名称 
  44.      * @return 
  45.      */  
  46.     public List getTablesAndViews()throws Exception{  
  47.         Connection conn = jbpu.getConnection();  
  48.         ResultSet rs = null;  
  49.         List list = new ArrayList();  
  50.         try {  
  51.             Properties pros = this.getProperties();  
  52.             String schema = pros.get("user").toString();  
  53.             DatabaseMetaData metaData = conn.getMetaData();  
  54.             rs = metaData.getTables(null, schema, nullnew String[]{"TABLE","VIEW"});  
  55.             while(rs.next()){  
  56.                 String tableName = rs.getString("TABLE_NAME");  
  57.                 list.add(tableName);  
  58.             }  
  59.         } catch (SQLException e) {  
  60.             e.printStackTrace();  
  61.         } finally{  
  62.             jbpu.close(rs, null, conn);  
  63.         }  
  64.         return list;  
  65.     }  
  66.       
  67.     /** 
  68.      * 利用表名和数据库用户名查询出该表对应的字段类型 
  69.      * @param tableName 表名 
  70.      * @return 
  71.      * @throws Exception 
  72.      */  
  73.     public String generateBean()throws Exception{  
  74.         Connection conn = jbpu.getConnection();  
  75.         ResultSet rs = null;  
  76.         String strJavaBean = "";  
  77.         String tableName = this.getDataSourceName();  
  78.         try{  
  79.             Properties pros = this.getProperties();  
  80.             String schema = pros.get("user").toString();  
  81.             DatabaseMetaData metaData = conn.getMetaData();  
  82.             rs = metaData.getColumns(null, schema, tableName, null);  
  83.             Map map = new HashMap();  
  84.             while(rs.next()){  
  85.                 String columnName = rs.getString("COLUMN_NAME");//列名  
  86.                 String dataType  = rs.getString("DATA_TYPE");//字段数据类型(对应java.sql.Types中的常量)  
  87.                 String typeName = rs.getString("TYPE_NAME");//字段类型名称(例如:VACHAR2)  
  88.                 map.put(columnName, dataType+":"+typeName);  
  89.             }  
  90.               
  91.             // 其它生成javaBean的相关操作  
  92.               
  93.         }catch(Exception e){  
  94.             e.printStackTrace();  
  95.         }finally{  
  96.             jbpu.close(rs, null, conn);  
  97.         }  
  98.         return strJavaBean;  
  99.     }  
  100.       
  101. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值