jdbc 사용
JDBC(Java Database Connectivity)
-- sql을 자바로 쓴다고 생각하면 편하다.
--DB에서 우리가 했던 프로세스를 살펴보자
0. DB를 어떤걸 쓸지 선택한다. ex)오라클, mysql,....
1.사용자가 DB에 접근을 한다.
2.쿼리문을 작성
3.쿼리문을 ;찍고 엔터눌러 실행
4.결과 반환
--자바에서 JDBC를 사용해 DB를 이용한다 해보자
0.DB를 선택한다.
자바에서: driver를 로드한다.
class.forName("추가할 드라이버");
1.사용자가 DB에 접근을 한다.
자바에서: Connection 객체가 이를 수행
Connection con = DriverManager.getConnection ( "DB의 URL", 사용자ID, 사용자PWD );
2.쿼리문을 작성
자바에서: Statement 객체가 이를 수행
Statement stmt = con.createStatement(); //사용자접근.쿼리수행기능
3.쿼리문 실행
자바에서: stmt.exeute("실행 쿼리");
stmt.execute(“query”); //any SQL
stmt.executeQuery(“query”); //SELECT
stmt.executeUpdate(“query”);
//INSERT, UPDATE, DELETE
4.결과 반환
자바에서: 실행결과 = 쿼리수행문.쿼리수행
ResultSet rs = stmt.executeQuery( "select no from user" );
while ( rs.next() ){
//결과로서 리턴된 rs에서 next()를 하면 다음 행의 결과 리턴.
//rs.next() 를 한번 해야 결과의 첫번째 행이 리턴된다.
}
5.마무리
rs.close();
stmt.close();
con.close();
주의! close()를 꼭 해줘야 한다.
결과자체는 DB에 남아있다. 자바는 그 결과를 확인 가능하게 레퍼런스 변수를 가지고 있는다.
DB에 결과가 너무 많을때 그것을 다 가져올 수는 없기 때문이다.
코드 예제
0. 오라클기준 DB 연결하기
1
2
3
4
5
6
7
8
9
|
public static Connection getConnection() throws Exception{
String url = "jdbc:oracle:thin:@117.16.46.111:1521:xe";
String user = "smu";
String password = "smu";
Connection conn = null;
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(url, user, password);
return conn;
}
|
cs |
1.GuestBook 이라는 테이블에서 모든 행을 뽑아올 때
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
public List<GuestBookVO> getGuestBookList(){
List<GuestBookVO> list = new ArrayList<>();
GuestBookVO vo = null;
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try{
conn = DBUtil.getConnection();
String sql = "select * from guestbook";
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next()){
vo = new GuestBookVO();
vo.setNo(rs.getInt(1));
vo.setId(rs.getString(2));
vo.setTitle(rs.getString(3));
vo.setConetnt(rs.getString(4));
vo.setRegDate(rs.getString(5));
list.add(vo);
}
}catch(Exception e){
e.printStackTrace();
}finally {
DBUtil.close(conn, ps, rs);
}
return list;
}
|
cs |
2.GuestBook에 새로운 행 추가하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
public int addGuestBook(GuestBookVO vo){
int result = 0;
Connection conn = null;
PreparedStatement ps = null;
try{
conn = DBUtil.getConnection();
String sql = "insert into guestbook values("
+ "guestbook_seq.nextval,?,?,?,sysdate)";
ps = conn.prepareStatement(sql);
ps.setString(1, vo.getId());
ps.setString(2, vo.getTitle());
ps.setString(3, vo.getConetnt());
result = ps.executeUpdate();
}catch(Exception e){
e.printStackTrace();
}finally {
DBUtil.close(conn, ps);
}
return result;
}
|
cs |
?의 값을 바인딩하기 위해 set 메서드를 이용해야한다.
3.close()로 닫아주기
1
2
3
4
5
6
7
8
9
|
public static Connection getConnection() throws Exception{
String url = "jdbc:oracle:thin:@117.16.46.111:1521:xe";
String user = "smu";
String password = "smu";
Connection conn = null;
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(url, user, password);
return conn;
}
|
cs |