혼자 풀어보는 문제1

자바 JDBC 프로그래밍 강의 05 - 혼자 풀어보는 문제 #1

지난 시간 JDBC를 이용해 자바 웹어플리케이션에서 DB의 데이터를 가져와봤다.

저번엔 컬럼 하나만을 가져왔는데, 이번엔 모든 컬럼을 가져와보자.

INSERT INTO NOTICE(ID, TITLE, WRITER_ID, CONTENT, REGDATE, HIT) VALUES('1', '안녕하세요',
'roro', '반갑습니다~', '240306', 3);

NOTICE에 칼럼이 다 차있는 레코드가 없어서. DB열고 하나 새로 넣어줬다.

그리고나서…

package Ex1;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;

public class Program {

	public static void main(String[] args) throws ClassNotFoundException, SQLException {
	
		String url = "jdbc:oracle:thin:@localhost:1521/xepdb1";
		String sql = "SELECT * FROM NOTICE WHERE ID = 1"; //ID=1인 레코드 하나 가져오
		
		Class.forName("oracle.jdbc.driver.OracleDriver");
		Connection con = DriverManager.getConnection(url, "STUDY", "2720");
		Statement st = con.createStatement();
		ResultSet rs = st.executeQuery(sql);
		
		if(rs.next()) {
			int id = rs.getInt("ID");
			String title = rs.getNString("TITLE");
			String writerId = rs.getNString("WRITER_ID");
			Date regDate = rs.getTimestamp("REGDATE");
			String content = rs.getString("CONTENT");
			int hit = rs.getInt("HIT");
			
			System.out.printf(" id:%d, title:%s, writerId:%s, regDate:%s, content:%s, hit:%d\\n",id, title,
					writerId,regDate,content, hit);
		}
		
		rs.close();
		st.close();
		con.close();
	}

}

Untitled

정상적으로 찾아와졌다…

여기서 하나 헤맨건, DB에 값을 넣고 커밋해주는걸 깜빡해놓고, 왜 데이터를 못찾아올까 헤맸다는 것임.

모든 레코드를 꺼내는 것도 대충 눈치로 찾아봤다.

while(!rs.isAfterLast()) { //isAfterLast()를 찾음.
			if(rs.next()) {
				int id = rs.getInt("ID");
				String title = rs.getNString("TITLE");
				String writerId = rs.getNString("WRITER_ID");
				Date regDate = rs.getTimestamp("REGDATE");
				String content = rs.getString("CONTENT");
				int hit = rs.getInt("HIT");
				
				System.out.printf(" id:%d, title:%s, writerId:%s, regDate:%s, content:%s, hit:%d\\n",id, title,
						writerId,regDate,content, hit);
		}				
	}

rs의 메서드 중에 isLast()도 있었는데, 이친구는 정말 EOF를 검사하는 친구라 무한루프가 도는 것 같았다. 그래서 isAfterLast()로 교체했음.

Untitled

모든 데이터를 얻어올 수 있었다.