2013-12-18 72 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中的关键价值在于它的列名? –

相关问题