2013-12-18 17 views
0

我有一個函數hasColumnBeenIdentified(),它將arraylist()(columnNameList)作爲此方法的參數之一。該方法執行的邏輯是該方法必須連接到數據庫並執行查詢。它執行的查詢是一個select查詢,其中列名將從作爲參數傳遞給該方法的數組列表中檢索。查詢將如下所示Java從列表中提取值並將其作爲列名包含在sql查詢中

String query = "Select columnNameList FROM "+ currTableName + " " + 
       "WHERE ROWNUM <= " + numberOfSamplesForInstaceMatching; 

我在這裏有兩個問題。

  1. 如何從列表(columnNameList)中提取值並在查詢中使用它並執行查詢。即,ColumnNameList包含需要從數據庫中檢索值的列的列表。我需要知道如何在查詢中插入列名。
  2. 執行上述查詢後,一旦我們得到結果集,我想知道如何從結果集中提取列值並將其存儲在散列表中。

注意:方法hasColumnBeenIdentified()將被多次調用,即它將根據特定模式中的表的數量被調用。因此,我無法自定義結果集和columnNamelist,因爲對於每個表,列的數量都會有所不同。

任何幫助,這是非常感謝。在此先感謝

+1

那ColumnNameList「,是字符串數組列表的? –

+0

是它的ArrayList vr3w3c9

+0

這個函數的方法簽名和返回值是什麼?你提到你想將查詢結果存儲在一個HashMap中,但是你也可以將你的方法命名爲hasColumnBeenIdentified(這意味着你想返回一個布爾值並且意味着你根本不需要HashMap)。 – user2910265

回答

1

您可以從列表中創建與COLUMNNAMES一個String並在查詢中使用此字符串。例如。您可以使用下列內容:

String columnsString = org.apache.commons.lang.StringUtils.join(ColumnNameList, ","); 
String query = "Select ColumnNameList FROM "+ currTableName + " " + 
      "WHERE columnName IN (" + columnsString + ")"; 

withou使用外部庫另一種可能性是在創建字符串一個for循環:

StringBuilder builder = new StringBuilder(); 
builder.append(list.remove(0)); 

for(String s : ColumnNameList) { 
    builder.append(", "); 
    builder.append(s); 
} 
1

根據我的理解,你需要在查詢中合併列名稱列表。爲此,您可以迭代您的列表創建逗號分隔字符串的列名稱。

String columnStr = ""; 
for(String columnName : yourList<>) 
{ 
    columnStr += columnName+","; 
} 
columnStr = columnStr.substring(0, columnStr.length()-1); 

在查詢中替換此字符串。

String query = "Select "+columnStr+" FROM "+ currTableName + " " + 
      "WHERE ROWNUM <= " + numberOfSamplesForInstaceMatching; 

爲了得到列名ResultSet回來,你需要像ResultSetMetaData下面給出。

ResultSet rs = ...; //Your ResultSet 
ResultSetMetaData rsm = rs.getMetaData(); 
String columnName = rsm.getColumnName("YourColumnIndex"); //Index start from 1 

爲了將結果存儲在HashMap中,首先需要決定如何將其存儲到HashMap中。

編輯:
您可以使用外部庫加入你的名單分成字符串,其中之一是
Apache's commons lang

像這樣:String columnNames = StringUtils.join(YOUR_LIST,",");

+0

感謝您的快速響應Yagnesh.I嘗試了上述和columnStr返回一個開始時爲空值,後跟第一列名稱。爲了將結果存儲在散列映射中,我將存儲從myList獲得的列名作爲鍵,並且值將來自執行查詢後獲得的結果集.I,e對應於每列的值將被存儲爲值在hashmap中。 – vr3w3c9

+0

最後HashMap的會是這個樣子的HashMap <字符串,ArrayList的> finalValuesMap =新的HashMap <字符串,ArrayList的>() – vr3w3c9

+0

什麼是你的HashMap中的關鍵價值在於它的列名? –

相關問題