【java 获取数据库信息】获取MySQL或其他数据库的详细信息
1.首先是 通过数据库获取数据表的详细列信息
package com.sxd.mysqlInfo.test; import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException; import org.junit.Test; public class MySqlInfo2 { private final static String DRIVER = "com.mysql.jdbc.Driver";
private final static String URL = "jdbc:mysql://localhost:3306/biologyinfo";
private final static String USERNAME = "root";
private final static String PASSWORD = "root"; public static Connection getConnection() throws ClassNotFoundException, SQLException{
Connection con = null;
Class.forName(DRIVER);
con = DriverManager.getConnection(URL, USERNAME, PASSWORD);
return con;
} @Test
public void just4AllDBInfo() throws ClassNotFoundException, SQLException{
Connection con = getConnection();
DatabaseMetaData metaDate = con.getMetaData();
//1.得到数据库下所有数据表
ResultSet rs = metaDate.getTables("biologyinfo", null, null, null);
//2.根据表名 拼接成SQL语句 查询到某个表的所有列
PreparedStatement prep = null;
while(rs.next()){
String sql = "SELECT * FROM "+rs.getString(3)+" WHERE 1=2;";
prep = con.prepareStatement(sql);
ResultSet set = prep.executeQuery(sql);
ResultSetMetaData data = set.getMetaData();
//迭代取到所有列信息
for (int i = 1; i <= data.getColumnCount(); i++) {
// 获得所有列的数目及实际列数
int columnCount = data.getColumnCount();
// 获得指定列的列名
String columnName = data.getColumnName(i);
// 获得指定列的列值
int columnType = data.getColumnType(i);
// 获得指定列的数据类型名
String columnTypeName = data.getColumnTypeName(i);
// 所在的Catalog名字
String catalogName = data.getCatalogName(i);
// 对应数据类型的类
String columnClassName = data.getColumnClassName(i);
// 在数据库中类型的最大字符个数
int columnDisplaySize = data.getColumnDisplaySize(i);
// 默认的列的标题
String columnLabel = data.getColumnLabel(i);
// 获得列的模式
String schemaName = data.getSchemaName(i);
// 某列类型的精确度(类型的长度)
int precision = data.getPrecision(i);
// 小数点后的位数
int scale = data.getScale(i);
// 获取某列对应的表名
String tableName = data.getTableName(i);
// 是否自动递增
boolean isAutoInctement = data.isAutoIncrement(i);
// 在数据库中是否为货币型
boolean isCurrency = data.isCurrency(i);
// 是否为空
int isNullable = data.isNullable(i);
// 是否为只读
boolean isReadOnly = data.isReadOnly(i);
// 能否出现在where中
boolean isSearchable = data.isSearchable(i); System.out.println("数据表:"+rs.getString(3));
System.out.println("数据表"+rs.getString(3)+"列总数:"+columnCount);
System.out.println("获得列" + i + "的字段名称:" + columnName);
System.out.println("获得列" + i + "的类型,返回SqlType中的编号:"+ columnType);
System.out.println("获得列" + i + "的数据类型名:" + columnTypeName);
System.out.println("获得列" + i + "所在的Catalog名字:"+ catalogName);
System.out.println("获得列" + i + "对应数据类型的类:"+ columnClassName);
System.out.println("获得列" + i + "在数据库中类型的最大字符个数:"+ columnDisplaySize);
System.out.println("获得列" + i + "的默认的列的标题:" + columnLabel);
System.out.println("获得列" + i + "的模式:" + schemaName);
System.out.println("获得列" + i + "类型的精确度(类型的长度):" + precision);
System.out.println("获得列" + i + "小数点后的位数:" + scale);
System.out.println("获得列" + i + "对应的表名:" + tableName);
System.out.println("获得列" + i + "是否自动递增:" + isAutoInctement);
System.out.println("获得列" + i + "在数据库中是否为货币型:" + isCurrency);
System.out.println("获得列" + i + "是否为空:" + isNullable);
System.out.println("获得列" + i + "是否为只读:" + isReadOnly);
System.out.println("获得列" + i + "能否出现在where中:"+ isSearchable); System.out.println();
}
} }
}

