FireDrago

[Servlet] ResultSet.next( ) 중복 호출 본문

오류노트

[Servlet] ResultSet.next( ) 중복 호출

화이용 2023. 6. 27. 21:31
public ArrayList<member> getallmember() {
		System.out.println("겟올멤버 작동");
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		try {
			String url = "jdbc:mysql://localhost:3306/test";
			String user = "root";
			String password = "1234";
			Class.forName("com.mysql.jdbc.Driver");
			conn = DriverManager.getConnection(url,user,password);
			String sql = "select * from member";
			pstmt = conn.prepareStatement(sql);
			rs = pstmt.executeQuery();
			
			ArrayList<member> allmember = new ArrayList<>();
			System.out.println(rs.next());
			while (rs.next()) {
				String id = rs.getString("id");
				String pw = rs.getString("password");
				System.out.println(id);
				System.out.println(pw);
				member mb = new member();
				mb.setId(id);
				mb.setPassword(pw);
				
				allmember.add(mb);
			}
             ......... 생략..........

database 를 통한 간단한 crud 구현중에 2시간동안 해결안되는 문제가 발생했었다.

 

이 부분을 자세히 보자

System.out.println(rs.next());

while (rs.next()) {

데이터베이스에서 받은 데이터 ResultSet rs 변수에 값이 잘 담겼는지 확인하기 위해 프린트를 찍은상태이고,

다음 while 문에서는 rs.next로 하나씩 값을 꺼내오도록 되어있다. 

 

그러나 문제는 rs.next 를 처음 호출해서 커서가 이미 뒤로 간 상태인데

while문에서 한번더 두번 호출하여 값이 담기지 않는 문제가 발생했다. 

 

rs.next( ) 는 한번만 쓰자!!