ECM
ECM
总版主
总版主
  • 社区居民
  • 忠实会员
  • 原创写手
阅读:837回复:0

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

楼主#
更多 发布于:2016-07-30 00:01
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.csdn.net/hu_shengyang/article/details/7861187


3.      下面就是一段获取数据库元数据的示例代码:
[java] view plaincopy
package com.adam.test.entity;  
  
import java.sql.Connection;  
import java.sql.DatabaseMetaData;  
import java.sql.ResultSet;  
import java.sql.SQLException;  
import java.util.ArrayList;  
import java.util.HashMap;  
import java.util.List;  
import java.util.Map;  
import java.util.Properties;  
  
import com.adam.dev.utils.JdbcByPropertiesUtil;  
  
public class TestDatabaseMetaData {  
    private JdbcByPropertiesUtil jbpu = JdbcByPropertiesUtil.getInstance();  
      
    public JdbcByPropertiesUtil getJbpu() {  
        return jbpu;  
    }  
      
    public void setJbpu(JdbcByPropertiesUtil jbpu){  
        this.jbpu = jbpu;  
    }  
      
    public Properties getProperties(){  
        Properties pros = JdbcByPropertiesUtil.readPropertiesFile();  
        return pros;  
    }  
  
    /**
     * 读取配置文件jdbc.properties中的数据库名称
     * @return
     * @throws Exception
     */  
    public String getDataSourceName()throws Exception{  
        Properties pros = this.getProperties();  
        String dbName = pros.get("dbName").toString();  
        return dbName;  
    }  
      
    /**
     * 获取数据库中的表名称与视图名称
     * @return
     */  
    public List getTablesAndViews()throws Exception{  
        Connection conn = jbpu.getConnection();  
        ResultSet rs = null;  
        List list = new ArrayList();  
        try {  
            Properties pros = this.getProperties();  
            String schema = pros.get("user").toString();  
            DatabaseMetaData metaData = conn.getMetaData();  
            rs = metaData.getTables(null, schema, null, new String[]{"TABLE","VIEW"});  
            while(rs.next()){  
                String tableName = rs.getString("TABLE_NAME");  
                list.add(tableName);  
            }  
        } catch (SQLException e) {  
            e.printStackTrace();  
        } finally{  
            jbpu.close(rs, null, conn);  
        }  
        return list;  
    }  
      
    /**
     * 利用表名和数据库用户名查询出该表对应的字段类型
     * @param tableName 表名
     * @return
     * @throws Exception
     */  
    public String generateBean()throws Exception{  
        Connection conn = jbpu.getConnection();  
        ResultSet rs = null;  
        String strJavaBean = "";  
        String tableName = this.getDataSourceName();  
        try{  
            Properties pros = this.getProperties();  
            String schema = pros.get("user").toString();  
            DatabaseMetaData metaData = conn.getMetaData();  
            rs = metaData.getColumns(null, schema, tableName, null);  
            Map map = new HashMap();  
            while(rs.next()){  
                String columnName = rs.getString("COLUMN_NAME");//列名  
                String dataType  = rs.getString("DATA_TYPE");//字段数据类型(对应java.sql.Types中的常量)  
                String typeName = rs.getString("TYPE_NAME");//字段类型名称(例如:VACHAR2)  
                map.put(columnName, dataType+":"+typeName);  
            }  
              
            // 其它生成javaBean的相关操作  
              
        }catch(Exception e){  
            e.printStackTrace();  
        }finally{  
            jbpu.close(rs, null, conn);  
        }  
        return strJavaBean;  
    }  
      
}

 

 

 

 

 

 

 

异常中心网是一家专门收集整理程序员编程过程中遇到的常见异常(exception)以及各种异常问答中心的网站。异常中心网旨在,减少程序员在编码遇到异常,处理各种异常时间和痛苦,让程序员能更愉快的、快速的定位异常并查找对应的异常解决方案。异常中心网诚心打造最完美的编程社区为程序员用户服务,努力成为最好的程序员乐园程序员社区程序异常中心程序bug中心异常问答中心

 

喜欢0 评分0
游客

返回顶部