2016-09-06 5 views
-2

クエリから結果セットをマップとして返​​す方法を知りたいと思います。 これは 'nameCodesString'が文字列のリストである場合のクエリです。 ('raul', 'peter', 'shawn')ResultSetの内容をマップとして返​​すにはどうすればよいですか?

try (PreparedStatement stmt = conn.prepareStatement("select n.CODE, l.VALUE" 
           + " from TNAME n join TPROPERTIES l on n.UIDPK = l.OBJECT_UID" 
           + " where n.CODE IN (" + nameCodesString + ")")) { 
    try (ResultSet rs = stmt.executeQuery()) { 
     while (rs.next()) { 
      log.info("rs {}",rs); 
      nameCode = rs.getString(1); 
      displayName = rs.getString(2); 
      Person.add(new PersonDTO(nameCode, displayName, "")); 
     } 
    } 
} 

結果はコードと値でなければなりません。私は、データベースへの1つの接続でこれをどのように行うことができるかわかりません。

+3

何をやっているプリペアドステートメント – Jens

+2

とは何の関係もありません「nameCodesString」の値が –

+0

それはのようなものである私を表示:( 'raul'、 'peter'、 'shawn')。 2番目のテーブルにはdisplayNameが含まれています。 –

答えて

0

こんにちはそれはそれは私が、それはあなたのためのヒントことことを願ってちょうど私の提案です!私の提案

String req="select n.CODE, l.VALUE from TNAME n join" 
+" TPROPERTIES l on n.UIDPK  = l.OBJECT_UID " 
+" where n.CODE IN ?"; 
PreparedStatement stmt=null; 
ResultSet rs=null; 

try{ 
    stmt=conn.prepareStatement(req); 
    stmt.setString(1, nameCodesString); 
    rs=stmt.executeQuery(); 
    while(rs.next()){ 
     nameCode = rs.getString(1); 
     displayName = rs.getString(2); 
     Person.add(new PersonDTO(nameCode, displayName, "")); 
    } 
    } 
    catch(SQLException ex){ 
    System.out.println(ex); 
    } 
    finally{ 
    if(rs!=null){ 
      try{ 
       rs.close(); 
      } 
      catch(SQLException ex){} 
     } 
     if(stmt!=null){ 
      try{ 
       stmt.close(); 
      } 
      catch(SQLException ex){} 
     } 
    if(conn!=null){ 
     try{ 
       conn.close(); 
     } 
     catch(SQLException ex){} 
    } 
    } 

です 最高です...

+1

[try-with-resources声明](https://docs.oracle.com/javase/8/docs/technotes/guides/language/try-with-resources.html)について学ぶことを強くお勧めします。 – Holger

+0

ここの地図はどこですか? – RealSkeptic

+0

私はその人が地図であると思ったが、私は彼にクラスのすべてのコードを表示するように頼んだ。 – SANDWIDI

0

私はpreparedStatementsの使用方法を理解できませんでした。最後に、私はそれらを使用してクエリ文字列を実行するに固執しないことを決めた。

Map<String, String> personDetails = new Hashmap(); 
try (Connection conn = dataSource.getConnection(); 
    Statement stmt = conn.createStatement(); 
    ResultSet rs = stmt.executeQuery("select n.CODE, l.VALUE" 
       + " from TNAME n join TPROPERTIES l on n.UIDPK = l.OBJECT_UID" 
       + " where n.CODE IN (" + nameCodesString + ")")) { 
     while (rs.next()) { 
      nameCode = rs.getString(1); 
      displayName = rs.getString(2); 
      personDetails.put(nameCode, displayName); 
     } 
} 
関連する問題