元數據是什麼?元數據就是本身固有的特性,比如數據庫的元數據,就是指數據庫本身具有的各種特性,如是否支持事務,數據庫名稱等。
在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);