元数据是关于数据的组织,数据域及其关系的信息,简而言之,元数据就是关于数据的数据。
好比,我们得到数据库、表、列等的定义信息。这些信息,就是元数据。
JDBC针对元数据的操作主要由常用的三个借口展开,即Connection,Statement,ResultSet:数据库元数据(DatabaseMetaData)、参数元数据(ParameterMetaData)、结果集元数据(ResultSetMetaData)。
一、数据库元数据(DatabaseMetaData)
数据库元数据(DatabaseMetaData),主要拿的是有关于数据库的相关信息,通过Connection.getDatabaseMetaData()得到数据库元数据对象(DatabaseMeatData)。该对象有如下常用方法:
- getURL():返回一个String类对象,代表数据库的URL。
- getUserName():返回连接当前数据库管理系统的用户名。
- getDatabaseProductName():返回数据库的产品名称。
- getDatabaseProductVersion():返回数据库的版本号。
- getDriverName():返回驱动驱动程序的名称。
- getDriverVersion():返回驱动程序的版本号。
- isReadOnly():返回一个boolean值,指示数据库是否只允许读操作。
代码示例:
//1.数据库元数据
@Test
public void testDB() throws Exception{
//获取连接
Connection conn = JdbcUtil.getConnection();
//获取数据库元数据
DatabaseMetaData metaData = (DatabaseMetaData) conn.getMetaData();
System.out.println(metaData.getUserName());
System.out.println(metaData.getURL());
System.out.println(metaData.getDatabaseProductName());
}
二、参数元数据(ParameterMetaData)
参数元数据(ParameterMetaData),主要是获取对于预编译sql语句的一些信息。PreparedStatement . getParameterMetaData()获得代表PreparedStatement元数据的ParameterMetaData对象。该对象常用方法如下:
- getParameterCount() :获得指定参数的个数
- getParameterType(int param) :获得指定参数的sql类型
代码示例:
//2.参数元数据
@Test
public void testParams() throws Exception{
//获取连接
Connection conn = JdbcUtil.getConnection();
//SQL
String sql = "select * from dept where deptId=? and deptName=?";
PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement(sql);
//参数元数据
ParameterMetaData p_metaData = pstmt.getParameterMetaData();
//获取参数个数
int count = p_metaData.getParameterCount();
System.out.println(count);
}
三、结果集元数据(ResultSetMetaData)
结果集元数据(ResultSetMetaData),主要获取返回的结果集信息。ResultSet. getMetaData() 获得代表ResultSet对象元数据的ResultSetMetaData对象。该对象常用方法如下:
- getColumnCount() :返回resultset对象的列数
- getColumnName(int column) :获得指定列的名称
- getColumnTypeName(int column):获得指定列的类型
代码示例:
//3.结果集元数据
@Test
public void testRS() throws Exception {
String sql = "select * from dept";
//获取连接
Connection conn = JdbcUtil.getConnection();
//预编译sql
PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement(sql);
//返回结果集
ResultSet rs = pstmt.executeQuery();
//得到结果集元数据(目标:通过结果集元数据,得到各列的名称)
ResultSetMetaData rs_metaData = (ResultSetMetaData) rs.getMetaData();
//迭代每一行的结果
while(rs.next()){
//1.获取列的个数
int count = rs_metaData.getColumnCount();
//2.遍历得到每一列的名称
for(int i = 0;i<count;i++){
//得到列的名称
int j = 1;
String columnName = rs_metaData.getColumnName(i + j);
//获取每一列的值
Object columnValue = rs.getObject(i+1);
//测试
System.out.println(columnName + "+" + columnValue);
}
}
}
元数据结合BeanUtils可以定义一个持久层框架。