Java获取DB元数据
来源:互联网 发布:权知其意执肃手曰翻译 编辑:程序博客网 时间:2024/05/21 10:13
原文:http://jiauwu.iteye.com/blog/1307617
点击(此处)折叠或打开
- package com.util.jdbc;
-
- import java.sql.Connection;
- import java.sql.Driver;
- import java.sql.DriverManager;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.ResultSetMetaData;
- import java.sql.SQLException;
- import java.util.Enumeration;
-
- import org.apache.log4j.Logger;
-
- /**
- * @author ken
- * @Time 2011-12-10
- * SQL API 学习
- */
- public class JDBCMsg {
-
- private static Logger log = Logger.getLogger(JDBCMsg.class);
-
- public static void main(String[] args) throws SQLException {
- //rs connection 未关闭
- //getAllDriverMsg();
- //getDBParameterMetaData();
- demoDB();
- }
-
- /**
- * 取一个数据库中所有表的信息
- * @throws SQLException
- */
- public static void demoDB() throws SQLException{
- Connection conn = JDBCUtil.getConnection();
- log.info("###### DatabaseMetaData关于数据库的整体综合信息====");
- java.sql.DatabaseMetaData dbmd = conn.getMetaData();
-
- log.info("数据库产品名: " + dbmd.getDatabaseProductName());
- log.info("数据库是否支持事务: " + dbmd.supportsTransactions());
- log.info("数据库产品的版本号:"+dbmd.getDatabaseProductVersion());
- log.info("数据库的默认事务隔离级别:"+dbmd.getDefaultTransactionIsolation());
- log.info("支持批量更新:"+dbmd.supportsBatchUpdates());
- log.info("DBMS 的 URL:"+dbmd.getURL());
- log.info("数据库的已知的用户名称:"+dbmd.getUserName());
- log.info("数据库是否处于只读模式:"+dbmd.isReadOnly());
- log.info("数据库是否支持为列提供别名:"+dbmd.supportsColumnAliasing());
- log.info("是否支持指定 LIKE 转义子句:"+dbmd.supportsLikeEscapeClause());
- log.info("是否为外连接提供受限制的支持:"+dbmd.supportsLimitedOuterJoins());
- log.info("是否允许一次打开多个事务:"+dbmd.supportsMultipleTransactions());
- log.info("是否支持 EXISTS 表达式中的子查询:"+dbmd.supportsSubqueriesInExists());
- log.info("是否支持 IN 表达式中的子查询:"+dbmd.supportsSubqueriesInIns());
- log.info("是否支持给定事务隔离级别:"+dbmd.supportsTransactionIsolationLevel(1));
- log.info("此数据库是否支持事务:"+dbmd.supportsTransactions());
- log.info("此数据库是否支持 SQL UNION:"+dbmd.supportsUnion());
- log.info("此数据库是否支持 SQL UNION ALL:"+dbmd.supportsUnionAll());
- log.info("此数据库是否为每个表使用一个文件:"+dbmd.usesLocalFilePerTable());
- log.info("此数据库是否将表存储在本地文件中:"+dbmd.usesLocalFiles());
- log.info("底层数据库的主版本号:"+dbmd.getDatabaseMajorVersion());
- log.info("底层数据库的次版本号:"+dbmd.getDatabaseMinorVersion());
-
- log.info("JDBC 驱动程序的主版本号:"+dbmd.getJDBCMajorVersion());
- log.info("JDBC 驱动程序的次版本号:"+dbmd.getJDBCMinorVersion());
- log.info("JDBC 驱动程序的名称:"+dbmd.getDriverName());
- log.info("JDBC 驱动程序的 String 形式的版本号:"+dbmd.getDriverVersion());
-
- log.info("可以在不带引号的标识符名称中使用的所有“额外”字符:"+dbmd.getExtraNameCharacters());
- log.info("用于引用 SQL 标识符的字符串:"+dbmd.getIdentifierQuoteString());
- log.info("允许用于类别名称的最大字符数:"+dbmd.getMaxCatalogNameLength());
- log.info("允许用于列名称的最大字符数:"+dbmd.getMaxColumnNameLength());
- log.info("允许在 GROUP BY 子句中使用的最大列数:"+dbmd.getMaxColumnsInGroupBy());
- log.info("允许在 SELECT 列表中使用的最大列数:"+dbmd.getMaxColumnsInSelect());
- log.info("允许在表中使用的最大列数:"+dbmd.getMaxColumnsInTable());
- log.info("数据库的并发连接的可能最大数:"+dbmd.getMaxConnections());
- log.info("允许用于游标名称的最大字符数:"+dbmd.getMaxCursorNameLength());
- log.info("在同一时间内可处于开放状态的最大活动语句数:"+dbmd.getMaxStatements());
-
- //获取所有表 new String[]{"TABLE"}
- //String[] type = {"TABLE","VIEW"} null
- log.info("###### 获取表的信息");
- ResultSet tSet = dbmd.getTables(null, "%", "%", new String[]{"TABLE","VIEW"});
- while (tSet.next()) {
- log.info(tSet.getRow()+"_表类别:"+tSet.getString("TABLE_CAT")+"_表模式:"+tSet.getString("TABLE_SCHEM")
- +"_表名称:"+tSet.getString("TABLE_NAME")+"_表类型:"+tSet.getString("TABLE_TYPE")
- //+"\n_表的解释性注释:"+tSet.getString("REMARKS")+"_类型的类别:"+tSet.getString("TYPE_CAT")
- //+"\n_类型模式:"+tSet.getString("TYPE_SCHEM")+"_类型名称:"+tSet.getString("TYPE_NAME")
- //+"\n_有类型表的指定'identifier'列的名称:"+tSet.getString("SELF_REFERENCING_COL_NAME")
- //+"\n_指定在 SELF_REFERENCING_COL_NAME 中创建值的方式:"+tSet.getString("REF_GENERATION")
- );
- //2_表类别:MANOR_表模式:PUBLIC_表名称:SYS_RESOURCE_表类型:TABLE
- String tableName = tSet.getString(3);
- String sql = "select * from " + tableName;
- ResultSet rsSet = conn.createStatement().executeQuery(sql);
- ResultSetMetaData rsData = rsSet.getMetaData();
- for (int i = 1; i <= rsData.getColumnCount(); i++) {
- log.info("==列的信息:获取SQL语句的列名:"+rsData.getColumnName(i)+"("+rsData.getColumnLabel(i)+","+rsData.getColumnType(i)+","+rsData.getColumnClassName(i)+")"
- +" 列宽"+rsData.getPrecision(i)+" 大小写敏感"+rsData.isCaseSensitive(i)+" isReadOnly:"+rsData.isReadOnly(i));
- //==列的信息:获取SQL语句的列名:LIMITLEVER(LIMITLEVER,5,java.lang.Short) 列宽5 大小写敏感true isReadOnly:false
- }
-
- }
- tSet.close();
-
- log.info("###### 获取当前数据库所支持的SQL数据类型");
- ResultSet tableType = dbmd.getTypeInfo();
- while(tableType.next()){
- log.info("数据类型名:"+tableType.getString(1)
- +",短整型的数:"+tableType.getString(2)
- +",整型的数:"+tableType.getString(3)
- +",最小精度:"+tableType.getString(14)
- +",最大精度:"+tableType.getString(15));
- //数据类型名:TIMESTAMP,短整型的数:93,整型的数:23,最小精度:0,最大精度:10
- //数据类型名:VARCHAR,短整型的数:12,整型的数:2147483647,最小精度:0,最大精度:0
- }
-
- log.info("###### 表的主键列信息");
- ResultSet primaryKey = dbmd.getPrimaryKeys("MANOR","PUBLIC","SYS_ROLE_RES");
- while(primaryKey.next()){
- log.info("表名:"+primaryKey.getString("TABLE_NAME")+",列名:"+primaryKey.getString("COLUMN_NAME")
- +" 主键名:"+primaryKey.getString("PK_NAME"));
- //表名:SYS_ROLE_RES,列名:SYS_RES_ID 主键名:CONSTRAINT_9
- //表名:SYS_ROLE_RES,列名:SYS_ROLE_ID 主键名:CONSTRAINT_9
- }
-
- log.info("###### 表的外键列信息");
- ResultSet foreinKey = dbmd.getImportedKeys("MANOR","PUBLIC","SYS_ROLE_RES");
- while(foreinKey.next()){
- log.info("主键名:"+foreinKey.getString("PK_NAME")+",外键名:"+foreinKey.getString("FKCOLUMN_NAME")
- +",主键表名:"+foreinKey.getString("PKTABLE_NAME")+",外键表名:"+foreinKey.getString("FKTABLE_NAME")
- +",外键列名:"+foreinKey.getString("PKCOLUMN_NAME")+",外键序号:"+foreinKey.getString("KEY_SEQ"));
- //主键名:PRIMARY_KEY_95,外键名:SYS_RES_ID,主键表名:SYS_RESOURCE,外键表名:SYS_ROLE_RES,外键列名:ID,外键序号:1
- //主键名:PRIMARY_KEY_A,外键名:SYS_ROLE_ID,主键表名:SYS_ROLE,外键表名:SYS_ROLE_RES,外键列名:ID,外键序号:1
- }
-
- log.info("###### 获取数据库中允许存在的表类型");
- ResultSet tableTypes = dbmd.getTableTypes();
- while(tableTypes.next()){
- log.info("类型名:"+tableTypes.getString(1));
- /** H2
- 类型名:SYSTEM TABLE
- 类型名:TABLE
- 类型名:TABLE LINK
- 类型名:VIEW
- */
- }
-
- //此外还可以获取索引等的信息
- conn.close();
- }
-
- /**
- * PreparedStatement 信息
- * ResultSetMetaData 信息
- * @throws SQLException
- */
- public static void getDBParameterMetaData() throws SQLException{
- Connection conn = JDBCUtil.getConnection(); //id,name
- PreparedStatement pre = conn.prepareStatement("SELECT * FROM SYS_APPTYPE where id = ?");
- pre.setInt(1, 3);
- java.sql.ParameterMetaData pmd = pre.getParameterMetaData();
- log.info("参数的个数:"+pmd.getParameterCount());
- log.info("获取指定参数的 SQL 类型:"+pmd.getParameterType(1));
- log.info("culomn的参数类型:"+pmd.getParameterTypeName(1));
- log.info("Java 类的完全限定名称:"+pmd.getParameterClassName(1));
- log.info("获取指定参数的模式:"+pmd.getParameterMode(1));
- log.info("获取指定参数的指定列大小:"+pmd.getPrecision(1));
- log.info("获取指定参数的小数点右边的位数:"+pmd.getScale(1));
- log.info("是否允许在指定参数中使用 null 值:"+pmd.isNullable(1));
- log.info("指定参数的值是否可以是带符号的数字:"+pmd.isSigned(1));
-
- //获取结果集元数据
- ResultSet rs = pre.executeQuery();
- while (rs.next()) {
- log.info(rs.getString(1)+"___"+rs.getString(2));
- }
- rs.close();
- }
-
- /**
- * 获取所有Driver信息
- */
- public static void getAllDriverMsg(){
- Enumeration<Driver> drivers = DriverManager.getDrivers();
- while(drivers.hasMoreElements()) {
- Driver d = drivers.nextElement();
- log.info(d.getClass().getName()+"_"+d.getMajorVersion());
- }
-
- }
- }
0
上一篇:[AS3]Flash AS3 Bulk Loader跨域加载(CrossDomain)
下一篇:可能是自己把你还当作高中的你,所以才哭了
相关热门文章
- 我的第一个python程序
- 欢迎javadog123在ChinaUnix博...
- 欢迎java605506740在ChinaUnix...
- redis与mysql数据同步
- 欢迎javacjava在ChinaUnix博客...
- Tomcat 6 配置SSI
- tomcat + ssi
- JDK1.6官方下载_JDK6官方下载_...
- Java 判断文件夹、文件是否存...
- 如何正确(完美)卸载Java/JDK/J...
- linux dhcp peizhi roc
- 关于Unix文件的软链接
- 求教这个命令什么意思,我是新...
- sed -e "/grep/d" 是什么意思...
- 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
评论热议
0 0
- java获取db元数据
- Java获取DB元数据
- java--获取数据库元数据
- Java获取mysql数据库元数据
- 获取数据库元数据
- 获取数据库元数据
- OSMF获取元数据
- [置顶] java元数据应用 , 自动获取控制器的元数据描述
- ADO.NET 获取元数据
- id3元数据的获取
- 元数据获取,Mark一下
- JDBC 获取元数据DatabaseMetaData
- 配置apache HIVE元数据DB为PostgreSQL
- Java与元数据
- Java Annotation元数据
- java与元数据
- java元数据
- Java元数据小解
- 从ie临时文件夹一次复制多个文件
- AS3加载文件时的异常捕获
- Android中使用Sqlite数据库
- [AS3]Flash AS3 Bulk Loader跨域加载(CrossDomain)
- linux process debug
- Java获取DB元数据
- ios 的简单动画
- 可能是自己把你还当作高中的你,所以才哭了
- 用VC + Eclipse调试jni的native代码
- Qt中findChildren返回值不对
- 【转】优化MySQL语句的十个建议
- 【转】linux下yum使用本地光盘做为安装源
- 图像处理(十二)图像融合(1)Seamless cloning泊松克隆-Siggraph 2004
- 【转】Windows远程登陆Linux桌面的方法
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
002437誉衡药业
锦绣之路衡玉
欲成欢唐艺衡姚路全文阅读
衡东
衡东县
衡东县邮编
衡东县属于哪个市
衡东县职业中专学校
衡东县人民医院
衡东教育信息网
衡东吧
衡中演讲
衡中同卷的答案在哪里公布
汽车衡器
地磅 衡器
衡器厂家
泰山衡器
石家庄衡器
小衡器
地衡器
电子衡器电子秤
中国衡器协会
汽车电子衡器
永康市华鹰衡器有限公司
广西电子衡器
香山衡器招聘
杰力衡器电子称怎么调
华鹰衡器电子秤说明书
锐箭衡器电子秤怎么调
大连衡逸园二手房
梧桐花园
东方雅苑
衡姓
衡山旅游
衡山县
衡山海拔
湖南衡山
衡山古城
衡山路
长沙衡山
衡山派