【java 获取数据库信息】获取MySQL或其他数据库的详细信息

1.首先是 通过数据库获取数据表的详细列信息

  1 package com.sxd.mysqlInfo.test;
  2
  3 import java.sql.Connection;
  4 import java.sql.DatabaseMetaData;
  5 import java.sql.DriverManager;
  6 import java.sql.PreparedStatement;
  7 import java.sql.ResultSet;
  8 import java.sql.ResultSetMetaData;
  9 import java.sql.SQLException;
 10
 11 import org.junit.Test;
 12
 13
 14 public class MySqlInfo2 {
 15
 16     private final static String DRIVER = "com.mysql.jdbc.Driver";
 17     private final static String URL = "jdbc:mysql://localhost:3306/biologyinfo";
 18     private final static String USERNAME = "root";
 19     private final static String PASSWORD = "root";
 20
 21     public static Connection getConnection() throws ClassNotFoundException, SQLException{
 22         Connection con = null;
 23         Class.forName(DRIVER);
 24         con = DriverManager.getConnection(URL, USERNAME, PASSWORD);
 25         return con;
 26     }
 27
 28     @Test
 29     public void just4AllDBInfo() throws ClassNotFoundException, SQLException{
 30         Connection con = getConnection();
 31         DatabaseMetaData metaDate = con.getMetaData();
 32         //1.得到数据库下所有数据表
 33         ResultSet rs = metaDate.getTables("biologyinfo", null, null, null);
 34         //2.根据表名  拼接成SQL语句  查询到某个表的所有列
 35         PreparedStatement prep = null;
 36         while(rs.next()){
 37             String sql = "SELECT  *  FROM "+rs.getString(3)+" WHERE 1=2;";
 38             prep = con.prepareStatement(sql);
 39             ResultSet set = prep.executeQuery(sql);
 40             ResultSetMetaData data = set.getMetaData();
 41             //迭代取到所有列信息
 42             for (int i = 1; i <= data.getColumnCount(); i++) {
 43                 // 获得所有列的数目及实际列数
 44                 int columnCount = data.getColumnCount();
 45                 // 获得指定列的列名
 46                 String columnName = data.getColumnName(i);
 47                 // 获得指定列的列值
 48                 int columnType = data.getColumnType(i);
 49                 // 获得指定列的数据类型名
 50                 String columnTypeName = data.getColumnTypeName(i);
 51                 // 所在的Catalog名字
 52                 String catalogName = data.getCatalogName(i);
 53                 // 对应数据类型的类
 54                 String columnClassName = data.getColumnClassName(i);
 55                 // 在数据库中类型的最大字符个数
 56                 int columnDisplaySize = data.getColumnDisplaySize(i);
 57                 // 默认的列的标题
 58                 String columnLabel = data.getColumnLabel(i);
 59                 // 获得列的模式
 60                 String schemaName = data.getSchemaName(i);
 61                 // 某列类型的精确度(类型的长度)
 62                 int precision = data.getPrecision(i);
 63                 // 小数点后的位数
 64                 int scale = data.getScale(i);
 65                 // 获取某列对应的表名
 66                 String tableName = data.getTableName(i);
 67                 // 是否自动递增
 68                 boolean isAutoInctement = data.isAutoIncrement(i);
 69                 // 在数据库中是否为货币型
 70                 boolean isCurrency = data.isCurrency(i);
 71                 // 是否为空
 72                 int isNullable = data.isNullable(i);
 73                 // 是否为只读
 74                 boolean isReadOnly = data.isReadOnly(i);
 75                 // 能否出现在where中
 76                 boolean isSearchable = data.isSearchable(i);
 77
 78                 System.out.println("数据表:"+rs.getString(3));
 79                 System.out.println("数据表"+rs.getString(3)+"列总数:"+columnCount);
 80                 System.out.println("获得列" + i + "的字段名称:" + columnName);
 81                 System.out.println("获得列" + i + "的类型,返回SqlType中的编号:"+ columnType);
 82                 System.out.println("获得列" + i + "的数据类型名:" + columnTypeName);
 83                 System.out.println("获得列" + i + "所在的Catalog名字:"+ catalogName);
 84                 System.out.println("获得列" + i + "对应数据类型的类:"+ columnClassName);
 85                 System.out.println("获得列" + i + "在数据库中类型的最大字符个数:"+ columnDisplaySize);
 86                 System.out.println("获得列" + i + "的默认的列的标题:" + columnLabel);
 87                 System.out.println("获得列" + i + "的模式:" + schemaName);
 88                 System.out.println("获得列" + i + "类型的精确度(类型的长度):" + precision);
 89                 System.out.println("获得列" + i + "小数点后的位数:" + scale);
 90                 System.out.println("获得列" + i + "对应的表名:" + tableName);
 91                 System.out.println("获得列" + i + "是否自动递增:" + isAutoInctement);
 92                 System.out.println("获得列" + i + "在数据库中是否为货币型:" + isCurrency);
 93                 System.out.println("获得列" + i + "是否为空:" + isNullable);
 94                 System.out.println("获得列" + i + "是否为只读:" + isReadOnly);
 95                 System.out.println("获得列" + i + "能否出现在where中:"+ isSearchable);
 96
 97                 System.out.println();
 98             }
 99         }
100
101     }
102 }

