소프트웨어시스템설계(6주) 데이터베이스 연동 2008년 10월 9일 실습
개요 실험제목 목표 목차 데이터베이스 연동 JDBC(Java DataBase Connectivity)에 대해 이해한다. JSP에서 JDBC를 이용하여 데이터베이스를 사용하는 방법을 익힌다. 목차 JDBC 프로그래밍의 개요 JDBC APIs
입문 예제 간단한 주소록 출력 예제
DBMS (DataBase Management system) 이론 : JDBC 프로그래밍의 개요 JDBC(Java DataBase Connectivity) 자바 프로그램에서 이기종간의 데이터베이스를 표준화된 방법으로 접속 할 수 있도록 만든 API 규격 JDBC 구조 DBMS (DataBase Management system) 데이터베이스를 구성하고 운영하기 위해 구성된 소프트웨어 시스템 JDBC 드라이버는 해당 DBMS 벤더에서 제공 애플리케이션 오라클 DBMS 오라클 JDBC 드라이버 JCBC 드라이버 관리자 MySQL DBMS MySQL JDBC 드라이버 MSSQL JDBC 드라이버 MSSQL DBMS 애플리케이션은 JDBC 표준 API를 이용 JDBC 드라이버를 로드하여 사용할 수 있도록 하는 역할
이론 : JDBC 프로그래밍 단계(1/4) JDBC 드라이버 로드 데이터 베이스 연결 jdbc.drivers 환경 변수 이용 Class.forName() 이용 데이터 베이스 연결 JDBC URL : 접속하고자 하는 데이터베이스를 특정하기 위한 정보 포함 JDBC 프로그래밍 단계 사용 클래스 JDBC 드라이버 로드 System.setProperty() 또는 Class.forName() 데이터베이스 연결 java.sql.DriverManager Statement 생성 java.sql.Connection SQL문 전송 java.sql.Statement 또는 java.sql.PrepareStatement 결과 받기 java.sql.ResultSet 연결 해제 System.setProperty(“jdbc.drivers”, “com.mysql.jdbc.Driver”); Class.forName(“com.mysql.jdbc.Driver”); JDBC URL의 일반적인 구조 JDBC:<서브 프로토콜>:<데이터 원본 식별자> MySQL JDBC URL JDBC:mysql://[host][:port]/[database]
데이터베이스에서 부여한 권한을 가진 계정의 아이디와 비밀번호 이론 : JDBC 프로그래밍 단계(2/4) 데이터베이스 연결 (이어서) Connection 클래스의 instance에 대한 참조변수 얻기 Statement 와 PreparedStatement Statement Database Connection로부터 SQL 문을 수행할 수 있도록 해주는 클래스 대표적으로 사용되는 method Statement 이용 예 Connection conn = DriverManager.getConnection(JDBC_URL, “아이디”, “비밀번호”); 해당 데이터베이스에 맞게 미리 정의되어 있는 문자열 데이터베이스에서 부여한 권한을 가진 계정의 아이디와 비밀번호 method 설명 executeQuery() SELECT 문을 수행할 때 사용 ResultSet 클래스의 instance를 반환하여, 해당 SELECT문의 결과에 해당하는 데이터에 접근할 수 있는 방법을 제공 executeUpdate() UPDATE, DELETE 과 같은 SQL문을 수행할 때 사용 처리된 데이터의 수를 int 값으로 반환 Statement stmt = conn.createStatement(); stmt.executeUpdate(“INSERT INTO test VALUES (‘” + request.getParameter(“username”) + “’, ‘”+request.getParameter(“email”)+ “’)”);
이론 : JDBC 프로그래밍 단계(3/4) Statement 와 PreparedStatement(이어서) SQL 문을 미리 만들어두고 변수를 따로 입력하는 방식 효율성이나 유지보수 측면에서 유리 Statement 클래스를 상속받기 때문에 Statement 클래스의 모든 method이용 가능 Statement 이용 예 close() method 다른 JDBC 자원과 마찬가지로 Statement와 PreparedStatement 역시 사용을 마친 다음 에는 닫아주어야 함 PreparedStatement pstmt = conn.prepareStatement(“insert into test values(?, ?)”); pstmt.setString(1, request.getParameter(“username”); pstmt.setString(2, request.getParameter(“email”); pstmt.executeUpdat(); SQL 문에서 변수가 와야할 위치에 ?을 적어두고, setXxx() 메소드로 값 설정 Xxx에는 String, int 와 같은 자료형 별로 method존재 stmt.close(); pstmt.close();
이론 : JDBC 프로그래밍 단계(4/4) 결과 받기 연결 해제 SELECT 문을 전송한 경우, ResultSet 객체가 반환됨 ResultSet ResultSet 객체를 이용하여 조회한 결과값에 row 단위로 순차적으로 접근 일반적으로 사용되는 ResultSet 이용 방법 next() method : 다음 row가 있으면 ResultSet 객체가 다음 row를 가리키도록 하고, true값 반환, 다음 row 가 없을 경우 false반환 while문은 이용하여 더 이상 row가 없을 때까지 루프를 돌면서 데이터를 처리 연결 해제 Connecion instance는 반납하지 않으면, 계속 연결을 유지 하므로, 작업이 모두 끝나는 시 점에서 close() method를 호출 ResultSet rs = stmt.executeQuery(“SELECT ...”) ResultSet rs = pstmt.executeQuery(); ResultSet rs = pstmt.executeQuery(); while(rs.next()) { name = rs.getString(1); // 또는 rs.getString(“name”); email = rs.getInt(2); // 또는 rs.getString(“email”); } rs.close(); conn.close();
연습 : 데이터베이스의 준비(1/3) MySQL의 설치와 준비 MySQL GUI Tools 설치 MySQL Connector/J 5.1(MySQL JDBC 드라이버)다운로드 http://dev.mysql.com/downloads/connector/j/5.1.html zip 파일을 다운 받아 압축 해제 mysql-connector-java-5.1.6-bin.jar 파일을 이클립스에서 생성한 프로젝트 폴더의 /WebContenct/WEB-INF/lib 폴더에 복사 예를 들어, 생성한 프로젝트의 이름이 ‘jspages’라면 아래 오그림과 같이, 이클립스의 Project Explorer 상의 WebContenct/WEB-INF/lib에 복사 mysql-connector-java-5.1.6.zip 압축 해제한 폴더 및 파일 MySQL driver 자바 라이브러리 파일 mysql-connector-java-5.1.6-bin.jar
연습 : 데이터베이스의 준비(2/3) 테이블생성(create_table.jsp) (1/2) 한글을 처리하기 위해 characterEncoding property를 url에 추가 ‘euckr’으로 charater Set 지정 데이터베이스 관련 클래스를 사용하기 위해 java.sql의 하위 패키지를 import ID password username, email의 column을 가진 jdbc_test 테이블을 생성하는 create문 euckr로 테이블의 기본 character set지정
연습 : 데이터베이스의 준비(3/3) 테이블생성(create_table.jsp) (2/2) create_table.jsp를 Tomcat 서버에서 실행 MySQL Administrator에서 확인해보면, jdbc_test 테이블이 생성되어 있음 Edit Table버튼을 클력하면, 테이블의 column과 character set확인 가능
연습 : JDBC 프로그래밍 예제(1/3) 이름과 이메일 주소 목록 만들기(jdbctest.jsp) 이 페이지를 처음 실행하면, request 객체는 username이라는 parameter를 갖고 있지 않으므로, null 임을 확인하여 실행하지 않음 빈 문자열인지 확인하여 실행하지 않음 INSERT 문을 이용하여, 이름과 이메일 주소를 데이터베이스에 입력 다음 페이지에 jdbctest.jsp 의 소스코드 이어짐
연습 : JDBC 프로그래밍 예제(2/3) 이름과 이메일 주소 목록 만들기(jdbctest.jsp) jdbc_test에서 username과 email columns을 읽어오도록 SELECT 문사용 executeQuery() method를 실행하여 ResultSet 객체 얻어옴 while문을 돌며, username과 email출력
연습 : JDBC 프로그래밍 예제(3/3) 이름과 이메일 주소 목록 만들기(jdbctest.jsp) 두번째 입력 후 ‘등록’ 클릭 등록이름과 email 주소 입력 후 ‘등록’ 클릭 현재는 등록된 목록이 없음 청와대, webmaster@president.go.kr 입력되어 있음 MySQL Query Browser에서 확인해보면, 두 row가 입력되어 있음 청와대, 네이버가 입력되어 있음
연습문제(1/2) JDBC 프로그래밍 예제(jdbctest.jsp)를 응용하여 데이터베이스에 다음과 같 은 column을 가진 favoritemovies라는 테이블을 만들고, 자신이 좋아하는 영화를 데이터베이스에 입력과 출력을 할 수 있는 페이지를 작성하시오. column Data type name varchar(100) releasedyear varchar(4) actors varchar(200)
category가 ‘회사’인 ‘사장님’은 표시되지 않음 연습문제(2/2) 데이터베이스에 다음의 columns을 가진 ‘address’ 테이블을 만들고, 입출력을 하는 JSP 문서 작성하시오. columns address 테이블의 데이터를 보여줄 때는 SELECT문에 WHERE절을 추가하여 category가 ‘가 족’인 주소만을 출력 category를 입력받을 때는, ‘가족’, ‘친구’, ‘회사’만 입력 받을 수 있도록 <select>태그를 사 용 column Data type name varchar(30) tel varchar(20) address varchar(200) category varchar(4) category가 ‘회사’인 ‘사장님’은 표시되지 않음
요약 JDBC(Java DataBase Connecivity) JDBC 프로그래밍 단계 자바 프로그램에서 이기종간의 데이터베이스를 표준화된 방법으로 접속할 수 있도록 만든 API규격 JDBC 프로그래밍 단계 JDBC 드라이버 로드 System.setProperty() / Class.forName() 데이터베이스연결 java.sql.DriverManager Statement 생성 java.sql.Connection SQL문 전송 java.sql.Statement 등 결과 받기 java.sql.ResultSet 연결 해제 java.sql.ConnectionI MySQL GUI Tools을 이용하면, MySQL 데이터베이스 관리, SQL쿼리 등의 각종 작업을 할 수 있다. MySQL에서 윈도우 환경에서 한글을 사용하기 위해서 테이블을 euc-kr character set으로 만들고, JDBC연결도 euc-kr character set으로 해야 함 JDBC를 사용하기 위해 다음 웹페이지를 참조 Java Standard API Specifiction http://java.sun.com/javase/6/docs/api/ MySQL 5.0 Reference http://dev.mysql.com/doc/refman/5.0/en/ 일반적으로, 데이터베이스 관련 내용은 Java Bean으로 기술하여 사용한다.
실습과제 간단한 로그인 JSP 문서를 만드시오 데이터베이스에 아이디와 비밀번호를 저장할 수 있는 테이블을 생성 아이디와 비밀번호를 입력받아 로그인하는 페이지 작성 아이디와 비밀번호를 등록할 수 있는 가입 페이지로 갈 수 있는 링크가 있어야 함 입력받은 아이디와 비밀번호가 데이터베이스에 있을 경우, session에 아이디를 속성으로 저장하고, 다음 페이지에서 session에서 아이디 속성을 읽어와서 환영 메시지와 함께 출력 아이디와 비밀번호를 입력받아 데이터베이스에 추가하는 페이지 작성 데이터베이스에 아이디와 비밀번호를 추가한 후 로그인 페이지로 이동해야 함 비밀번호를 입력받는 input 태그는 password 타입으로 하며, 두번 입력받아서 제대로 입 력했는지 확인해야 함(String class의 equal() method를 사용)