元数据:除了表之外的数据都可以看做是元数据,可以分为三类
- 查询结果信息: UPDATE 或 DELETE语句 受影响的记录数。
- 数据库和数据表的信息: 包含了数据库及数据表的结构信息。
- MySQL服务器信息: 包含了数据库服务器的当前状态,版本号等。
SQL中获取元数据信息命令
# 元数据相关命令
# 1.查看服务器当前状态
SHOW STATUS;
# 2.查看MySQL的版本信息
SELECT VERSION();
# 3.查看表中的详细信息
SHOW COLUMNS FROM employee0;
# 4.显示数据表的索引信息
SHOW INDEX FROM testbatch;
# 5.列出所有数据库
SHOW DATABASES;
# 6.列出当前数据库中所有表
SHOW TABLES;
# 7.获取当前数据库名
SELECT DATABASE();
JDBC获取元数据
- JDBC中描述元数据的类:
元数据类 | 作用 |
DataBaseMetaData | 描述数据库的元数据对象 |
ResultSetMetaData | 描述结果集的元数据对象 |
- 获取元数据对象的方法:getMetaData()
①connection对象:调用 getMetaData()方法,获取的是DatabaseMetaData,数据库元数据对象
方法 | 说明 |
getURL() | 获取数据库的url |
getUserName() | 获取当前数据库的用户名 |
getDatabaseProductName() | 获取数据库的产品名称 |
getDatabaseProductVersion() | 获取数据的版本号 |
getDriverName() | 返回驱动程序的名称 |
isReadOnly() | 判断数据库是否只允许只读 true 代表只读 |
- ②PrepareStatement对象:调用getMetaData(),获取的是ResultSetMetaData,结果集元数据对象
方法 | 说明 |
getColumnCount() | 当前结果集共有多少列 |
getColumnName(int i) | 获取指定列号的列名, 参数是整数 从1开始 |
getColumnTypeName(int i) | 获取指定列号列的类型, 参数是整数 从1开始 |
public class TestMetaData {
// 获取数据库相关元数据信息,使用DatabaseMetaData
@Test
public void testDataBaseMetaData() throws Exception {
// 获取链接
Connection conn = DruidUtils.getConnection();
// 获取代表数据库的元数据对象
DatabaseMetaData metaData = conn.getMetaData();
// 获取数据库相关元数据信息
String url = metaData.getURL();
System.out.println("数据库的url:" + url);
String userName = metaData.getUserName();
System.out.println("用户名:" + userName);
String databaseProductName = metaData.getDatabaseProductName();
System.out.println("数据库产品名称:" + databaseProductName);
String databaseProductVersion = metaData.getDatabaseProductVersion();
System.out.println("数据库版本:" + databaseProductVersion);
String driverName = metaData.getDriverName();
System.out.println("驱动名称" + driverName);
// 判断当前数据库是否为 “只读”
boolean readOnly = metaData.isReadOnly();
if (readOnly) { System.out.println("当前数据库为“只读”"); }else { System.out.println("当前数据库不是“只读”"); }
// 关掉
conn.close();
}
@Test
public void testResultSetMetaData() throws Exception {
// 获取连接
Connection conn = DruidUtils.getConnection();
// 获取预处理对象
PreparedStatement pstmt = conn.prepareStatement("select * from employee0");
ResultSet rs = pstmt.executeQuery();
// 获取结果集元数据对象
ResultSetMetaData metaData = pstmt.getMetaData();
// 获取当前结果集共有多少列
int columnCount = metaData.getColumnCount();
System.out.println("当前结果集中共有:" + columnCount + "列");
// 获取结果集中的名称和类型
for (int i = 1; i < columnCount; i++) {
String columnName = metaData.getColumnName(i);
System.out.print("列名:" + columnName);
String columnTypeName = metaData.getColumnTypeName(i);
System.out.println(" 类型:" + columnTypeName);
}
// 释放资源
DruidUtils.close(conn,pstmt,rs);
}
}