从数据库一次获取一个结果(当存在多个结果时)

时间:2013-07-01 19:29:58

标签: java sql database psql

我有一个数据库,其中多个行具有相同的值。 例如,

  

Column1 Column2

A       X
A       Y
A       Z

结果集将第2列的所有值作为单个字符串。 如何从数据库(或结果集)中获取每个唯一值?

(我用java)

提前致谢。

2 个答案:

答案 0 :(得分:0)

看看

SELECT columna ,
(SELECT  GROUP_CONCAT(DISTINCT columnb SEPARATOR ' ') FROM test 
WHERE columna=t.`columna` ) as columnb_string    
FROM `test` t GROUP BY columna

这是 Fiddle Example

答案 1 :(得分:-2)

您使用什么查询/代码将第二列全部作为字符串?在数据库系统本身测试您的查询总是一个好主意,或者您可以使用SQLFiddle来确保您从查询中获得期望的结果

来自Doc:

  

ResultSet对象维护指向其当前数据行的游标。最初,光标位于第一行之前。下一个方法将游标移动到下一行,因为当ResultSet对象中没有更多行时它返回false,它可以在while循环中用于迭代结果集。

阅读Java Doc for ResultSet

的其余部分

从数据库获取值的典型方法是

//Construct a statement
String yourStatement = "Select COLUMN_B from aTable WHERE COLUMN_A LIKE 'A'" // EDITED
PreparedStatement aPrepStatement = null;
ResultSet rs = null;
List<String> aList = new ArrayList<String>(); // ADDED
try
{
   aPrepStatement = yourConnection.prepareStatement(yourStatement)
   rs = aPrepStatement.executeQuery();
   while(rs.next())
   {
       // You are now in the first row of data depending on your query
       // String column1 = rs.getString(1);   // 'A' In the table you descrbed above (for first iteration
       String column2 = rs.getString(1);   // 'X' In the table you descrbed above
       // Now do what you need to with the data
       aList.add(column2)  // EDITED

   }
 }
 catch (Exception ex) {
      // deal with any exceptions that arise
      ex.printStackTrace();
 }
 finally
{
    //Close your Resultset and prepared statement (this will possibly need a try catch block also
    if(rs != null)
        rs.close();
    if(aPrepStatement != null)
        aPrepStatement.close();
}
// ADDED BELOW
for(String s: aList)
    System.out.println(s) // should give output
                          // X
                          // Y
                          // Z    

PreparedStatementConnection

的文档