2.java获取数据库  库信息以及具体主键 外键  索引等详细信息

  1 package com.sxd.mysqlInfo.test;
  2
  3 import java.sql.DriverManager;
  4 import java.sql.ResultSet;
  5 import java.sql.SQLException;
  6
  7 import org.junit.Test;
  8
  9 import com.mysql.jdbc.Connection;
 10 import com.mysql.jdbc.DatabaseMetaData;
 11
 12 public class MysqlInfo {
 13
 14     private final String DRIVER = "com.mysql.jdbc.Driver";
 15     private final String URL = "jdbc:mysql://localhost:3306/";
 16     private final String USERNAME = "root";
 17     private final String PASSWORD = "root";
 18
 19     @Test
 20     public void just4MySQLInfo() throws ClassNotFoundException, SQLException{
 21         Class.forName(DRIVER);
 22         Connection con = (Connection) DriverManager.getConnection(URL,USERNAME,PASSWORD);
 23         DatabaseMetaData metaData = (DatabaseMetaData) con.getMetaData();
 24
 25         /**
 26          * 1.返回数据库的相关信息
 27          */
 28          System.out.println("数据库已知的用户: "+ metaData.getUserName());
 29          System.out.println("数据库的系统函数的逗号分隔列表: "+ metaData.getSystemFunctions());
 30          System.out.println("数据库的时间和日期函数的逗号分隔列表: "+ metaData.getTimeDateFunctions());
 31          System.out.println("数据库的字符串函数的逗号分隔列表: "+ metaData.getStringFunctions());
 32          System.out.println("数据库供应商用于 ‘schema‘ 的首选术语: "+ metaData.getSchemaTerm());
 33          System.out.println("数据库URL: " + metaData.getURL());
 34          System.out.println("是否允许只读:" + metaData.isReadOnly());
 35          System.out.println("数据库的产品名称:" + metaData.getDatabaseProductName());
 36          System.out.println("数据库的版本:" + metaData.getDatabaseProductVersion());
 37          System.out.println("驱动程序的名称:" + metaData.getDriverName());
 38          System.out.println("驱动程序的版本:" + metaData.getDriverVersion());
 39          System.out.println();
 40          System.out.println("数据库中使用的表类型");
 41
 42          ResultSet rs = metaData.getTableTypes();
 43          while (rs.next()) {
 44              System.out.println("1.-->"+rs.getString(1));
 45          }
 46          rs.close();
 47          System.out.println();
 48
 49          /**
 50           * 获取指定的数据库的所有表的类型,getTables()的第一个参数就是数据库名
 51           * 因为与MySQL连接时没有指定,这里加上,剩下的参数就可以为null了
 52           * 第二个参数是模式名称的模式,但是输出也是什么都没有。
 53           */
 54          System.out.println("获取指定的数据库的所有表的类型");
 55          ResultSet rs1 = metaData.getTables("biologyinfo", "",null, null);
 56          while (rs1.next()) {
 57              System.out.println();
 58              System.out.println("数据库名:"+ rs1.getString(1));
 59              System.out.println("表名: "+rs1.getString(3));
 60              System.out.println("类型: "+rs1.getString(4));
 61          }
 62          rs1.close();
 63
 64          System.out.println();
 65          System.out.println("获取指定的数据库的表的主键");
 66          //获取指定的数据库的表的主键,第二个参数也是模式名称的模式,使用null了   第三个是表名称  为null表示可以查到所有的表
 67          ResultSet rs2 = metaData.getPrimaryKeys("wxfirst", null, "materialinfo");
 68
 69          while (rs2.next()) {
 70              System.out.println("表名称: "+ rs2.getString(3));
 71              System.out.println("主键名称: "+ rs2.getString(4));
 72              System.out.println("主键de序列号: "+ rs2.getString(5));
 73              System.out.println("主键de名称: "+ rs2.getString(6));
 74          }
 75          rs2.close();
 76
 77          System.out.println();
 78
 79
 80          /**
 81           * 获取某个表的索引信息
 82           */
 83          System.out.println("DatabaseMetaData.getIndexInfo()方法返回信息:");
 84          ResultSet rs3 = metaData.getIndexInfo("wxfirst", null, "materialinfo", false, true);
 85          while (rs3.next()) {
 86              System.out.println("数据库名: "+ rs3.getString(1));
 87              System.out.println("表模式: "+ rs3.getString(2));
 88              System.out.println("表名称: "+ rs3.getString(3));
 89              System.out.println("索引值是否可以不唯一: "+ rs3.getString(4));
 90              System.out.println("索引类别: "+ rs3.getString(5));
 91              System.out.println("索引名称: "+ rs3.getString(6));
 92              System.out.println("索引类型: "+ rs3.getString(7));
 93              System.out.println("索引中的列序列号: "+ rs3.getString(8));
 94              System.out.println("列名称: "+ rs3.getString(9));
 95              System.out.println("列排序序列: "+ rs3.getString(10));
 96              System.out.println("TYPE为 tableIndexStatistic时它是表中的行数否则它是索引中唯一值的数量: "+ rs3.getString(11));
 97              System.out.println("TYPE为 tableIndexStatisic时它是用于表的页数否则它是用于当前索引的页数: "+ rs3.getString(12));
 98              System.out.println("过滤器条件: "+ rs3.getString(13));
 99          }
100          rs3.close();
101
102
103          System.out.println();
104
105          /**
106           * 获取某个表的所有列信息
107           */
108          System.out.println("DatabaseMetaData.getColumns()方法返回数据表列信息");
109          ResultSet rs4 = metaData.getColumns("wxfirst", null, "materialinfo", "mediaType");
110          while(rs4.next()){
111              System.out.println("数据库名称:"+rs4.getString(1));
112              System.out.println("表模式:"+rs4.getString(2));
113              System.out.println("表名称:"+rs4.getString(3));
114              System.out.println("列名称:"+rs4.getString(4));
115              System.out.println("SQL类型:"+rs4.getString(5));
116              System.out.println("数据源依赖类型名称:"+rs4.getString(6));
117              System.out.println("列的大小:"+rs4.getString(7));
118              System.out.println("未被使用:"+rs4.getString(8));
119              System.out.println("小数部分的位数:"+rs4.getString(9));
120              System.out.println("基数:"+rs4.getString(10));
121              System.out.println("是否允许NULL:"+rs4.getString(11));
122              System.out.println("描述列的注释:"+rs4.getString(12));
123              System.out.println("该列的默认值:"+rs4.getString(13));
124              System.out.println("未使用:"+rs4.getString(14));
125              System.out.println("未使用:"+rs4.getString(15));
126              System.out.println("对于char类型, 该长度是列中的最大字节数:"+rs4.getString(16));
127              System.out.println("表中列的索引:"+rs4.getString(17));
128              System.out.println("ISO规则用于确定列是否包括NULL:"+rs4.getString(18));
129              System.out.println("表的类别:"+rs4.getString(19));
130              System.out.println("表的模式:"+rs4.getString(20));
131              System.out.println("表名称:"+rs4.getString(21));
132              System.out.println("不同类型或用户生成Ref类型:"+rs4.getString(22));
133              System.out.println("此列是否自增:"+rs4.getString(23));
134          }
135          rs4.close();
136
137
138
139
140
141     }
142 }

时间: 2024-08-05 07:53:13

【java 获取数据库信息】获取MySQL或其他数据库的详细信息的相关文章

Atitit.dwr3 不能显示错误详细信息的解决方案,控件显示错误详细信息的解决方案 java .net php

Atitit.dwr3 不能显示错误详细信息的解决方案,控件显示错误详细信息的解决方案 java .net php 1. Keyword/subtitle 1 2. 使用dwr3的异常convert处理不能解除,,,按照盗垒能解除了.... 1 3. 使用js 回回调功能处理...还是不能,子能显示个..javaClassName:"java.lang.Throwable",message:"Error"} 2 4. 异常转换器 2 5. 当然如果想要只针对某一个f

Asp.Net MVC 中JS通过ajaxfileupload上传图片获取身份证姓名、生日、家庭住址等详细信息

客户要求用身份证图片上传获取身份证的详细信息就下来研究了一下(现在的客户真的懒 身份证信息都懒得输入了哈哈...),经过慢慢研究,果然皇天不负有心人搞出来了.这个借助的是腾讯的一个SKD  腾讯优图云人脸服务TencentYoutuYun.SDK.Csharp 这个DLL文件从github下载dll文件,并添加到你项目引用里,本sdk依赖Newtonsoft.Json,也需一起引用. 1.主要用到里面的一个封装类:OCR,现在来看一下里面的参数信息 PlanRegGuest_OCR这个类就封装了

