Java 通过JDBC查询数据库表结构(字段名称,类型,长度等)
Java 通过JDBC查询数据库表结构(字段名称,类型,长度等)
Java 通过JDBC查询数据库表结构(字段名称,类型,长度等)
在JDBCPreparedStatement.executeQuery().getMetaData();后,我们可以通过ResultSetMetaData对象查询返回结果集的源数据信息,也就是表结构信息。
示例代码如下:
package astar.sutil.db; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; /** * @author 鲁炬 * */ public class DbMetaDataUtilTest { public static void main(String[] args) throws SQLException, ClassNotFoundException { String user = "user"; String password = "pwd"; String jdbcDriver = "com.ibm.db2.jcc.DB2Driver"; String jdbcUrl = "jdbc:db2://localhost:50000/DBNAME"; Connection conn = null; Class.forName(jdbcDriver); conn = DriverManager.getConnection(jdbcUrl, user, password); PreparedStatement pst = null; try { pst = conn.prepareStatement("select * from t_table where 1=2"); ResultSetMetaData rsd = pst.executeQuery().getMetaData(); for(int i = 0; i < rsd.getColumnCount(); i++) { System.out.print("java类型:"+rsd.getColumnClassName(i + 1)); System.out.print(" 数据库类型:"+rsd.getColumnTypeName(i + 1)); System.out.print(" 字段名称:"+rsd.getColumnName(i + 1)); System.out.print(" 字段长度:"+rsd.getColumnDisplaySize(i + 1)); System.out.println(); } } catch(SQLException e) { throw new RuntimeException(e); } finally { try { pst.close(); pst = null; } catch(SQLException e) { throw new RuntimeException(e); } } } }
以上代码运行打印如下:
java类型:java.lang.String 数据库类型:VARCHAR 字段名称:CORP_CODE 字段名称:20 java类型:java.lang.String 数据库类型:VARCHAR 字段名称:CORP_NAME 字段名称:100 java类型:java.lang.String 数据库类型:VARCHAR 字段名称:SIMPLY_NAME 字段名称:50 java类型:java.lang.String 数据库类型:CHAR 字段名称:CORP_LEVEL 字段名称:1 java类型:java.lang.String 数据库类型:VARCHAR 字段名称:SUP_CORP_CODE 字段名称:20 java类型:java.lang.String 数据库类型:VARCHAR 字段名称:PROVINCE 字段名称:8 java类型:java.lang.String 数据库类型:VARCHAR 字段名称:STAT_CODE 字段名称:8 java类型:java.lang.String 数据库类型:CHAR 字段名称:CORP_KIND 字段名称:4 java类型:java.lang.String 数据库类型:CHAR 字段名称:IS_LEAF 字段名称:1 java类型:java.lang.String 数据库类型:CHAR 字段名称:IS_USE 字段名称:1 java类型:java.lang.String 数据库类型:CHAR 字段名称:IS_UPDATE 字段名称:1 java类型:java.lang.Integer 数据库类型:SMALLINT 字段名称:ORDER_CODE 字段名称:6 java类型:java.lang.String 数据库类型:VARCHAR 字段名称:MAP_REGIE_CODE 字段名称:20 java类型:java.lang.String 数据库类型:CHAR 字段名称:IS_SUPER 字段名称:1 java类型:java.lang.Integer 数据库类型:SMALLINT 字段名称:DISPLAY_ID 字段名称:6 java类型:java.lang.String 数据库类型:CHAR 字段名称:IS_GIS 字段名称:1
更多详细的属性输出可以读一下ResultSetMetaData对象的源码。
/* * @(#)ResultSetMetaData.java 1.33 05/12/01 * * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package java.sql; /** * An object that can be used to get information about the types * and properties of the columns in a <code>ResultSet</code> object. * The following code fragment creates the <code>ResultSet</code> object rs, * creates the <code>ResultSetMetaData</code> object rsmd, and uses rsmd * to find out how many columns rs has and whether the first column in rs * can be used in a <code>WHERE</code> clause. * <PRE> * * ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM TABLE2"); * ResultSetMetaData rsmd = rs.getMetaData(); * int numberOfColumns = rsmd.getColumnCount(); * boolean b = rsmd.isSearchable(1); * * </PRE> */ public interface ResultSetMetaData extends Wrapper { /** * Returns the number of columns in this <code>ResultSet</code> object. * * @return the number of columns * @exception SQLException if a database access error occurs */ int getColumnCount() throws SQLException; /** * Indicates whether the designated column is automatically numbered. * * @param column the first column is 1, the second is 2, ... * @return <code>true</code> if so; <code>false</code> otherwise * @exception SQLException if a database access error occurs */ boolean isAutoIncrement(int column) throws SQLException; /** * Indicates whether a column's case matters. * * @param column the first column is 1, the second is 2, ... * @return <code>true</code> if so; <code>false</code> otherwise * @exception SQLException if a database access error occurs */ boolean isCaseSensitive(int column) throws SQLException; /** * Indicates whether the designated column can be used in a where clause. * * @param column the first column is 1, the second is 2, ... * @return <code>true</code> if so; <code>false</code> otherwise * @exception SQLException if a database access error occurs */ boolean isSearchable(int column) throws SQLException; /** * Indicates whether the designated column is a cash value. * * @param column the first column is 1, the second is 2, ... * @return <code>true</code> if so; <code>false</code> otherwise * @exception SQLException if a database access error occurs */ boolean isCurrency(int column) throws SQLException; /** * Indicates the nullability of values in the designated column. * * @param column the first column is 1, the second is 2, ... * @return the nullability status of the given column; one of <code>columnNoNulls</code>, * <code>columnNullable</code> or <code>columnNullableUnknown</code> * @exception SQLException if a database access error occurs */ int isNullable(int column) throws SQLException; /** * The constant indicating that a * column does not allow <code>NULL</code> values. */ int columnNoNulls = 0; /** * The constant indicating that a * column allows <code>NULL</code> values. */ int columnNullable = 1; /** * The constant indicating that the * nullability of a column's values is unknown. */ int columnNullableUnknown = 2; /** * Indicates whether values in the designated column are signed numbers. * * @param column the first column is 1, the second is 2, ... * @return <code>true</code> if so; <code>false</code> otherwise * @exception SQLException if a database access error occurs */ boolean isSigned(int column) throws SQLException; /** * Indicates the designated column's normal maximum width in characters. * * @param column the first column is 1, the second is 2, ... * @return the normal maximum number of characters allowed as the width * of the designated column * @exception SQLException if a database access error occurs */ int getColumnDisplaySize(int column) throws SQLException; /** * Gets the designated column's suggested title for use in printouts and * displays. The suggested title is usually specified by the SQL <code>AS</code> * clause. If a SQL <code>AS</code> is not specified, the value returned from * <code>getColumnLabel</code> will be the same as the value returned by the * <code>getColumnName</code> method. * * @param column the first column is 1, the second is 2, ... * @return the suggested column title * @exception SQLException if a database access error occurs */ String getColumnLabel(int column) throws SQLException; /** * Get the designated column's name. * * @param column the first column is 1, the second is 2, ... * @return column name * @exception SQLException if a database access error occurs */ String getColumnName(int column) throws SQLException; /** * Get the designated column's table's schema. * * @param column the first column is 1, the second is 2, ... * @return schema name or "" if not applicable * @exception SQLException if a database access error occurs */ String getSchemaName(int column) throws SQLException; /** * Get the designated column's specified column size. * For numeric data, this is the maximum precision. For character data, this is the length in characters. * For datetime datatypes, this is the length in characters of the String representation (assuming the * maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype, * this is the length in bytes. 0 is returned for data types where the * column size is not applicable. * * @param column the first column is 1, the second is 2, ... * @return precision * @exception SQLException if a database access error occurs */ int getPrecision(int column) throws SQLException; /** * Gets the designated column's number of digits to right of the decimal point. * 0 is returned for data types where the scale is not applicable. * * @param column the first column is 1, the second is 2, ... * @return scale * @exception SQLException if a database access error occurs */ int getScale(int column) throws SQLException; /** * Gets the designated column's table name. * * @param column the first column is 1, the second is 2, ... * @return table name or "" if not applicable * @exception SQLException if a database access error occurs */ String getTableName(int column) throws SQLException; /** * Gets the designated column's table's catalog name. * * @param column the first column is 1, the second is 2, ... * @return the name of the catalog for the table in which the given column * appears or "" if not applicable * @exception SQLException if a database access error occurs */ String getCatalogName(int column) throws SQLException; /** * Retrieves the designated column's SQL type. * * @param column the first column is 1, the second is 2, ... * @return SQL type from java.sql.Types * @exception SQLException if a database access error occurs * @see Types */ int getColumnType(int column) throws SQLException; /** * Retrieves the designated column's database-specific type name. * * @param column the first column is 1, the second is 2, ... * @return type name used by the database. If the column type is * a user-defined type, then a fully-qualified type name is returned. * @exception SQLException if a database access error occurs */ String getColumnTypeName(int column) throws SQLException; /** * Indicates whether the designated column is definitely not writable. * * @param column the first column is 1, the second is 2, ... * @return <code>true</code> if so; <code>false</code> otherwise * @exception SQLException if a database access error occurs */ boolean isReadOnly(int column) throws SQLException; /** * Indicates whether it is possible for a write on the designated column to succeed. * * @param column the first column is 1, the second is 2, ... * @return <code>true</code> if so; <code>false</code> otherwise * @exception SQLException if a database access error occurs */ boolean isWritable(int column) throws SQLException; /** * Indicates whether a write on the designated column will definitely succeed. * * @param column the first column is 1, the second is 2, ... * @return <code>true</code> if so; <code>false</code> otherwise * @exception SQLException if a database access error occurs */ boolean isDefinitelyWritable(int column) throws SQLException; //--------------------------JDBC 2.0----------------------------------- /** * <p>Returns the fully-qualified name of the Java class whose instances * are manufactured if the method <code>ResultSet.getObject</code> * is called to retrieve a value * from the column. <code>ResultSet.getObject</code> may return a subclass of the * class returned by this method. * * @param column the first column is 1, the second is 2, ... * @return the fully-qualified name of the class in the Java programming * language that would be used by the method * <code>ResultSet.getObject</code> to retrieve the value in the specified * column. This is the class name used for custom mapping. * @exception SQLException if a database access error occurs * @since 1.2 */ String getColumnClassName(int column) throws SQLException; }
Java 通过JDBC查询数据库表结构(字段名称,类型,长度等)的更多相关文章
- 通过jdbc取得数据库表结构信息
做制作开发平台时,首要的一点是如何取得数据库表结构信息.一般通用的做法就是通过JDBC中的ResultSetMetaData类来进行操作,当你取得了数据库表结构信息后,比如说表的每个字段名称,字段类型 ...
- Oracle查询数据表结构(字段,类型,大小,备注)
作用:想要生成整个Oracle数据库所有表结构WORD文档(数据库设计说明书) Oracle数据库字典介绍 Oracle数据字典是有表和视图组成的,存储有关数据库结构信息的一些数据库对象.数据库 ...
- mssqlserver 查询数据库表结构语句
查询指定表结构的表名.列名.类型.说明.字段长度 select o.name as tableName,c.name as columnName,t.name as columnType,p.valu ...
- MySQL数据库中查询数据库表、字段总数量,查询数据总量
最近要查询一些数据库的基本情况,由于以前用oracle数据库比较多,现在换了MySQL数据库,就整理了一部分语句记录下来. 1.查询数据库表数量 #查询MySQL服务中数据库表数据量 SELECT C ...
- sql语句查询数据库表结构信息
开发中经常用到查询指定表及其字段的信息,以下是我整理的SQL语句查询方法,供自己平时使用也提供给大家参考! 1.适用MS SQL SERVER: SELECT 表名 = then d.name els ...
- Mysql查询数据库表结构以及字段类型并展示
1.建表语句sys_user CREATE TABLE `sys_user` ( `id` varchar(32) NOT NULL COMMENT '编号', `dept_id` varchar(3 ...
- 获取mssqlserver数据库表的字段名称,字段说明,数据类型,主键等表的信息
sql脚本: SELECT TableName then d.name else '' end,---表名 TableShowsThat then isnull(f.value,'') else '' ...
- Oracle 查询对应表所有字段名称,可排除不想要的字段
由于Oracle varchar类型长度限制为4000 ,以下方法仅支持查询字段拼接后长度小于等于4000 第一种方法 select wm_concat(column_name) from user_ ...
- mysql 查询数据库表结构
1. mysql> describe tmp_log; +----------+------------------+------+-----+---------+--------------- ...
随机推荐
- javascript之工厂方式定义对象
每一个函数对象都有一个length属性,表示该函数期望接收的参数个数. <html> <head> <script type="text/javascript& ...
- Windows Server 2008 下ASP程序连接ORACLE数据库驱动错误
今天开发那边升级.改造系统过程中,在测试服务器碰到关于ASP程序连接ORACLE数据库的小问题,虽然是小问题,但是整起来真要命啊,花了不少时间,主要是ASP程序啊,这种上古神器,哥还是当年毕业的时候弄 ...
- WebApi 使用PUT和DELETE时报405的问题
最近两天写了个项目,里面有一个接口是用谓词delete接收请求. 本地完全没问题,但是当发布到服务器上之后(IIS7.5),就报出 405.0 - Method Not Allowed 很明显是配置问 ...
- java web项目自动部署到Tomcat的原因
关于eclipse中MAVEN WEB工程中编译问题 这几天是被java的环境搞疯了,我先是搭了一个spring+springmvc+mybatis的工程,在家里跑了一下,没有问题,把工程带到公司里用 ...
- mysql,sql server,oracle 唯一索引字段是否允许出现多个 null 值?
最近一个项目,涉及到sql server 2008,因为业务需求,希望建立一个唯一索引,但是发现在sql server中,唯一索引字段不能出现多个null值,下面是报错信息: CREATE UNIQU ...
- 08_Queue(队列UVa 10128)
问题描述:n(1<=n<=13)个身高均不相等的人站成一排,从左向右看能看见L个人,从右向左看能看见R个人,问这个队列有多少种排法? 问题分析: 1.n个人的身高可设为1~n, 2.设d ...
- linux 创建和删除目录
创建目录命令 mkdir 目录名 [root@wang whp]# mkdir catalog[root@wang whp]# lscatalog [root@wang whp]# mkdir cat ...
- 记一次查内存异常问题(续《记一次Web应用CPU偏高》)
继上一次查应用的CPU飙高问题(http://www.cnblogs.com/hzmark/p/JVM_CPU.html)过去10天了.上次只是定位到了是一个第三方包占用了大量的CPU使用,但没有细致 ...
- 【ASP.NET 进阶】定时执行任务
原理:利用全局应用程序类 Global.asax 和 System.Timers.Timer 类定时处理任务. 示例效果图: 其 Global.asax 类代码如下: using System; u ...
- 事件查看器常见ID代码解释
ID 类型 来 源 代 表 的 意 义 举 例 解 释 信息 Serial 在验证 \Device\Serial1 是否确实是串行口时,系统检测到先进先出方式(fifo).将使用该方式. 错误 W ...