簡體   English   中英

java.sql:驗證ResultSet格式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM