java 通过数据库名获得 该数据所有的表名以及字段名、字段类型
package com.nf.lc.sql_meta_data; import java.sql.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Set; /**
* 获得数据库表的元数据
*/
public class GetSQLMetaData { public static void main(String[] args) throws SQLException, ClassNotFoundException { HashMap<String, Object> computer_mall = (HashMap<String, Object>) getDatabaseNameToTableNameAndColumnName("computer_mall"); Set<String> tableNames = computer_mall.keySet();
System.out.println("一共有表:" + tableNames.size() + "张");
for (String tableName : tableNames) {
System.out.println("===========================\r\n");
System.out.println("表名:" + tableName); // <字段名,类型> HashMap 集合
HashMap<String, String> columnNames = (HashMap<String, String>) computer_mall.get(tableName); Set<String> columns = columnNames.keySet(); for (String column : columns) {
System.out.println("字段名:" + column + " 类型:" + columnNames.get(column));
} System.out.println("===========================\r\n");
} } public static Map getDatabaseNameToTableNameAndColumnName(String databaseName) throws SQLException, ClassNotFoundException { String driver = "org.mariadb.jdbc.Driver";
String url = "jdbc:mariadb://localhost:3306/" + databaseName;
String username = "root";
String password = "root";
Map<String, Object> tableNameMap = new HashMap<>(); //加载驱动
Class.forName(driver); //获得数据库连接
Connection connection = DriverManager.getConnection(url, username, password);
//获得元数据
DatabaseMetaData metaData = connection.getMetaData();
//获得表信息
ResultSet tables = metaData.getTables(null, null, null, new String[]{"TABLE"}); while (tables.next()) {
Map<String, String> columnNameMap = new HashMap<>(); //保存字段名 //获得表名
String table_name = tables.getString("TABLE_NAME");
//通过表名获得所有字段名
ResultSet columns = metaData.getColumns(null, null, table_name, "%");
//获得所有字段名
while (columns.next()) {
//获得字段名
String column_name = columns.getString("COLUMN_NAME");
//获得字段类型
String type_name = columns.getString("TYPE_NAME"); columnNameMap.put(column_name, type_name);
} tableNameMap.put(table_name, columnNameMap); } return tableNameMap;
} }
关于获得数据库相关信息:
String driver = "org.mariadb.jdbc.Driver";
String url = "jdbc:mariadb://localhost:3306/" + databaseName;
String username = "root";
String password = "root"; //加载驱动
Class.forName(driver); //获得数据库连接
Connection connection = DriverManager.getConnection(url, username, password);
//获得元数据
DatabaseMetaData metaData = connection.getMetaData(); //获得数据库名称
String databaseProductName = metaData.getDatabaseProductName(); //获得数据库版本号
String databaseProductVersion = metaData.getDatabaseProductVersion(); //获得数据库用户名
String userName = metaData.getUserName(); //获得数据库连接URL
String jdbcUrl = metaData.getURL(); //获得数据库驱动
String driverName = metaData.getDriverName(); //获得数据库驱动版本号
String driverVersion = metaData.getDriverVersion();
归途(LC)
java 通过数据库名获得 该数据所有的表名以及字段名、字段类型的更多相关文章
- MySQL 查询某个数据库中所有包含数据记录的表名
MySQL 查询某个数据库中所有包含数据记录的表名 有时根据实际应用需要,需要对数据进行备份. 如果一个数据库中有很多数据表,但是只想备份包含数据记录的那些表数据(空表不做数据备份). 如果通过如下S ...
- 笔记:EF出现列名 'Discriminator' 无效、类没有加入数据库上下文也被数据迁移生成表
笔记: EF出现列名 'Discriminator' 无效: 类没有加入数据库上下文也被数据迁移生成表: 出现该问题一般是使用了某个基类继承了实体类: 原因是code first的POCO实体对象的继 ...
- EasyUI+JSP之java读取数据库后JSON格式数据的返回及调用
做作业工程中遇到一些问题,特此记录一下 解决的问题:使用EasyUI框架搭建简单学生管理系统(数据库增删改查)操作时配合JSP,不知道如何把从数据库获得的数据封装成JSON格式并传回前端JSP并进行展 ...
- [oracle/java/sql]用于上十万批量数据插入Oracle表的Java程序
程序下载:https://files.cnblogs.com/files/xiandedanteng/LeftInnerNotExist20191222.rar 原理:Oracle的Insert al ...
- java向数据库插入N条数据
为了测试mysql的索引,要向数据库先插入上万条数据,然后再测试.手动插入太麻烦,写了一段代码. 先上代码: package action; import java.sql.Connection; i ...
- java实现数据库之间批量插入数据
package comnf147Package; import java.sql.*; public class DateMigrationLagou { //连接SQLite private Con ...
- 用Java向数据库中插入大量数据时的优化
使用jdbc向数据库插入100000条记录,分别使用statement,PreparedStatement,及PreparedStatement+批处理3种方式进行测试: public void ex ...
- BCP批量导入数据时候如何处理表中自动增加的字段
大容量导入数据时保留标识值 (SQL Server) http://msdn.microsoft.com/zh-cn/library/ms186335(v=sql.120).aspx 使用格式化文件跳 ...
- SQL Server 复制表结构以及数据,去除表中重复字段
--复制另一个数据库中的某张表的结构及数据--select * from Test.dbo.TestTable(查询表中所有数据) --into [表名] 插入当前数据库新表,如果没有该表就创建 se ...
随机推荐
- 吴裕雄--天生自然Linux操作系统:Linux 忘记密码解决方法
忘记Linux系统的root密码,linux系统忘记root密码的情况该怎么办呢?重新安装系统吗?当然不用!进入单用户模式更改一下root密码即可. 步骤如下: 重启linux系统 3 秒之内要按一下 ...
- java 里没有友元函数怎么办
我希望一个service可以访问某个对象中的私有对象,但是不希望这个私有对象暴露给其它的service. public xxxServiceImpl{ public void do(){ xxxent ...
- Python笔记_第四篇_高阶编程_GUI编程之Tkinter_3.数据显示
1. 表格数据显示: 图示: 实例: import tkinter from tkinter import ttk # 创建主窗口__编程头部 win = tkinter.Tk() # 设置标题 wi ...
- NSPredicate 应用
//查询单词里面包含“ang”的字符串 NSArray *array = [[NSArray alloc]initWithObjects:@"beijing",@"sha ...
- embed标签属性
embed标签属性 (一).基本语法: embed src=url 说明:embed可以用来插入各种多媒体,格式可以是 Midi.Wav.AIFF.AU.MP3等等, Netscape及新版 ...
- iOS 10 新增plist文件属性
大概统计了一下需要加的一些字段列在下面: NSContactsUsageDescription -> 通讯录 NSMicrophoneUsageDescription -> 麦克风 NSP ...
- 大道至简伪代码读后感java为代码形式
//愚公移山 import.java.大道至简.*; import.java.愚公移山.*; public class yishan //定义一个名为yishan的类 {//类定义的开始 public ...
- 搭建Docker私有仓库&用户密码认证&web可视化界面
1.拉取镜像 docker pull hyper/docker-registry-web docker pull registry 2.安装 yum install docker-compose 3. ...
- poj-3661 Running(DP)
http://poj.org/problem?id=3661 Description The cows are trying to become better athletes, so Bessie ...
- dubbo同步/异步调用的方式
我们知道,Dubbo 缺省协议采用单一长连接,底层实现是 Netty 的 NIO 异步通讯机制:基于这种机制,Dubbo 实现了以下几种调用方式: 同步调用(默认) 异步调用 参数回调 事件通知 同步 ...