2.java获取数据库 库信息以及具体主键 外键 索引等详细信息
package com.sxd.mysqlInfo.test; import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException; import org.junit.Test; import com.mysql.jdbc.Connection;
import com.mysql.jdbc.DatabaseMetaData; public class MysqlInfo { private final String DRIVER = "com.mysql.jdbc.Driver";
private final String URL = "jdbc:mysql://localhost:3306/";
private final String USERNAME = "root";
private final String PASSWORD = "root"; @Test
public void just4MySQLInfo() throws ClassNotFoundException, SQLException{
Class.forName(DRIVER);
Connection con = (Connection) DriverManager.getConnection(URL,USERNAME,PASSWORD);
DatabaseMetaData metaData = (DatabaseMetaData) con.getMetaData(); /**
* 1.返回数据库的相关信息
*/
System.out.println("数据库已知的用户: "+ metaData.getUserName());
System.out.println("数据库的系统函数的逗号分隔列表: "+ metaData.getSystemFunctions());
System.out.println("数据库的时间和日期函数的逗号分隔列表: "+ metaData.getTimeDateFunctions());
System.out.println("数据库的字符串函数的逗号分隔列表: "+ metaData.getStringFunctions());
System.out.println("数据库供应商用于 'schema' 的首选术语: "+ metaData.getSchemaTerm());
System.out.println("数据库URL: " + metaData.getURL());
System.out.println("是否允许只读:" + metaData.isReadOnly());
System.out.println("数据库的产品名称:" + metaData.getDatabaseProductName());
System.out.println("数据库的版本:" + metaData.getDatabaseProductVersion());
System.out.println("驱动程序的名称:" + metaData.getDriverName());
System.out.println("驱动程序的版本:" + metaData.getDriverVersion());
System.out.println();
System.out.println("数据库中使用的表类型"); ResultSet rs = metaData.getTableTypes();
while (rs.next()) {
System.out.println("1.-->"+rs.getString(1));
}
rs.close();
System.out.println(); /**
* 获取指定的数据库的所有表的类型,getTables()的第一个参数就是数据库名
* 因为与MySQL连接时没有指定,这里加上,剩下的参数就可以为null了
* 第二个参数是模式名称的模式,但是输出也是什么都没有。
*/
System.out.println("获取指定的数据库的所有表的类型");
ResultSet rs1 = metaData.getTables("biologyinfo", "",null, null);
while (rs1.next()) {
System.out.println();
System.out.println("数据库名:"+ rs1.getString(1));
System.out.println("表名: "+rs1.getString(3));
System.out.println("类型: "+rs1.getString(4));
}
rs1.close(); System.out.println();
System.out.println("获取指定的数据库的表的主键");
//获取指定的数据库的表的主键,第二个参数也是模式名称的模式,使用null了 第三个是表名称 为null表示可以查到所有的表
ResultSet rs2 = metaData.getPrimaryKeys("wxfirst", null, "materialinfo"); while (rs2.next()) {
System.out.println("表名称: "+ rs2.getString(3));
System.out.println("主键名称: "+ rs2.getString(4));
System.out.println("主键de序列号: "+ rs2.getString(5));
System.out.println("主键de名称: "+ rs2.getString(6));
}
rs2.close(); System.out.println(); /**
* 获取某个表的索引信息
*/
System.out.println("DatabaseMetaData.getIndexInfo()方法返回信息:");
ResultSet rs3 = metaData.getIndexInfo("wxfirst", null, "materialinfo", false, true);
while (rs3.next()) {
System.out.println("数据库名: "+ rs3.getString(1));
System.out.println("表模式: "+ rs3.getString(2));
System.out.println("表名称: "+ rs3.getString(3));
System.out.println("索引值是否可以不唯一: "+ rs3.getString(4));
System.out.println("索引类别: "+ rs3.getString(5));
System.out.println("索引名称: "+ rs3.getString(6));
System.out.println("索引类型: "+ rs3.getString(7));
System.out.println("索引中的列序列号: "+ rs3.getString(8));
System.out.println("列名称: "+ rs3.getString(9));
System.out.println("列排序序列: "+ rs3.getString(10));
System.out.println("TYPE为 tableIndexStatistic时它是表中的行数否则它是索引中唯一值的数量: "+ rs3.getString(11));
System.out.println("TYPE为 tableIndexStatisic时它是用于表的页数否则它是用于当前索引的页数: "+ rs3.getString(12));
System.out.println("过滤器条件: "+ rs3.getString(13));
}
rs3.close(); System.out.println(); /**
* 获取某个表的所有列信息
*/
System.out.println("DatabaseMetaData.getColumns()方法返回数据表列信息");
ResultSet rs4 = metaData.getColumns("wxfirst", null, "materialinfo", "mediaType");
while(rs4.next()){
System.out.println("数据库名称:"+rs4.getString(1));
System.out.println("表模式:"+rs4.getString(2));
System.out.println("表名称:"+rs4.getString(3));
System.out.println("列名称:"+rs4.getString(4));
System.out.println("SQL类型:"+rs4.getString(5));
System.out.println("数据源依赖类型名称:"+rs4.getString(6));
System.out.println("列的大小:"+rs4.getString(7));
System.out.println("未被使用:"+rs4.getString(8));
System.out.println("小数部分的位数:"+rs4.getString(9));
System.out.println("基数:"+rs4.getString(10));
System.out.println("是否允许NULL:"+rs4.getString(11));
System.out.println("描述列的注释:"+rs4.getString(12));
System.out.println("该列的默认值:"+rs4.getString(13));
System.out.println("未使用:"+rs4.getString(14));
System.out.println("未使用:"+rs4.getString(15));
System.out.println("对于char类型, 该长度是列中的最大字节数:"+rs4.getString(16));
System.out.println("表中列的索引:"+rs4.getString(17));
System.out.println("ISO规则用于确定列是否包括NULL:"+rs4.getString(18));
System.out.println("表的类别:"+rs4.getString(19));
System.out.println("表的模式:"+rs4.getString(20));
System.out.println("表名称:"+rs4.getString(21));
System.out.println("不同类型或用户生成Ref类型:"+rs4.getString(22));
System.out.println("此列是否自增:"+rs4.getString(23));
}
rs4.close(); }
}

