2008-10-28 2 views
1

나는 MySQL 데이터베이스에서 데이터를 검색하기 위해 자바로 애플리케이션을 만들고있다. 쿼리를 실행 한 후 나는의 ResultSet을 얻고 레코드를 추출하려면 다음을 수행하십시오Java에서 MySQL의 레코드를 가져 오는 것

while (rs.next()) 
     { 
      for (int column = 1; column <= rm.getColumnCount(); column++) { 
       row.add(rs.getObject(column)); 
      } 
      result.add(row.toString()); 
      row.clear(); 
     } 

RS = ResultSet의 및 RM = ResultSetMetaData에

문제는 내가 결과를해야 할 것입니다. add (row.toString());이 아니라 단지 result.add (row); (2 차원 ArrayList를 만들고 싶습니다). 그렇지 않으면 빈 결과가 나타납니다.

나는두기를 시도했다 row.clear(); 처음에, 의 앞에 루프가 있지만, 모든 결과가 마지막 레코드의 여러 인스턴스로 채워집니다. 결과에에 추가되지 않았지만 마지막 레코드와 같을 때까지 끝납니다. 다른 ArrayList에 elemt를 추가하기 전에 ArrayList 을 "커밋"해야합니까? 그렇다면 어떻게? 또한 호기심 때문에 .toString()이 (가)과 다르게 작동합니까?

답변

2

row.toString()을 추가하면 결과에 추가 할 새 String 객체가 생성됩니다.

반면에 row를 추가하면 result에 동일한 객체가 추가되므로 row.clear()가 호출 될 때마다 결과의 모든 행이 비워집니다.

for 루프 전에 새 행 객체를 만들고 row.clear()를 수행하지 말아야합니다. 다음은 그 예입니다.

while (rs.next()) 
     { 
      row = new ArrayList(); 

      for (int column = 1; column <= rm.getColumnCount(); column++) { 
       row.add(rs.getObject(column)); 
      } 

      result.add(row); 
     } 
+0

좋아요, 그래서 기본적으로 result.add (row)는 "참조로 전달"과 같이 작동하지만 객체를 복사하지 않고 그냥 참조를 제공합니까? 고마워, 그게 내 문제를 해결 :) –