2013-02-21 3 views
1

JSONArray을 사용하여 데이터베이스에서 데이터를 검색하려고합니다. 내 코드는 잘 작동하지만 데이터베이스의 마지막 항목 만 데이터베이스의 항목 수로 표시합니다.JSONArray를 사용하여 데이터베이스에서 항목을 검색하는 방법

내 코드는 다음과 같습니다

Gson gson = new Gson(); 
    JsonObject myObj = new JsonObject(); 
    JSONObject Obj = new JSONObject(); 
    Connection conn = null; 
    try { 
     conn=prepareConnection(); 
    } catch (ClassNotFoundException e1) { 
     System.out.println("Error --> " + displayErrorForWeb(e1)); 
     e1.printStackTrace(); 
    } catch (SQLException e1) { 
     System.out.println("Error --> " + displayErrorForWeb(e1)); 
     e1.printStackTrace(); 
    } 

    try { 
     JsonElement commentObj; 

     StringBuilder sb1=new StringBuilder(1024); 
     sb1.append("insert into ").append(uname.trim()).append("vcomments values(?,?,?,?)"); 
     String sql1=sb1.toString(); 
     PreparedStatement stmt1 = conn.prepareStatement(sql1); 
     stmt1.setString(1,uname); 
     stmt1.setString(2,message); 
     stmt1.setInt(3,itemId); 
     stmt1.setInt(4,albumId); 
     int i=stmt1.executeUpdate(); 

     if(i!=1){ 
     myObj.addProperty("success", false); 
    } 
    else { 
     myObj.addProperty("success", true); 
    } 
    PreparedStatement stmt = null;  
    String sql = null; 

    try {  

     StringBuilder sb=new StringBuilder(1024); 
     sb.append("select * from ").append(uname.trim()).append("vcomments").append(" where itemid=").append(itemId).append(" and albumid=").append(albumId); 
     sql=sb.toString(); 
     stmt = conn.prepareStatement(sql); 
     ResultSet rs = stmt.executeQuery(); 
     ArrayList<JSONObject> CommArray=new ArrayList<JSONObject>(); 

     while(rs.next()){ 
      Obj.put("uname",rs.getString("uname").trim()); 
      Obj.put("comment",rs.getString("comments").trim()); 
      CommArray.add(Obj); 

      }  
     JSONArray arrayObj=JSONArray.fromObject(CommArray); 
     commentObj=gson.toJsonTree(arrayObj); 
     myObj.add("commentInfo", commentObj); 
     out.println(myObj.toString()); 
     rs.close();                
     stmt.close();                
     stmt = null;                


     conn.close();                
     conn = null;             

    }                
    catch(Exception e){System.out.println("Error --> " + displayErrorForWeb(e));}      

응답을받은 :

{"success":true,"commentInfo":[{"uname":"shyam","comment":"erxdg"},{"uname":"shyam","comment":"erxdg"},{"uname":"shyam","comment":"erxdg"},{"uname":"shyam","comment":"erxdg"}]} 

데이터베이스는 두 개의 항목이 포함되어 있습니다. 마지막 항목은 erxdg입니다. 서블릿은 마지막 항목 만 응답을 보냈습니다.

사람이 당신은 각 결과 집합에 대한 새로운 JSONObject을 만들 필요가 ........... 감사합니다 ..... 내가 그것을 해결하기 위해

+0

검색어에 문제가있을 수 있습니다. 결과 집합에 erxdh와 다른 값이 포함되어 있는지 확인할 수 있습니까? 그것은 같은 요소를 반복적으로 반환하는 것으로 보입니다 – 75inchpianist

+0

@ 75inchpianist 아니요, 내 결과 집합은 데이터베이스에있는 모든 값을 반환합니다 –

답변

1

도와주세요. 루프에서 하나를 만들고 배열에 추가하십시오. 그렇지 않으면 이전 객체의 필드를 바꾸고 다른 객체에 대한 참조를 결과에 추가하는 것입니다.

while(rs.next()){ 
    //new line: 
    JSONObject Obj = new JSONObject(); 
    // original part looks fine: 
    Obj.put("uname",rs.getString("uname").trim()); 
    Obj.put("comment",rs.getString("comments").trim()); 
    CommArray.add(Obj); 
} 
+0

예, 그건 해결책입니다. 좋은 캐치 – 75inchpianist

관련 문제