[英]java.sql: Validate ResultSet format
我想將java.sql.ResultSet
解析為Map<String, String>
,並且要驗證三件事:
key
且類型應為String
value
並且應為String
類型 這是我到目前為止在類HiveStatementOutputContent
:
protected Map<String, String> keyValueOutput;
public HiveStatementOutputContent(ResultSet s) throws Exception {
if(s.findColumn("key") != 0 )
throw new Exception("Error in SQL result: First column has to be 'key'.");
if(s.findColumn("value") != 1)
throw new Exception("Error in SQL result: Second column has to be 'value'.");
//TODO: Validate type
//TODO: Validate number of columns
while ( s.next() )
{
keyValueOutput.put(s.getString(0),s.getString(1));
}
}
最好的方法是什么?
如果您關心將哪個項作為鍵插入,將哪個項作為值插入,我認為在ResultSet
迭代並獲取String時,僅使用列別名會更簡單。
while ( s.next() )
{
keyValueOutput.put(s.getString("key"),s.getString("value"));
}
https://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#getString(java.lang.String)
您沒有得到在SQL結果中的value
之前的key
驗證,但是您將代碼位與SQL分離,因為上面所有代碼都在乎是否有一個key
和一個value
列(確切地說是SQL中的列名,或SQL查詢中的AS
別名)。
如果要驗證列的順序,它們的名稱和數據類型,可以通過調用s.getMetaData()
使用ResultSetMetaData
對象。 然后,您可以調用metadata.getColumnName(int)
和metadata.getColumnType(int)
來驗證列的名稱和數據類型。 您還可以利用getColumnCount
來驗證您沒有拉出任何額外的列。 請參閱: https : //docs.oracle.com/javase/7/docs/api/java/sql/ResultSetMetaData.html#getColumnName(int) https://docs.oracle.com/javase/7/docs/api/ java / sql / ResultSetMetaData.html#getColumnType(int)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.