1단계 드라이버를 로드하자!!
2단계 접속을 시도해야 한다. ip,id,pass가 필요하다.
즉 Connection객체는 접속이 성공될때만 메모리에 올라온다.
3단계 데이터 입력
String sql에 DB에 접속하여 실행할 쿼리문을 적어넣는다.
=con.prepareStatement(sql);
.setString(1,id.getText());
.setString(2,pass.getText());
? 와 같은 바인딩 변수로 값을 받은 후에 아래에서 재정의 해주는 것도 가능하다.
("oracle.jdbc.driver.OracleDriver");
("org.gjt.mm.mysql.Driver");
import와 비슷하지만 import는 선언과 메모리에 올라가는것이 별개이지만
Class.forName은 선언하는 순간 메모리에 올라간다 -- 드라이버를 로드할때 쓰인다 2단계 접속을 시도해야 한다. ip,id,pass가 필요하다.
1) Oracle접속방법.
jdbc : oracle : thin : @192.168.11.23 : 1521 : ORCL ";
jdbc 드라이버 를 통해서:oracle로 들어간다:thin방식으로:@아이피(도메인or host이름):진입포트:설치이름127.0.0.1 =현재 자기컴퓨터를 가르킨다. Localhost와 동일
con=DriverManager.getConnection(url,uid,upass);
2) MySQL접속 방법.
String url="jdbc:mysql://localhost:3306/java";여기서 java는 들어가서 사용할 db이름.
con=DriverManager.getConnection(url,uid,upass);
DriverManager의 getConnection( )을 통해서 접속한다.
Connection con은 아래에서 사용, 현재 접속상황을 con으로 받았다. 접속정보를 받은 객체.
접속을 성공하면 Connection 객체를 반환한다!! 즉 Connection객체는 접속이 성공될때만 메모리에 올라온다.
3단계 데이터 입력
1. 입력할 쿼리문 작성
sql="insert into member(id,name) values('"+id.getText()+"','"+name.getText()+"')"; String sql에 DB에 접속하여 실행할 쿼리문을 적어넣는다.
※Pstmt의 바인딩 변수?,?)";
{ =con.prepareStatement(sql);
.setString(1,id.getText());
.setString(2,pass.getText());
? 와 같은 바인딩 변수로 값을 받은 후에 아래에서 재정의 해주는 것도 가능하다.
pstmt=con.prepareStatement(sql);
con으로 접속된DB에 쿼리문을 실행하고 pstmt 에 결과를 담는다..
2. 입력성공여부 확인
pstmt.executeUpdate();
이 메서드는 실행시 자신이 적용한 레코드의 수를 반환한다 따라서 입력을 하게 되면 무조건 1개 이상의 레코드는 입력하므로 0이 아니면 입력에 성공한 것이다.
JOptionPane.showMessageDialog(null,"입력실패");
JOptionPane.showMessageDialog(null,"입력 성공");
4단계 데이터 출력
1. 출력할 쿼리문 작성
커서는 한번에 한칸씩만 이동이 가능한데 last명령어를 통해서 한번에 마지막까지 이동해야 함으로 에러가 난다.
이런 문제점을 해결하기 위해 pstmt를 생성시 커서를 자유롭게 스크롤 가능한 커서로 만드는 방법은
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
인수를 2개 넣으면 커서가 전방향으로 움직일 수 있다.
ResultSet.TYPE_FORWARD_ONLY : 앞으로만 전진가능
ResultSet.TYPE_SCROLL_INSENSITIVE : 실시간으로 변하는 데이터의 영향을 받는다
ResultSet.TYPE_SCROLL_SENSITIVE : 실시간으로 변하는 데이터의 영향을 안받는다.
ResultSet.CONCUR_READ_ONLY : 커서가 데이터에 영향을 미칠수 없다.
ResultSet.CONCUR_UPDATABLE : 커서가 데이터에 영향을 미칠수 있다.
rs=pstmt.executeQuery();
ResultSet 안에는 table의 전체 항목이 전부다 들어가 있다.
rs.last(); 커서를 마지막으로 이동
int total=rs.getRow(); 현재의 위치를 반환
while문으로 rs.next()가 false일때까지 계속해서 반복수행하면 table에 있는 모든 레코드를 출력할수 있다.
(rs.next()){
.append("[idx: "+rs.getString("idx")+"] [id :"+rs.getString("id")+"] [pass :"+rs.getString("pass")+"] [date :"+rs.getString("regdate")+"]\n");
5단계 종료
스트림과 DB연동 관련 코드는 성공 실패 여부를 떠나 반드시 사용후 닫아야 하므로 finally에 넣자if (rs!=null){try {rs.close();} catch (SQLException e) {e.printStackTrace();}}
if(pstmt!=null){try {pstmt.close();} catch (SQLException e) e.printStackTrace();}}
if(con!=null){try {con.close();} catch (SQLException e) {e.printStackTrace();}} null이 아닐때에 닫아야 오류가 나지 않는다.
닫을 때도 소속관계에 따라서 가장 늦게 태어난 rs부터 닫는다.