mysql中jdbc的metadata_JDBC(九)DatabaseMetaData 数据库元数据

本文介绍了如何使用Java中的DatabaseMetaData接口来获取数据库的各种元数据信息,包括数据库名称、版本、驱动版本、表信息、列信息及主键信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过java.sql.DatabaseMetaData 接口,我们能获取到数据库的列表、列等信息。

DatabaseMetaData 接口包含了许多方法,这里值介绍常用的。

获取 DatabaseMetaData 实例对象

DatabaseMetaData databaseMetaData = connection.getMetaData();

获取数据库名和版本

int majorVersion = databaseMetaData.getDatabaseMajorVersion();

int minorVersion = databaseMetaData.getDatabaseMinorVersion();

String productName = databaseMetaData.getDatabaseProductName();

String productVersion = databaseMetaData.getDatabaseProductVersion();

数据库属性信息:5 6 MySQL 5.6.24

获取数据库驱动版本

int driverMajorVersion = databaseMetaData.getDriverMajorVersion();

int driverMinorVersion = databaseMetaData.getDriverMinorVersion();

获取数据库列表

String catalog = null;

String schemaPattern = null;

String tableNamePattern = null;

String[] types = null;

ResultSet result = databaseMetaData.getTables(

catalog, schemaPattern, tableNamePattern, types );

while(result.next()) {

String tableName = result.getString(3);

}

getTables()方法源码:

ResultSet getTables(String catalog, String schemaPattern,

String tableNamePattern, String types[]) throws SQLException;

我在这里给四个参数都赋值null,则它会把所有数据库中的表信息 返回。

此ResultSet包含10列,每列包含有关给定表的信息。 索引3指的是表名称。

user

在表中列出列

String catalog = null;

String schemaPattern = null;

String tableNamePattern = "user";

String columnNamePattern = null;

ResultSet result = databaseMetaData.getColumns(

catalog, schemaPattern, tableNamePattern, columnNamePattern);

while(result.next()){

String columnName = result.getString(4);

int columnType = result.getInt(5);

}

getColumns()方法返回的ResultSet包含给定表的列的列表。 索引为4的列包含列名称,索引为5的列包含列类型。 列类型是一个与java.sql.Types中的类型常量匹配的整数。

id 4

username 12

birthday 91

sex 1

address 12

表的主键

String catalog = null;

String schema = null;

String tableName = "user";

ResultSet result = databaseMetaData.getPrimaryKeys(

catalog, schema, tableName);

while(result.next()){

String columnName = result.getString(4);

}

调用getPrimaryKeys()方法,向其传递3个参数。 在这个例子中,只有tableName是非空的。

getPrimaryKeys()方法返回的ResultSet包含组成给定表主键的列表。 索引4指的是的列名称。

主键可以由多个列组成。 这样的密钥被称为复合密钥。 如果表包含复合键,则ResultSet将包含多行。 复合键中的每一列都有一行。

id

全部代码

package com.jdbc;

import java.sql.*;

/**

* Created by Fant.J.

* 2018/3/5 21:38

*/

public class DatabaseMetaDataTest {

public static void main(String[] args) {

String url = "jdbc:mysql://localhost:3306/user";

String user = "root";

String password = "root";

Connection connection =null;

try {

Class.forName("com.mysql.jdbc.Driver");

connection = DriverManager.getConnection(url,user,password);

DatabaseMetaData databaseMetaData = connection.getMetaData();

int majorVersion = databaseMetaData.getDatabaseMajorVersion();

int minorVersion = databaseMetaData.getDatabaseMinorVersion();

String productName = databaseMetaData.getDatabaseProductName();

String productVersion = databaseMetaData.getDatabaseProductVersion();

System.out.println("数据库属性信息:"+majorVersion+" "+minorVersion+" "+productName+" "+productVersion);

int driverMajorVersion = databaseMetaData.getDriverMajorVersion();

int driverMinorVersion = databaseMetaData.getDriverMinorVersion();

System.out.println("驱动信息:"+driverMajorVersion+" "+driverMinorVersion);

/* String catalog = null;

String schemaPattern = null;

String tableNamePattern = null;

String[] types = null;

ResultSet result = databaseMetaData.getTables(

catalog, schemaPattern, tableNamePattern, types );

while(result.next()) {

String tableName = result.getString(3);

System.out.println(tableName);

}*/

/* String catalog = null;

String schemaPattern = null;

String tableNamePattern = "user";

String columnNamePattern = null;

ResultSet result = databaseMetaData.getColumns(

catalog, schemaPattern, tableNamePattern, columnNamePattern);

while(result.next()){

String columnName = result.getString(4);

int columnType = result.getInt(5);

System.out.println(columnName+" "+columnType+" ");

}*/

String catalog = null;

String schema = null;

String tableName = "user";

ResultSet result = databaseMetaData.getPrimaryKeys(

catalog, schema, tableName);

while(result.next()){

String columnName = result.getString(4);

System.out.println(columnName);

}

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值