혼자 풀어보는 문제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();
}
}
정상적으로 찾아와졌다…
여기서 하나 헤맨건, 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()로 교체했음.
모든 데이터를 얻어올 수 있었다.