MySql数据库 - 3.利用MySql Workbench 对数据库进行操作

打开MySql Workbench 选择呢一个数据库 查看数据库: 创建数据库 在SCHEMAS下的空白位置右键 - 选择 Create Schema... 如果数据库名字中有大写字母,会出现如下提示: 该提示意思为:数据库中不区分大小写,点击 OK 就可以了. 原文地址:https://www.cnblogs.com/kao-la-bao-bei/p/9217271.html

点击列表信息,arcgis地图 定位并显示详细信息

//地图定位2 x,y--by zy function gotoMap(x, y, name, content, dizhi) { //清除上一次显示 myMap.graphics.clear(); var pt = new esri.geometry.Point([x, y]); var pictureMarkerSymbol = new esri.symbol.PictureMarkerSymbol("/img/DW.png", 20, 20); var g = new esri.

mysql 同步备份数据库

mysql提供数据库的同步备份功能,能帮助我们实现数据库的冗灾.备份/恢复.负载均衡等 具体操作 1 同步数据库的硬件环境最好和主数据库一致,软件环境完全与主数据库环境一致,可以像安装主数据库一样安装同步数据库 同步数据库 修改 /etc/my.conf,使之成为同步数据库 server-id 这个id是每一台数据库的唯一编号,不允许重复 然后增加 master-host = 主数据库的ip master-user = 数据同步专用帐号名 master-password = 密码 master-

[课程设计]Scrum 3.3 多鱼点餐系统开发进度(下单详细信息页面设计)

Scrum 3.3 多鱼点餐系统开发进度(下单详细信息页面设计)  1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到店点餐系统WEB 5.Sprint 3时间:12.09-12.18 重案组成员   姓名 学号 博客链接 Github链接 队长 黄冠锋 201406114134 http://www.cnblogs.com/hgf520/ https://github.com/crown999   卢利钦 20140

鼠标移上去显示详细信息

<a href="" title="想显示的详细信息"></a> <span title="想显示的详细信息"></span>

JAVA根据IP地址获取详细的地域信息

在系统中网站的头部一般都有显示是哪个城市的用户进入到网站的首页后默认城市应该是用户本地的城市信息例如北京网站就要根据你的IP地址的信息查询数据获取北京部分的数据呵呵当然我可能描述的不是很清楚但是可以理解成通过IP地址定位地理信息就行.很多人现在使用以QQ数据库为基础获取地址信息但不完整.而且不规范.互联网提供很多其他接口可以完成这项功能. 接口如下 通过淘宝IP地址库获取IP位置 1. 请求接口GEThttp://ip.taobao.com/service/getIpInfo.php?ip=[i

mysql自动备份数据库,同时ftp上传到指定服务器(scp远程获取本地备份)

最近要把服务器托管到电信机房,所以要对数据库进行备份,同时要把备份ftp上传到公司指定服务器. 一.先安装ftp服务 1.查询是否安装vsftpd: rpm -qa |grep vsftpd (rpm的安装:apt-get install rpm) 或者查询当前ftp进程:ps -ef|grep vsftpd ? 或者 ps -ef|grep ftp 2.如果没有就安装yum install vsftpd 3.安装完后看ftp安装目录:ps -ef|grep ftp 发现我的配置文件默认:/et