當前位置:編程學習大全網 - 源碼下載 - Spring JdbcTemplate怎樣獲得表中的所有字段

Spring JdbcTemplate怎樣獲得表中的所有字段

壹、 通過SqlRowSetMetaData類

使用到的類或接口有如下幾個:

org.springframework.jdbc.support.rowset.SqlRowSet接口:該對象和javax.sql.RowSet類相對應,它和RowSet的區別是SqlRowSet中的方法從來不會拋出SQLException異常,通過jdbcTemplate可以獲得該對象的實例;

org.springframework.jdbc.support.rowset.SqlRowSetMetaData接口:是對應於SqlRowSet的元數據接口,和java.sql.ResultSetMetaData相壹致,也只是從來不會拋出SQLException異常,通過SqlRowSet可以獲得該類的實例;

具體使用實例如下:

SqlRowSet?rowSet?=?jdbcTemplate.queryForRowSet("select?*?from?user?limit?0");?

SqlRowSetMetaData?metaData?=?rowSet.getMetaData();?

int?columnCount?=?metaData.getColumnCount();?

for?(int?i?=?1;?i?<=?columnCount;?i++)?{

Map<String,String>?fieldMap?=?new?HashMap<String,String>();?

fieldMap.put("ColumnName",?metaData.getColumnName(i));?

fieldMap.put("ColumnType",?String.valueOf(metaData.getColumnType(i)));?

fieldMap.put("ColumnTypeName",?metaData.getColumnTypeName(i));?

fieldMap.put("CatalogName",?metaData.getCatalogName(i));?

fieldMap.put("ColumnClassName",?metaData.getColumnClassName(i));?

fieldMap.put("ColumnLabel",?metaData.getColumnLabel(i));?

fieldMap.put("Precision",?String.valueOf(metaData.getPrecision(i)));?

fieldMap.put("Scale",?String.valueOf(metaData.getScale(i)));?

fieldMap.put("SchemaName",?metaData.getSchemaName(i));?

fieldMap.put("TableName",?metaData.getTableName(i));?

fieldMap.put("SchemaName",?metaData.getSchemaName(i));?

System.out.println(fieldMap);?

}

上述所用的信息都應列出來了,發現只有壹些簡單的信息,並沒有涉及索引和其他約束等的信息。

二、通過RowCountCallbackHandler類

使用到的類或接口有如下幾個:

org.springframework.jdbc.core.RowCallbackHandler接口:用於處理結果集中的每壹行數據;

org.springframework.jdbc.core.RowCountCallbackHandler類:實現了RowCallbackHandler接口,其中簡單的實現了對結果集元數據的獲取,包括行數、列數、列名、列的類型等信息,順便說壹下這個類的實例只可以用壹次;

在源代碼中給出了簡單的使用方式,如下:

JdbcTemplate?jdbcTemplate?=?new?JdbcTemplate(dataSource);?//?reusable?object?

RowCountCallbackHandler?countCallback?=?new?RowCountCallbackHandler();?//?not?reusable?

jdbcTemplate.query("select?*?from?user",?countCallback);?

int?rowCount?=?countCallback.getRowCount();

所有能獲得的信息如下:

String?sql?=?"select?*?from?user";?

RowCountCallbackHandler?rcch?=?new?RowCountCallbackHandler();?

jdbcTemplate.query(sql,?rcch);?

System.out.println("column?count?:"?+?rcch.getColumnCount());?

System.out.println("column?count?:"?+?rcch.getRowCount());?

for(int?i=0;?i<rcch.getColumnCount();?i++){?

System.out.println("column?name?:"?+?rcch.getColumnNames()[i]);?

System.out.println("column?type?:"?+?rcch.getColumnTypes()[i]);?

}

輸出如下:

從輸出可以看出有壹個問題,列的類型只能用數字來標識,這與java.sql.Types相對應,我們可以通過壹下的程序來獲得字符串的形式:

String?getTypeName(int?type)?throws?SQLException?{?

switch?(type)?{?

case?Types.ARRAY:?

break;?

case?Types.BIGINT:?

return?"BIGINT";?

case?Types.BINARY:?

return?"BINARY";?

case?Types.BIT:?

return?"BIT";?

case?Types.BLOB:?

return?"BLOB";?

case?Types.BOOLEAN:?

return?"BOOLEAN";?

//..?

}

由以上可知,該類的方法有限,也只能獲得列名和列的類型的信息,關於索引和約束等也沒有涉及

  • 上一篇:朵拉瑪塔和卡魯米是什麽關系?
  • 下一篇:自學嵌入式的流程是什麽?
  • copyright 2024編程學習大全網