元数据是什么?元数据就是本身固有的特性,比如数据库的元数据,就是指数据库本身具有的各种特性,如是否支持事务,数据库名称等。
在JDBC中,元数据主要包括三种,即数据库元数据(DatabaseMetaData)、参数元数据(ParameterMetaData)、结果集元数据(ResultSetMetaData)
数据库元数据:
Connection conn = JdbcUtils.getConnection();
DatabaseMetaData dbmd = conn.getMetaData(); //获得数据库元数据对象
System.out.println( dbmd.getDatabaseProductName()); //打印数据库名称
Systme.out.println( dbmd.supportsTransactions()); //打印是否支持事务
.........需要注意,数据库元数据的对象是从connection中获取的,而其他元数据则是从PreparedStatement与ResultSet获取的。
参数元数据:
PreparedStatement pStatement = conn.prepareStatement(sql);
ParameterMetaData pmd = pStatement.getParameterMetaData();
int count = pmd.getParameterCount();//获取到参数的个数
for(int i = 1; i < count;i++)
{
System.out.println(pmd.getParameterClassName(i));//打印JAVA数据类型名, 如java.lang.String
System.out.println(pmd.getParameterType(i));//打印数据库类型号
System.out.println(pmd.getParameterTypeName(i));//打印数据库类型名,如varchar
}
数据集元数据:
这个元数据是最重要的,很多ORM框架就是使用JDBC获取数据后,根据结果集元数据给对象赋值(利用反射技术),实现对象的持久化的,上代码:
public static void read(String sql) throws SQLException{
JDBCToolSingleTon jDBCToolSingleTon = JDBCToolSingleTon.getInstance();
Connection conn = jDBCToolSingleTon.getConnection();
PreparedStatement pStatement = conn.prepareStatement(sql);
ResultSet resultSet = pStatement.executeQuery();//注意,这里不能加上参数,否则就是调用了Statement了
ResultSetMetaData rsmd = resultSet.getMetaData();//获取结果集源数据
int count = rsmd.getColumnCount();//获取列数量
String[] colNames = new String[count];
for(int i = 1; i <=count;i++){
System.out.println(rsmd.getColumnClassName(i));//类名
System.out.println(rsmd.getColumnName(i));//列名
System.out.println(rsmd.getColumnLabel(i));//列标签
}
Map<String,Object> data = null;
if(resultSet.next()){
data = new HashMap<String,Object>();
for(int i = 0; i <colNames.length;i++ ){
data.put(colNames[i], resultSet.getObject(colNames[i]));
}
System.out.println(resultSet.getString("name"));
}
jDBCToolSingleTon.freeResource(conn, resultSet, pStatement);