元数据
何为元数据?元数据为描述数据的数据,主要是描述属性的数据的信息。简单的说就是关于数据的数据。而在jdbc的学习中获取数据的定义,如数据库、表、列的定义信息,就要用到元数据。在jdbc中使用的元数据有三种:数据库元数据、参数元数据、结果集元数据。进行元数据的获取之前我们先来定义用来连接和关闭数据库的工具类。
工具类
public class JdbcUtils {
private static String url="jdbc:mysql://localhost:3306/jdbc_deom";
private static String user="root";
private static String password="root";
/**
* 返回连接
* @return
*/
public static Connection getConnection(){
try {
//注册连接驱动
Class.forName("com.mysql.jdbc.Driver");
//返回连接
return DriverManager.getConnection(url, user, password);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 关闭所有连接
* @param conn
* @param stm
* @param rs
*/
public static void closeAll(Connection conn,Statement stm,ResultSet rs){
try {
if (rs!=null){
rs.close();
rs=null;
}
if (stm !=null){
stm.close();
stm=null;
}
if (conn !=null){
conn.close();
conn=null;
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
数据库元数据(DatabaseMetaData)
创建表如下的表:
create table `Admin`(
`id` int(11) NOT NULL AUTO_INCREMENT ,
`userName` varchar(20) ,
`passWord` varchar(20) ,
PRIMARY KEY (`id`)
)
通过连接对象的getMetaData()方法去获取到数据库元数据DatabaseMetaData对象,可以通过该对象获取数据库的url、驱动的名称、驱动的版本、用户名、数据库的产品名称等。
@Test
public void test1() throws Exception {
//获取连接
Connection conn = JdbcUtils.getConnection();
//获取数据库的元数据
DatabaseMetaData meta = conn.getMetaData();
System.out.println("数据库的url:"+meta.getURL());
System.out.println("Driver的名称:"+meta.getDriverName());
System.out.println("用户名:"+meta.getUserName());
System.out.println("数据库产品的名称:"+meta.getDatabaseProductName());
JdbcUtils.closeAll(conn, null, null);
}
参数元数据(ParameterMetaData)
通过PreparedStatement对象中的getParameterMetaData()来获取该对象,该对象主要获取sql语句中的信息,如参数的个数(或者说占位符的个数),在写通用的DAO方法的时候,可以通过参数的个数来迭代,设置参数的值。
@Test
public void test2() throws Exception {
//获取连接
Connection conn = JdbcUtils.getConnection();
//获取参数的元数据
String sql="select * from admin where userName=? and passWord=?";
PreparedStatement pstm = conn.prepareStatement(sql);
//获取参数元数据
ParameterMetaData pmd = pstm.getParameterMetaData();
//获取参数的个数(或者占位符的个数)
int count = pmd.getParameterCount();
System.out.println(count);
JdbcUtils.closeAll(conn, pstm, null);
}
结果集元数据 (ResultSetMetaData)
该对象是通过执行查询sql语句之后得到结果集对象(ResultSet),再通过结果集对象中的getMetaData()方法来获取到我们想要的结果集元数据ResultSetMetaData,我们可以从该对象中获取到查询结果中的列数、列名、列的类型、表名等。
@Test
public void test3() throws Exception {
//获取结果集元数据
Connection conn =JdbcUtils.getConnection();
String sql="select * from admin";
PreparedStatement pstm = conn.prepareStatement(sql);
//结果集
ResultSet rs = pstm.executeQuery();
//获取结果集元数据
ResultSetMetaData rmd = rs.getMetaData();
//迭代
while(rs.next()){
//列数
int columnCount = rmd.getColumnCount();
for(int i=0;i<columnCount;i++){
//获取列的名称
String columnName =rmd.getColumnName(i+1);
//获取列的类型
int type=rmd.getColumnType(i+1);
//表名
System.out.println(rmd.getTableName(i+1));
//根据列的名称从结果集里面获取值
Object columnValue=rs.getObject(columnName);
System.out.println(type+":"+columnName+":"+columnValue);
}
}
JdbcUtils.closeAll(conn, pstm, rs);
}
元数据的定义参考来源:https://baike.baidu.com/item/%E5%85%83%E6%95%B0%E6%8D%AE/1946090?fr=aladdin