jdbc获取mysql数据库表数据_通过jdbc获取数据库中的表结构

本文介绍了如何使用JDBC的MetaData获取MySQL数据库的表信息,包括表名、字段名、字段类型等详细内容。通过示例代码展示了获取表、列信息的步骤,以及解析MetaData中各个字段的方法,帮助读者理解并实现数据库表结构的获取。
摘要由CSDN通过智能技术生成

1、JDBC中通过MetaData来获取具体的表的相关信息。可以查询数据库中的有哪些表,表有哪些字段,字段的属性等等。MetaData中通过一系列getXXX函数,将这些信息存放到ResultSet里面,然后返回给用户。关于MetaData的说明网上也有不少,这里我只是从我自身学习的角度来记录一下简单使用JDBC以及获取数据表相关信息的方法。

DatabaseMetaData dbmd = con.getMetaData();

rs = dbmd.getColumns(con.getCatalog(), schema, tableName, null);

rs.getString(DATA_TYPE) // java.sql.Types 的 SQL 类型

rs.getString(COLUMN_SIZE) //列的大小。对于 char 或 date 类型,列的大小是最大字符数,对于 numeric 和 decimal 类型,列的大小就是精度。

rs.getString(DECIMAL_DIGITS) //小数部分的位数

2、下面就是我的JDBC下的获取表信息的代码了。我是以MySQL 5.0作为测试平台的。可以通过下面四个步骤来实现:

48304ba5e6f9fe08f3fa1abda7d326ab.png

//1. JDBC连接MYSQL的代码很标准。

class.forName("com.mysql.jdbc.Driver").newInstance();

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/test?user=root&password=123456");

//2. 下面就是获取表的信息。

m_DBMetaData = m_Connection.getMetaData();

ResultSet tableRet = m_DBMetaData.getTables(null, "%",m_TableName,new String[]{"TABLE"});

/*其中"%"就是表示*的意思,也就是任意所有的意思。其中m_TableName就是要获取的数据表的名字,如果想获取所有的表的名字,就可以使用"%"来作为参数了。*/

//3. 提取表的名字。

while(tableRet.next) System.out.println(tableRet.getString("TABLE_NAME"));

/*通过getString("TABLE_NAME"),就可以获取表的名字了。

从这里可以看出,前面通过getTables的接口的返回,JDBC是将其所有的结果,保存在一个类似table的内存结构中,而其中TABLE_NAME这个名字的字段就是每个表的名字。*/

//4. 提取表内的字段的名字和类型

String columnName;

String columnType;

ResultSet colRet = m_DBMetaData.getColumns(null,"%", m_TableName,"%");

while(colRet.next()) {

columnName = colRet.getString("COLUMN_NAME");

columnType = colRet.getString("TYPE_NAME");

int datasize = colRet.getInt("COLUMN_SIZE");

int digits = colRet.getInt("DECIMAL_DIGITS");

int nullable = colRet.getInt("NULLABLE");

System.out.println(columnName+" "+columnType+" "+datasize+" "+digits+" "+ nullable);

}

/*JDBC里面通过getColumns的接口,实现对字段的查询。跟getTables一样,"%"表示所有任意的(字段),而m_TableName就是数据表的名字。

getColumns的返回也是将所有的字段放到一个类似的内存中的表,而COLUMN_NAME就是字段的名字,TYPE_NAME就是数据类型,比如"int","int unsigned"等等,COLUMN_SIZE返回整数,就是字段的长度,比如定义的int(8)的字段,返回就是8,最后NULLABLE,返回1就表示可以是Null,而0就表示Not Null。*/

48304ba5e6f9fe08f3fa1abda7d326ab.png

48304ba5e6f9fe08f3fa1abda7d326ab.png

每个列描述都有以下列:

TABLE_CAT String => 表类别(可为 null)

TABLE_SCHEM String => 表模式(可为 null)

TABLE_NAME String => 表名称

COLUMN_NAME String => 列名称

DATA_TYPE int => 来自 java.sql.Types 的 SQL 类型

TYPE_NAME String => 数据源依赖的类型名称,对于 UDT,该类型名称是完全限定的

COLUMN_SIZE int => 列的大小。

BUFFER_LENGTH 未被使用。

DECIMAL_DIGITS int => 小数部分的位数。对于 DECIMAL_DIGITS 不适用的数据类型,则返回 Null。

NUM_PREC_RADIX int => 基数(通常为 10 或 2)

NULLABLE int => 是否允许使用 NULL。

columnNoNulls - 可能不允许使用 NULL 值

columnNullable - 明确允许使用 NULL 值

columnNullableUnknown - 不知道是否可使用 null

REMARKS String => 描述列的注释(可为 null)

COLUMN_DEF String => 该列的默认值,当值在单引号内时应被解释为一个字符串(可为 null)

SQL_DATA_TYPE int => 未使用

SQL_DATETIME_SUB int => 未使用

CHAR_OCTET_LENGTH int => 对于 char 类型,该长度是列中的最大字节数

ORDINAL_POSITION int => 表中的列的索引(从 1 开始)

IS_NULLABLE String => ISO 规则用于确定列是否包括 null。

YES --- 如果参数可以包括 NULL

NO --- 如果参数不可以包括 NULL

空字符串 --- 如果不知道参数是否可以包括 null

SCOPE_CATLOG String => 表的类别,它是引用属性的作用域(如果 DATA_TYPE 不是 REF,则为 null)

SCOPE_SCHEMA String => 表的模式,它是引用属性的作用域(如果 DATA_TYPE 不是 REF,则为 null)

SCOPE_TABLE String => 表名称,它是引用属性的作用域(如果 DATA_TYPE 不是 REF,则为 null)

SOURCE_DATA_TYPE short => 不同类型或用户生成 Ref 类型、来自 java.sql.Types 的 SQL 类型的源类型(如果 DATA_TYPE 不是 DISTINCT 或用户生成的 REF,则为 null)

IS_AUTOINCREMENT String => 指示此列是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值