(1)Meta-Data:关于数据的数据,在此是有关数据库和数据库表等数据库对象的信息;
通过Connection的getMetaData()方法获得包含数据库元数据的DatabaseMetaData对象,然后在此对象上调用相关的方法获得对应的信息;
(2)DatabaseMetaData meta = connection.getMetaData();
通过DatabaseMetaData可以获得数据库相关的信息如:数据库版本、数据库名、数据库厂商信息、是否支持事务、是否支持某种事务隔离级别,是否支持滚动结果集等。
ParameterMetaData pmd =
preparedStatement.getParameterMetaData();
通过 ParameterMetaData可以获得参数信息。
(3)ResultSetMetaData meta = rs.getMetaData();
通过ResultSetMetaData可以获得结果有几列、各列名、各列别名、各列类型等。
可以将ResultSet放入Map(key:列名 value:列值)。
用反射ResultSetMetaData将查询结果读入对象中(简单的O/RMapping)
1)让SQL语句中列别名和要读入的对象属性名一样;
2)通过ResultSetMetaData获得结果列数和列别名;
3)通过反射将对象的所有setXxx方法找到;
4)将3)找到的方法setXxx和2)找到的列别名进行匹配(即方法中的xxx于列别名相等);
5)由上一步找到的方法和列别名对应关系进行赋值
Method.invoke(obj,
rs.getObject(columnAliasName));
代码如下所示:
package com.mysql;
import java.sql.Connection;
import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
public class Select {
public void select(int key){
Connection conn = null;
PreparedStatement ps =
null;
ResultSet rs = null;
String sql ="select
v_name,v_pass,v_sex from t_user where id = ? ";
try {
conn =
Tooles.getConnection();
java.sql.DatabaseMetaData
dm = conn.getMetaData();
ps =
conn.prepareStatement(sql);
ps.setInt(1,
key);
rs =
ps.executeQuery();
ParameterMetaData
pm = ps.getParameterMetaData();
ResultSetMetaData
rsm = rs.getMetaData();
while(rs.next()){
System.out.println(rs.getString(1)
+ rs.getString(2)+rs.getString(3));
}
System.out.println("**************************************");
System.out.println(dm.doesMaxRowSizeIncludeBlobs());
System.out.println(dm.getDriverName());
System.out.println(dm.getDriverVersion());
System.out.println(dm.getURL());
System.out.println(dm.getUserName());
System.out.println("****************************************");
System.out.println(pm.getParameterCount());
System.out.println("****************************************");
System.out.println(rsm.getColumnCount());
System.out.println(rsm.getCatalogName(1));
System.out.println(rsm.getColumnClassName(1));
System.out.println(rsm.getColumnDisplaySize(1));
} catch (SQLException e)
{
e.printStackTrace();
}finally{
Tooles.free(rs,
ps, conn);
}
}
public static void main(String[] args) {
new Select().select(10);
}
}