31
Copyright 2001, 서울산업대학교 전자계산학과 DBLab 1 제11장 Client/Server활용 11.1 Visual Basic 응용 11.2 Java 응용 Copyright 2001, 서울산업대학교 전자계산학과 DBLab 2 11.1절 Visual Basic 응용

제11장Client/Server활용 - DUKSUNGdblab.duksung.ac.kr/lectures/dbprogram/chap11.pdf · 지점관리, 예금거래신청, 입/출금, 입출 금내역출력을포함한예금, 대출거래신

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

  • 1

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 1

    제11장 Client/Server활용

    11.1 Visual Basic 응용

    11.2 Java 응용

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 2

    11.1절 Visual Basic 응용

    ODBC 설정

    VB에서 데이터베이스에 연동하려면 ODBC (Open DataBase Connectivity)가 필요

  • 2

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 3

    ODBC 설정(계속)

    제어판에서 데이터 원본(ODBC)를 선택

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 4

    ODBC 설정(계속)

    시스템 DSN에서 추가를 선택

  • 3

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 5

    ODBC 설정(계속)

    Oracle ODBC Driver를 선택한 후 마침을 누른다.

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 6

    ODBC 설정(계속)

    서버 이름과 사용자 ID를 입력

    Data source name은 임의로 부여해도되지만 TNS service name은 오라클 클라이언트 프로그램을 설치한 후 Net8 Assist를 설정할 때 네트워크 서비스 이름으로 입력한 이름이 자동으로 입력

  • 4

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 7

    ODBC 설정(계속)

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 8

    ODBC 설정(계속)

  • 5

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 9

    VB 구성

    VB 6.0으로 데이터베이스를 연결

    데이터베이스 : 오라클

    개발 도구 : VB 6.0

    데이터베이스 접근 방법 : ADO

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 10

    VB에서 데이터베이스 접속

    Dim db As Connection

    Set db = New Connection

    db.CursorLocation = adUseClient

    db.Open “PROVIDER=MSDASQL;dsn=sam;uid=dblab;pwd=dblab401;”

  • 6

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 11

    VB 기초 응용

    데이터 검색 : Select

    데이터 추가 : Insert

    데이터 삭제 : Delete

    데이터 갱신 : Update

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 12

    데이터 검색 : Select‘Recordset 정의

    Set adoPrimaryRS = New Recordset

    ‘SQL문장을 adoPrimaryRS에 넣은 것으로 c_dist의 코드가 '00'인 테이터를가져온다.

    adoPrimaryRS.Open "select

    C_NO,C_NAME,C_ADDR,C_PHONE,C_DIST

    from CUSTOMER where c_dist='00'", db, adOpenStatic,

    adLockOptimistic

    Dim oText As TextBox

    ‘입력란을 데이터 제공자에 바인딩한다.For Each oText In Me.txtFields

    Set oText.DataSource = adoPrimaryRS

    Next

    SetButtons True

  • 7

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 13

    데이터 검색 : Select(계속)

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 14

    데이터 추가 : Insertt_cno = "780321-2231101";

    t_no = "AP100002";

    Temp = 11

    t_money = 150000;

    /* deposit 테이블에 입/출금 내역을 기록 */‘가지고온 데이터 레코드 중에서 맨 처음으로 간다.

    RS.MoveFirst

    '가지고온 일련번호를 temp에 넣는다.

    temp = Val(RS("serial"))

    '일련번호를 확인한다.

    MsgBox temp, , "temp"

    'deposit 테이블에 데이터 생성

    mysql = "insert into deposit values ('" & t_cno & "','" & t_no & "', " & temp & ", " & t_money & ", sysdate);"

    'Query 확인

    MsgBox mysql

  • 8

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 15

    데이터 추가 : Insert(계속)'만약 입금이면 그대로 입력하고

    If optin.Value = True Then

    temp_kind = ""

    '만약 출금이면 '-'를 입력한다.

    ElseIf optout.Value = True Then

    temp_kind = "-"

    End If

    'temp_kind 와 입/출금 금액을 tempString에 넣는다.

    tempString = temp_kind & temp_t_money

    'RS를 실행한다.

    Set RS = myconn.Execute(mysql)

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 16

    데이터 추가 : Insert(계속)

  • 9

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 17

    데이터 삭제 : Delete

    c_name = “김지수”/* customer 테이블에서 변수 c_name을 갖는 고객 삭제*/

    ‘가지고온 데이터 레코드 중에서 맨 처음으로 간다.RS.MoveFirst

    ‘customer 테이블에 데이터 삭제mysql = “"delete from customer where c_name = ?"

    'RS를 실행한다.

    Set RS = myconn.Execute(mysql)

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 18

    데이터 갱신 : Update

    /* customer 테이블에서 변수 c_name을 갖는 고객 갱신*/

    ‘가지고온 데이터 레코드 중에서 맨 처음으로 간다.RS.MoveFirst

    ‘customer 테이블에 데이터 갱신mysql = "update customer set c_phone = ? where c_name = ?"

    'RS를 실행한다.

    Set RS = myconn.Execute(mysql)

  • 10

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 19

    11.1절 Visual Basic 응용예제

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 20

    메뉴 구성

    메뉴 구성은 프린터설정, 끝내기, 개인고객과 기업고객을 포함하는 고객관리와지점관리, 예금거래신청, 입/출금, 입출금내역 출력을 포함한 예금, 대출거래신청, 상환, 상환내역 관리를 포함한 대출, 예금상품과 대출상품을 포함한 상품관리로 나뉜다.

  • 11

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 21

    메뉴 디자인

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 22

    VB 구성 요소

    [프로젝트(p)] → [구성요소]를 선택하여추가

  • 12

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 23

    ADO 방식 연결

    [프로젝트(p)] → [참조]를 선택하여 추가

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 24

    VB 구성 요소(계속)

    다음의 컨트롤들을 사용

    Crystal Report Control 4.6,

    Microsoft Common Dialog Control 6.0,

    Microsoft DataGrid Control 6.0,

    Microsoft Gierarchical FlexGrid Control 6.0,

    Microsoft Masked Edit Control 6.0,

    Microsoft Rich Textbox Control 6.0,

    Microsoft Windows Common Controls 6.0

  • 13

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 25

    메뉴 구성도

    frmborrow_print(form)상환 내역 출력

    frmdeposit_kind(form)예금상품

    frmloan_kind(form)대출상품

    frmborrow(form)상환

    frmloan(form)대출거래신청

    frmdeposit_print(form)입출금 내역 출력

    frmdeposit(form)입/출금

    frmaccount(form)입금거래신청

    frmbranch(form)지점관리

    frmenterprise(form)기업고객

    frmpersonal(form)개인고객

    Form 이름메뉴 이름

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 26

    프린터 설정

    Microsoft Windows Common Controls 6.0을선택하여 프린터 설정

  • 14

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 27

    화면 출력

    Private Sub subprint()

    'ReportFile을 지정

    Rpt1.ReportFileName = App.Path& ".\customer.rpt"

    '출력

    Rpt1.Action = 1

    End Sub

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 28

    화면 출력(계속)

  • 15

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 29

    11.2절 Java 응용

    JDK 환경설정

    JDBC란?

    JDBC2.0 특징

    Java응용 예제

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 30

    Java2 SDK 환경

  • 16

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 31

    Java2 SDK설치

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 32

    Java2 SDK설치(계속)

  • 17

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 33

    Java2 SDK설치(계속)

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 34

    Java2 SDK 환경 설정

  • 18

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 35

    Java2 SDK 환경변수 확인

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 36

    JDBC란?

    자바에서 데이터베이스와의 연동을 위한API

    JDBC이용한 DB연동 기본과정

    접속(Connection)

    트랜잭션 처리(Transaction)

    접속 해제(Disconnection)

  • 19

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 37

    JDBC 접속

    접근하고자 하는 데이터베이스에 사용가능한 드라이버의 선택

    데이터베이스에 접근할 수 있는 정보

    드라이버 종류Type –1 : JDBC-ODBC bridge driverType –2 : Native-API partly-java driverType –3 : JDBC-Net pure java driverType –4 : Native-protocol pure java driver

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 38

    JDBC 환경변수 설정

    Native-protocol pure java driverWindows 95/98의 경우

  • 20

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 39

    JDBC 환경변수 설정(계속)

    Windows 2000에서 환경설정

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 40

    JDBC 환경변수 설정(계속)

    Windows 2000에서 환경설정 확인

  • 21

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 41

    JDBC에서 정의된 추상클래스

    ConnectionConnection

    StatementStatement

    PreparedStatementPreparedStatement

    CallableStatementCallableStatement

    ResulSetResulSet

    create

    State

    ment

    prepareStatement

    prepareCall

    execute

    executeQuery

    getMoreResults

    exec

    uteQu

    ery

    DataTypesDataTypes : Date, Time,: Date, Time,

    TimeStampTimeStamp, Numeric, , Numeric,

    BuiltBuilt--in Java types, etcin Java types, etcgetXXX

    getXXX

    setXXX

    DriverManagerDriverManager

    getConnection

    Commit, rollback

    executeUpdate

    exec

    uteUp

    date

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 42

    JDBC에서 데이터베이스 접속//======= 데이터베이스 관련변수 선언 시작 ===========//

    static Connection conn = null;

    static String driver = "oracle.jdbc.driver.OracleDriver";

    static String url = "jdbc:oracle:thin:@192.1.1.1:1521:ora8i";

    static String username = "dblab";

    static String passwd = "dblab401";

    //========== 데이터베이스 관련변수 선언 끝 ============//

    // db connection

    try {

    Class.forName(driver);

    conn = DriverManager.getConnection(url, username, passwd);

    } catch (ClassNotFoundException e) {

    System.out.println(e.getMessage());

    } catch (SQLException se) {

    System.out.println(se.getMessage());

    }

  • 22

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 43

    JDBC를 이용한 질의문장

    Statement 클래스가장 간단한 형태의 질의문(QueryString)생성에 유리

    복잡한 QueryString생성시 문자열 표현곤란

    PreparedStatement클래스객체내에 질의문을 포함특정 값 대신 매개변수(“?”)사용하여 대응되는 메소드를 호출하여 QueryString을 완성(getXXX, setXXX)

    CallableStatement클래스저장 프로시져를 이용하기 위해 사용

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 44

    JDBC 기초 응용

    데이터 검색 : Select

    데이터 추가 : Insert

    Statement클래스 이용

    PreparedStatement클래스 이용

    데이터 삭제 : Delete

    데이터 갱신 : Update

  • 23

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 45

    데이터 검색 : SelectString strQuery = "Select c_no, c_name, c_addr, c_phone, c_dist from customer" ;

    Statement stmt = null ;

    try {

    stmt = conn.createStatement() ;

    rs = stmt.executeQuery(strQuery) ;

    while(rs.next()) {

    // getString(String columnName) or getString(int ColumnNo)을 사용한다.

    System.out.print(rs.getString('c_no')) ;

    System.out.print(rs.getString(2)) ;

    System.out.print(rs.getString('c_addr')) ;

    System.out.print(rs.getString('c_phone')) ;

    System.out.println(rs.getString('c_dist')) ;

    }

    } catch (SQLException se) {

    se.printStackTrace();

    }

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 46

    데이터 검색 : Select(계속)

  • 24

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 47

    데이터 추가 : Insert(Statement)String strCno = "780321-2231101";

    String strAno = "AP100002";

    int iSerialno = 8;

    long lAmount = 50000;

    /* deposit 테이블에 입/출금 내역을 기록 */

    try {

    // QueryString을 생성

    String strQuery = "INSERT INTO deposit VALUES (";

    strQuery += "'" + strCno + "', '" + strAno + "'," + iSerialno + ",";

    strQuery += "" + lAmount + ", sysdate)";

    System.out.println(strQuery);

    Statement stmt = conn.createStatement(); // Statement 객체를 생성

    stmt.executeUpdate(strQuery); // Query 실행

    conn.commit(); // DB에 commit;

    stmt.close();

    } catch (SQLException se) {

    System.out.println("Database Insert Into error");

    se.printStackTrace();

    } //end try~catch

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 48

    데이터 추가 : Insert(계속)

  • 25

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 49

    데이터 추가 : Insert(PreparedStatement)String strCno = "780321-2231101";

    String strAno = "AP100002";

    int iSerialno = 8;

    long lAmount = 50000;

    try {

    // QueryString을 생성String strQuery = "INSERT INTO deposit VALUES (?,?,?,?,sysdate)”;PreparedStatement pstmt = conn.prepareStatement(strQuery);

    pstmt.setString(1, strCno); //첫번째 ?에 strCno의 값이 설정

    pstmt.setString(2, strAno);

    pstmt.setInt(3, iSerialno);

    pstmt.setLong(4, lAmount);

    pstmt.executeUpdate(); // Query 실행

    conn.commit(); // DB에 commit;

    pstmt.close();

    } catch (SQLException se) {

    System.out.println("Database Insert Into error");

    se.printStackTrace();

    } //end try~catch

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 50

    데이터 삭제 : DeleteString strQuery = null;

    PreparedStatement pstmt = null ;

    String strCname = “김지수”;try {

    /* customer 테이블에서 변수 strCname의 값을 갖는 고객 삭제*/

    strQuery = "delete from customer where c_name = ?";

    // preparedStatement객체 생성

    pstmt = conn.prepareStatement(strQuery) ;

    pstmt.setString(1, strCname) ;

    pstmt.executeUpdate() ;

    conn.commit(); // db에 commit;

    pstmt.close() ;

    } catch (SQLException se) {

    System.out.println("Database delete error") ;

    se.printStackTrace() ;

    } //end try~catch

  • 26

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 51

    데이터 삭제 : Delete(계속)

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 52

    데이터 갱신 : UpdateString strQuery = null;

    PreparedStatement pstmt = null ;

    try {

    strQuery = "update customer set c_phone = ? where c_name = ?" ;

    pstmt = conn.prepareStatement(strQuery) ;

    pstmt.setString(1, strCphone) ;

    pstmt.setString(2, strCno);

    pstmt.executeUpdate() ;

    conn.commit(); // db에 commit;

    pstmt.close();

    } catch (SQLException se) {

    System.out.println("Database delete error") ;

    se.printStackTrace();

    } //end try~catch

  • 27

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 53

    데이터 갱신 : Update(계속)

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 54

    JDBC 2.0에서 추가된 메소드

    ResultSet에서 커서이동

    rs.next(), rs.previous(), rs.first(), rs.last()

    ResultSet에서 insert, update, delete

    rs.insertRow(), rs.updateRow, rs.deleteRow()

  • 28

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 55

    JDBC2.0에서 SelectString strQuery = "Select c_no, c_name, c_addr, c_phone, c_dist from customer" ;

    ResultSet rs = null ; Statement stmt = null ;

    try {

    stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,

    ResultSet.CONCUR_UPDATABLE) ;

    rs = stmt.executeQuery(strQuery) ;

    rs.beforeFirst();

    while(rs.next()) {

    System.out.print(rs.getString(1) + ”\t”) ;System.out.print(rs.getString(2) + ”\t”) ;System.out.print(rs.getString(3) + ”\t”) ;System.out.print(rs.getString(4) + ”\t”) ;System.out.println(rs.getString(5)) ;

    }

    } catch (SQLException se) { se.printStackTrace() ; }

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 56

    JDBC2.0에서 Select(계속)

  • 29

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 57

    JDBC2.0에서 InsertString strQuery = "Select c_no, c_name, c_addr, c_phone, c_dist from customer" ;

    ResultSet rs = null ; Statement stmt = null ;

    try {

    stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE) ;

    rs = stmt.executeQuery(strQuery) ;

    rs.moveToInsertRow() ; // cursor의 위치를 insert buffer로 이동한다.

    rs.updateString(1, strCno.trim()) ; // 현재의 커서의 위치에 setting 한다.

    rs.updateString(2, strCname.trim()) ;

    rs.updateString(3, strCaddr.trim()) ;

    rs.updateString(4, strCphone.trim()) ;

    rs.updateString(5, strDist.trim()) ;

    // insert buffer에 setting된

    rs.insertRow() ;

    // cursor의 위치를 추가 이전의 위치로 이동한다.

    rs.moveToCurrentRow() ;

    conn.commit();

    } catch (SQLException se) { se.printStackTrace() ; }

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 58

    JDBC2.0에서 DeleteString strQuery = "Select c_no, c_name, c_addr, c_phone, c_dist from

    customer";

    ResultSet rs = null;

    Statement stmt = null;

    try {

    stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);

    rs = stmt.executeQuery(strQuery);

    rs.absolute(10);

    rs.deleteRow();

    conn.commit();

    } catch (SQLException se) { se.printStackTrace(); }

  • 30

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 59

    JDBC2.0에서 Updatetry {

    stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);

    rs = stmt.executeQuery(strQuery) ;

    rs.updateString(1, strCno.trim()) ;

    rs.updateString(2, strCname.trim()) ;

    rs.updateString(3, strCaddr.trim()) ;

    rs.updateString(4, strCphone.trim()) ;

    rs.updateString(5, strDist.trim()) ;

    rs.updateRow();

    conn.commit() ;

    } catch (SQLException se) { se.printStackTrace() ; }

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 60

    JDBC2.0에서 APIsStatement createStatement (int resultSetType, int resultSetConcurrency)PreparedStatement prepareStatement (String sql, int resultSetType, int resultSetConcurrency)CallableStatement prepareCall (String sql, int resultSetType, int resultSetConcurrency)

    resultSetType ResultSet.TYPE_FORWARD_ONLYResultSet.TYPE_SCROLL_INSENSITIVEResultSet.TYPE_SCROLL_SENSITIVE

    resultSetConcurrencyResultSet.CONCUR_READ_ONLYResultSet.CONCUR_UPDATABLE

  • 31

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 61

    내부/외부 변화에 따른 가시성

    forward-only

    scroll-sensitive

    scroll-insensitive

    내부삭제? 내부갱신? 내부추가? 외부삭제? 외부갱신? 외부추가?

    no

    yes

    yes

    yes

    yes

    yes

    no

    no

    no

    no

    no

    no

    no

    yes

    no

    no

    no

    no

    Copyright 2001, 서울산업대학교 전자계산학과 DBLab 62

    FirstBank Java예제

    frmCustomer.javafrmBranch.javafrmDepositOrder.javafrmInOut.javafrmDepositStatement.javafrmLoanOrder.javafrmPayBack.jav

    frmDepositKind.javafrmLoanKind.java