java 读取数据库中表定义
将数据库中的表信息读取出来
package com.cloud.smartreport.utils; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.util.ArrayList; import java.util.List; import org.smart4j.framework.dao.DatabaseHelper; public class DbToWord { public static void main(String[] args) { try { Connection conn = DatabaseHelper.getConnection(); DatabaseMetaData metadata = conn.getMetaData(); 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(rs.getString(1)); } rs.close(); System.out.println(); /** * 获取指定的数据库的所有表的类型,getTables()的第一个参数就是数据库名 因为与MySQL连接时没有指定,这里加上,剩下的参数就可以为null了 * 第二个参数是模式名称的模式,但是输出也是什么都没有。谁知道告诉我一声 */ System.out.println("获取指定的数据库的所有表的类型"); ResultSet rs1 = metadata.getTables("stock", null, 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)); String tablename = rs1.getString(3); List<String> keyList = new ArrayList<String>(); ResultSet rs3 = metadata.getPrimaryKeys("stock", null, tablename); while (rs3.next()) { keyList.add(rs3.getString(4)); } rs3.close(); PreparedStatement ps = conn.prepareStatement("select * from " + tablename); ResultSet rs2 = ps.executeQuery(); ResultSetMetaData rsme = rs2.getMetaData(); int columnCount = rsme.getColumnCount(); //System.out.println("ResultSet对象中的列数" + columnCount); System.out.println("列定义 | 自动编号 | 是否为空 | 主键 "); for (int i = 1; i < columnCount; i++) { System.out.print(rsme.getColumnName(i) + " " + rsme.getColumnTypeName(i) + "(" + rsme.getPrecision(i) + ")"); System.out.print("| " + rsme.isAutoIncrement(i)); System.out.print("| " + rsme.isNullable(i)); System.out.println("| "+ keyList.contains(rsme.getColumnName(i))); } System.out.println(); rs2.close(); ps.close(); } rs1.close(); } catch (Exception e) { e.printStackTrace(); } } }
输出结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 数据库名:stock 表名: trd_daily_volume 类型: TABLE 列定义 | 自动编号 | 是否为空 | 主键 id BIGINT( 20 )| true | 0 | true stock_code VARCHAR( 6 )| false | 0 | true trade_date DATETIME( 19 )| false | 1 | false trade_status INT( 10 )| false | 1 | false open_price DOUBLE( 9 )| false | 1 | false high_price DOUBLE( 9 )| false | 1 | false low_price DOUBLE( 9 )| false | 1 | false close_price DOUBLE( 9 )| false | 1 | false dnshr_trade BIGINT( 12 )| false | 1 | false |
作者:panie
出处:http://www.cnblogs.com/panie2015/
如果您希望与我交流互动,欢迎加我微信
本文内容为作者辛苦整理书写,欢迎转载,但请保留文章出处
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?