본문 바로가기

기록(노트)

JDBC(Java Data Base Connectivity) 프로그램 순서 7단계

JDBC(Java Data Base Connectivity) 프로그램 순서 7단계

1단계 :드라이버 로딩(mysql 드라이버 로딩)

Class.forName("com.mysql.jdbc.Driver");

2단계 :Connection객체로 DB연결

1)ip 2)port번호 3)db접속id 4)db접속비번 5)db명(sid,service name)

String jdbcDriver = "jdbc:mysql://localhost:3306/dev41db?" + "useUnicode=true&characterEncoding=euckr"; String dbUser = "dev41id"; String dbPass = "dev41pw"; conn = DriverManager.getConnection(jdbcDriver, dbUser, dbPass);

** 해설

conn = DriverManager.getConnection(jdbcDriver, dbUser, dbPass);

getConnection 메서드

getConnection 메서드DriverManger 클래스 안에 선언된 static한 메서드이다. (정적메서드)

static한 변수, 메서드는 객체 생성없이 클래스명.메서드명(); 의 형식으로 호출할 수 있다.

따라서 DriverManger 클래스를 통한 객체 생성없이 바로 DriverManger.getConnection(...); 형식으로 메서드를 호출했다.

getConnection 메서드는 3개의 입력값을 받는다고 선언되어 있다.

입력값은 3개지만, 입력값에는 총 6개의 정보가 담겨있다.

①dbms 종류 (MySQL) ②IP ③PORT 번호 ④ DB명 ⑤DBid ⑥DBPW

메서드를 호출하면, (6개의 정보가 담겨있는) 입력값 3개를 받아 정상인지 비정상인지 판단한다.

- 정상이라면 Connection 클래스를 통해 생성한 Connection 타입의 객체의 주소값을 메서드 호출한 곳으로 리턴해준다.

- 비정상이라면 에러를 발생한다.


3단계 :Query실행을 위한 준비

( statement 또는 PreparedStatement객체생성)

pstmt = conn.prepareStatement( "INSERT INTO tb_member VALUES (?, ?, ?, ?, ?)"); pstmt.setString(1, m_id); pstmt.setString(2, m_pw); pstmt.setString(3, m_level); pstmt.setString(4, m_name); pstmt.setString(5, m_email);

** 해설

pstmt = conn.prepareStatement("INSERT INTO tb_member VALUES (?, ?, ?, ?, ?)");

preparedStatement 메서드는 Connection 클래스 안에 선언된 메서드이다.

'2단계 : Connection 객체로 DB연결' 에서 만들었던

conn 객체참조변수(Connection 객체의 주소값이 담겨있는)를 통해prepareStatement(...); 메서드를 호출한다.

prepareStatement 메서드

prepareStatement메서드의 입력값으론 문자열 타입의 sql 쿼리문장을 작성해준다.

(prepareStatement 메서드의 리턴타입은 PreparedStatement이기 때문에, 최소한 메서드 실행 시 내부에서는 PreparedStatement 타입의 객체가 만들어질 것!)

입력값으로 쿼리문을 넣어주면 메서드 내부에서는 PreparedStatement 클래스를 통해 생성한 PreparedStatement 객체의 주소값을 메서드 호출한 곳으로 리턴해준다.

그 후 리턴된 값을 PreparedStatement 타입의 pstmt라는 변수에 담아준다.

** 해설

pstmt = conn.prepareStatement("INSERT INTO tb_member VALUES (?, ?, ?, ?, ?)");

pstmt.setString(1, m_id);

pstmt.setString(2, m_pw);

pstmt.setString(3, m_level);

pstmt.setString(4, m_name);

pstmt.setString(5, m_email);

PreparedStatement 클래스를 통해 생성한 객체의 주소값이 담겨있는 pstmt 객체참조변수로 setString 메서드를 호출한다.

setString 메서드는 입력값으로 (int parameterIndex, String x)를 받는다고 선언되어있다.

첫 번째 매개변수 parameterIndex는 ?의 index번호를 의미하고, 두 번째 매개변수 x는 ? 자리에 입력할 값을 의미한다.

ex)

pstmt.setString(1, m_id);

첫 번째 ? 자리에

m_id의 값(insert_form 안에 입력 후 post방식으로 보냄 -> insert_action.jsp에서 request.getPrameter("m_id");로 받은 값)

입력하겠다는 의미이다.


4단계 :Query실행

int result = pstmt.executeUpdate();

PreparedStatement 클래스를 통해 생성한 객체의 주소값이 담겨있는 pstmt 객체참조변수로 executeUpdate 메서드를 호출한다.

select를 제외하고, 쿼리 실행하기 위해서는 executeUpdate 메서드를 사용하면 된다.


5단계 :Query실행결과 사용

(insert,update,delete의 경우 생략 가능단계)

int result = pstmt.executeUpdate();

executeUpdate 메서드의 리턴 타입은 int로,

쿼리 실행 결과를 사용하려면 int타입의 변수(result)에 쿼리 실행 결과를 담아 사용하면 된다.


6단계 :statement 또는 PreparedStatement객체 종료(close())

pstmt.close();

7단계 :DB연결(Connection 객체) 종료(close())

conn.close();

0단계 : 작업공간 폴더 생성

새로운 workspace mysqlwork41 생성 및 실행

war file import

minsert폴더 하위에는

m_insert_action.jsp : 회원가입화면

m_insert_form.jsp : 회원가입처리

이 있다.

m_insert_Action.jsp 파일을 열어 dev39.. 로 되어있는 것을 dev41.. 로 수정

우리가 직전에 생성했던 DB명과 생성했던 사용자계정으로!