【java 获取数据库信息】获取MySQL或其他数据库的详细信息的更多相关文章
- 无法安装 VMware Tools。尝试访问安装 VMware Tools 所需的图像文件“/usr/lib/vmware/isoimages/linuxPreGlibc25.iso”时出错: 2 (No such file or directory)。请参考产品文档或知识库文章 2129825,了解关于如何获取该客户机操作系统的 VMware Tools 软件包的详细信息。
无法安装 VMware Tools.尝试访问安装 VMware Tools 所需的图像文件"/usr/lib/vmware/isoimages/linuxPreGlibc25.iso&quo ...
- Atitit.dwr3 不能显示错误详细信息的解决方案,控件显示错误详细信息的解决方案 java .net php
Atitit.dwr3 不能显示错误详细信息的解决方案,控件显示错误详细信息的解决方案 java .net php 1. Keyword/subtitle 1 2. 使用dwr3的异常convert处 ...
- Asp.Net MVC 中JS通过ajaxfileupload上传图片获取身份证姓名、生日、家庭住址等详细信息
客户要求用身份证图片上传获取身份证的详细信息就下来研究了一下(现在的客户真的懒 身份证信息都懒得输入了哈哈...),经过慢慢研究,果然皇天不负有心人搞出来了.这个借助的是腾讯的一个SKD 腾讯优图云 ...
- c/c++连接mysql数据库设置及乱码问题(vs2013连接mysql数据库,使用Mysql API操作数据库)
我的安装环境: (1)vs2013(32位版) (vs2013只有32位的 没有64位的,但是它可以编译出64位的程序) : (2)mysql-5.7.15(64位) vs2013中的设置(按步骤来 ...
- MySql数据库 - 3.利用MySql Workbench 对数据库进行操作
打开MySql Workbench 选择呢一个数据库 查看数据库: 创建数据库 在SCHEMAS下的空白位置右键 - 选择 Create Schema... 如果数据库名字中有大写字母,会出现如下提示 ...
- JAVA项目将 Oracle 转 MySQL 数据库转换(Hibernate 持久层)
项目开发时用的是Oracle数据库,但为了更好的做分布式,做集群,我们要将数据库转成 MySQL! 在数据库迁移中首先要做的事是将 Oracle 的表结构以及数据 克隆到 MySQL 数据库. 这点不 ...
- 获取文件属性“详细信息” - StringFileInfo
0.什么是StringFileInfo1.获取方法2.示例代码 参考链接: 1.MS docs - GetFileVersionInfoA:https://docs.microsoft.com/zh- ...
- MySQL学习笔记-数据库文件
数据库文件 MySQL主要文件类型有如下几种 参数文件:my.cnf--MySQL实例启动的时候在哪里可以找到数据库文件,并且指定某些初始化参数,这些参数定义了某种内存结构的大小等设置,还介绍了参数类 ...
- MySQL学习笔记-数据库内存
数据库内存 InnoDB存储引擎内存由以下几个部分组成:缓冲池(buffer pool).重做日志缓冲池(redo log buffer)以及额外的内存池(additional memory pool ...
- MySQL学习笔记-数据库后台线程
数据库后台线程 默认情况下讲述的InnoDB存储引擎,以后不再重复声明.后台线程有7个--4个IO thread,1个master thread,1个锁监控线程,1个错误监控线程.IO thread的 ...
随机推荐
- Mybatis中的in查询和foreach标签
Mybatis中的foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有 item,index,collection,open,separato ...
- Java for LeetCode 229 Majority Element II
Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋ times. The algorit ...
- Java for LeetCode 207 Course Schedule【Medium】
There are a total of n courses you have to take, labeled from 0 to n - 1. Some courses may have prer ...
- Divide and Conquer:Cable Master(POJ 1064)
缆绳大师 题目大意,把若干线段分成K份,求最大能分多长 二分法模型,C(x)就是题干的意思,在while那里做下文章就可以了,因为这个题目没有要求长度是整数,所以我们要不断二分才行,一般50-100次 ...
- codeforces 567D.One-Dimensional Battle Ships 解题报告
题目链接:http://codeforces.com/problemset/problem/567/D 题目意思:给出 1 * n 的 field,编号从左至右依次为 1,2,...,n.问射 m 枪 ...
- 【leetcode】atoi (hard) ★
虽然题目中说是easy, 但是我提交了10遍才过,就算hard吧. 主要是很多情况我都没有考虑到.并且有的时候我的规则和答案中的规则不同. 答案的规则: 1.前导空格全部跳过 “ 123” ...
- 【hadoop2.6.0】通过代码运行程序流程
之前跑了一下hadoop里面自带的例子,现在顺一下如何通过源代码来运行程序. 我懒得装eclipse,就全部用命令行了. 整体参考官网上的:http://hadoop.apache.org/docs/ ...
- linux 用户、用户组不能是全数字
今天封装命令行,需要创建用户.用户组,遇到下面问题,如图: 当时我和迷茫,为什么明明存在‘1111’这个用户组,但是却提示不存在呢??难道是linux的一个bug??? 接着我又试了几个: 发现规律了 ...
- QtCreator 添加第三方头文件库文件路径
打开工程名.pro文件 添加 INCLUDEPATH += $$PWD/../../Obelisk/thirdparty/prebuilt/include/LeapSDKOrion LIBS += - ...
- iOS应用架构谈(三):View层的组织和调用方案(下)
iOS客户端应用架构看似简单,但实际上要考虑的事情不少.本文作者将以系列文章的形式来回答iOS应用架构中的种种问题,本文是其中的第二篇,主要讲View层的组织和调用方案.下篇主要讨论做View层架构的 ...