DB 와 WEB 연동 (1) [2-Tier] Java Applet 이용
웹연동 } 웹 (Web) 환경에서데이터베이스시스템을연동하는방법은다음과같다 } Server Client 구조의통신 (2-Tier) } Server Middleware Client 구조의통신 (3-Tier) 2
JAVA Applet 을이용한 Client Server 연동기법 } Applet 에서 JDBC 프로그램을하는방법 } 직접 Applet Code 에 JDBC API 를사용하는방법 (2 Tier) } Applet 은단지 Middleware Server( 주로 JAVA 를이용 ) 와통신하여질의를전달하고, JDBC API 는 Middleware Server 측에서동작하여데이터베이스에접근하는방법 (3 Tier) } 이번시간에는 JAVA Applet 을이용한 2-Tier 프로그램을실습한다. 3
JDBC Driver 종류 } 이전에배웠던 JDBC Driver 의종류를간단히살펴보자 Type Description 1 JDBC-ODBC 브릿지 ODBC 를불러주는역할 (sun.jdbc.odbc 드라이버패키지 ) 2 Native-API 1 번타입과비슷한유형. 클라이언트에서드라이버를사용하기위하여소프트웨어를설치해야한다. 3 네트워크연결드라이버 JDBC 메소드호출을 DBMS 에서독립적인네트워크프로토콜로바꾸어주는드라이버. 4 DBMS 프로토콜을사용하는드라이버가장많이쓰이는드라이버로 DBMS 의기능을직접호출한다. 4
JDBC Driver 선택및위치 } Web 기반의데이터베이스연동을위해서는 네트워크연결드라이버 이상의 JDBC 드라이버를사용한다. } JDBC 드라이버의위치 Ø Client 에 JDBC 드라이버를두고클래스패스를설정한다. Ø 서버에서애플릿클래스가위치해있는디렉토리에 JDBC 드라이버를적재한다. 5
데이터베이스연동실습 } 각자의데이터베이스에다음과같은구조의 customer 테이블을생성하세요. name age sex Janet 26 f jein 21 f jerry 20 m jim 24 m tom 30 m 6
Applet Program } 프로그램을실행하기위해서는다음조건이준비되어야한다. 1. JDBC 드라이버의 CLASSPATH 설정 2. 접속하는 Database 서버에자바 class 파일과 JDBC 드라이버가위치해있어야한다. [HTML CODE] <BODY> <APPLET CODE = Tsearch" ARCHIVE= Merila.jar" CODEBASEhttp://dblab.hallym.ac.kr/jdbc" WIDTH =500 HEIGHT=300> </APPLET> </BODY> CODBASE à 접속하는웹서버의디렉토리로 class 파일과드라이버가위치한곳을가리킨다. [ 로컬데이터베이스에서작동할때는작성할필요가없다.] ARCHIVE à 브라우저에드라이버를적재한다. 7
실습 1. 전체검색 8
실습 2. 이름으로검색 9
실습 3. 나이검색 10
실습 4. 성별검색 11
Interface 와 url, user, password import java.awt.*; import java.awt.event.*; import java.applet.*; import java.sql.*; public class AppletTest extends Applet implements ActionListener { Choice search; // 선택박스선언 Label label; // 라벨선언 TextField textfield; // 값을입력받을텍스트필드선언 TextArea Area; // 결과값을출력할텍스트에리어선언 Button button; // 검색버튼선언 private String url = "jdbc:inetdae7://210.115.229.77:2433"; private String user = id"; private String pass = password"; 12
JDBC 드라이버로딩 public void init() { try { Class.forName("com.inet.tds.TdsDriver"); } catch (ClassNotFoundException e) { System.out.println("Class Loading Failed"); } } 13
Interface 설정 public void start() { setlayout(new FlowLayout()); label = new Label(" 검색조건 "); add(label); search = new Choice(); search.add(" 전체 "); search.add(" 이름 "); search.add(" 나이 "); search.add(" 성별 "); add(search); textfield = new TextField(10); add(textfield); button = new Button("search"); add(button); Area = new TextArea(10,50); add(area); button.addactionlistener(this); } 14 // 레이아웃배치자
Action event handle public void actionperformed(actionevent ae) { Connection con = null; Statement stmt = null; String st = ae.getactioncommand(); // 검색버튼의 string 값을전달받음 String item = search.getselecteditem(); // 선택박스에서선택된값을전달받음 } if(st.equals("search")) { String n = textfield.gettext(); if(item.equals(" 전체 ")) // 선택박스에서 전체 가선택됐을경우 { TotalgetDBSearch(); // 전체검색메소드를호출 } } 15
전체검색메소드 private void TotalgetDBSearch() { Connection con = null; Statement stmt = null; try { con = DriverManager.getConnection(url,user,pass); con.setcatalog( DBNAME"); stmt = con.createstatement(); ResultSet result = stmt.executequery(" 삽입쿼리문 "); // 여기부터아래세번째까지는검색버튼이클릭될때마다결과창에새로운검색결과를보여주기위하여이전에검색한결과를지우기위한작업이다. String count = Area.getText(); int c = count.length(); Area.replaceText(" ",0,c); 16
결과출력 while(result.next()) { String Name = result.getstring(1); String age = Integer.toString(result.getInt(2)); String sex = result.getstring(3); String value = " 이름 : " +Name+ " 나이 : " +age+ " 성별 : +sex+ "\n" ; int index = Area.getText().length(); Area.insertText(value,index); // 결과창에결과값추가 } con.close(); stmt.close(); }catch(exception ee) {System.out.println(ee);} } // try-end } // end 17
이름검색의질의처리 private void NamegetDBSearch(String n) // 이름검색 // 사용자가입력한이름을값으로받는다. { Connection con = null; Statement stmt = null; try { con = DriverManager.getConnection(url,user,pass); con.setcatalog("testing"); stmt = con.createstatement(); } ResultSet result = stmt.executequery(" 삽입쿼리문 "); 18
삽입메소드 private void Insert(String name, int age, String sex) try { Connection con; Statement stmt; // Connection 객체를사용하여 DB 에연결을설정 con = DriverManager.getConnection(url,user,pass); con.setcatalog( DBNAME"); // 질의문을작성하기위하여 Statement 객체를생성 stmt = con.createstatement(); // 생성된테이블에값을삽입 stmt.executeupdate( 삽입쿼리문 ) // Statement,Connection 객체를닫음 stmt.close(); con.close(); }catch(sqlexception se){ System.err.println(se.getMessage()); }
데이터삭제
삭제결과확인
삭제메소드 void customer_delete(string r) { try{ Connection con; Statement stmt; con = DriverManager.getConnection(url,user,pass); con.setcatalog( DBNAME"); // 연결된 DB 에서질의문을작성하기위하여 Statement 객체를생성 stmt = con.createstatement(); stmt.executeupdate("delete from customer where name = ' "+r+" ' "); stmt.close(); con.close(); }catch(sqlexception se){ System.err.println(se.getMessage()); } }
데이터갱신
갱신결과확인
레포트 } 갱신 을실행할경우나이가 1 년씩증가하는메소드를작성후실행코드와실행결과를캡쳐하시오. } 실습및과제를캡쳐후한글, word 파일에캡쳐부분에대한설명과 SQL 구문에자세한주석을넣어서제출하시기바랍니다. ( 돌아가는원리에초점을맞춘주석 )
레포트 } 파일형식 : [ 분반 ]_ 이름 _ 학번 _7 } 한글 / 워드에캡쳐파일 } 제출형식어길시감점처리 } 제출 : dbcyy1@gmail.com로제출 } 제출기간 : 11월05일목요일 23시59분까지 26