• 검색 결과가 없습니다.

JDBC 프로그래밍

N/A
N/A
Protected

Academic year: 2022

Share "JDBC 프로그래밍"

Copied!
44
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

JDBC 프로그래밍

[ 단원 12 ]

(2)

단원 12 JDBC 프로그래밍

학습목표

❖ 데이터베이스를 이해하고 DBMS인 MySQL을 설치할 수 있다.

• 데이터베이스와 DBMS의 이해

• MySQL 설치파일을 내려 받아 설치

❖ 데이터베이스에서 사용하는 SQL을 이해하고 관련 문장을 사용할 수 있다.

• DML과 DDL의 이해

• 데이터베이스 생성, 테이블 생성, 테이블 조회 관련 문장

❖ JDBC 와 드라이버에 대해 이해하고 JDBC 프로그래밍 6단계를 구현할 수 있다.

• JDBC 의미와 드라이버의 필요성

• JDBC 프로그래밍 6단계 구현

• JDBC 관련 클래스의 이해

❖ JDBC 프로그래밍 방법을 이해하고 구현할 수 있다.

• JDBC 드라이버 로드와 데이터베이스 연결 방법

• 원하는 테이블 생성 및 레코드 삽입

• 테이블 내용 조회

2

(3)

단원 12 JDBC 프로그래밍 3

1. 데이터베이스와 MYSQL

(4)

단원 12 JDBC 프로그래밍

데이터베이스 개요

❖ 데이터베이스

‘관련 있는 데이터의 저장소’

여러 사람이나 응용시스템에 의해 참조 가능하도록 서로 논리적으로 연관되어 통합 관리 되는 데이터의 모임

❖ 데이터베이스 관리시스템

데이터와 응용 프로그램 사이에서 중재자

모든 프로그램들이 데이터베이스를 유용하게 활용할 수 있도록 관리해 주는 소프트웨어

4

Section 1 데이터베이스와 MySQL p544

(5)

단원 12 JDBC 프로그래밍

필드와 레코드, 파일과 데이터베이스

❖ 필드와 레코드

필드: 특정한 종류의 데이터를 저장하기 위한 영역

레코드record : 필드가 여러 개 모이면 레코드

❖ 파일과 데이터베이스

파일 : 레코드가 여러 개 모이면 하나의 파일

데이터베이스: 서로 관련 있는 데이터들로 통합한 파일의 집합을

5

Section 1 데이터베이스와 MySQL p544

(6)

단원 12 JDBC 프로그래밍

MySQL 개요

❖ MySQL 은 대표적인 오픈 소스 DBMS 제품

초기에는 무료로 연구용

현재는 성능이 향상되어 상용 DBMS로도 널리 사용되는 제품

6

Section 1 데이터베이스와 MySQL

(7)

단원 12 JDBC 프로그래밍

MySQL Community Server 버전 내려받기

❖ MySQL 홈페이지

[Download]를 누르고 왼쪽 메뉴 [MySQL Community Server]

7

Section 1 데이터베이스와 MySQL

(8)

단원 12 JDBC 프로그래밍

MySQL JDBC 드라이버 내려받기

❖ 홈페이지 [Download] 페이지 하부 [Connector/J]를 선택

MySQL은 JDBC 드라이버를 [Connector/J]라고 부름

8

Section 1 데이터베이스와 MySQL

(9)

단원 12 JDBC 프로그래밍

MySQL 설치

❖ MySQL 설치 파일 [mysql-5.5.28-win32.msi]을 더블 클릭하여 설치

9

Section 1 데이터베이스와 MySQL

(10)

단원 12 JDBC 프로그래밍

설정 마법사

❖ 설정 마법사를 시작하여 설정할 MySQL 버전을 선택

[Standard Configuration]을 선택

10

Section 1 데이터베이스와 MySQL

(11)

단원 12 JDBC 프로그래밍

MySQL 워크벤치 설치

❖ MySQL 워크벤치

MySQL의 윈도우 유틸리티

홈페이지에서 내려받은 설치파일

[mysql-workbench-gpl-5.2.44-win32.msi]로 설치

11

Section 1 데이터베이스와 MySQL

(12)

단원 12 JDBC 프로그래밍

MySQL 설치 확인(1)

❖ 화면 왼쪽의 [Open Connection to Start Querying]

[Local Instance MySQL55]를 더블 클릭하면 서버 접속 화면이 표시

❖ 대화상자 [Connect to MySQL Server]

설치 시 지정한 암호를 입력하여 서버에 접속

12

Section 1 데이터베이스와 MySQL

(13)

단원 12 JDBC 프로그래밍

MySQL 설치 확인(2)

❖ MySQL 서버 실행의 다른 확인 방법

[Ctrl+Alt+Del]을 눌러

[Windows 작업 관리자]에서 [서비스]에서 서비스되는 MySQL55를 확인

13

Section 1 데이터베이스와 MySQL

(14)

단원 12 JDBC 프로그래밍 14

2. SQL

(15)

단원 12 JDBC 프로그래밍

SQL 개요

❖ SQL(Structured Query Language)

▪ DBMS에서 사용되는 언어

데이터베이스를 구축하고, 새로운 자료를 입력하거나, 데이터를 수정, 또는 삭제, 검색하는데 이용되는 가장 기본적인 언어

▪ 1970 년대에 IBM에서 개발

1980년대에 오라클에서 세계 최초로 상용 SQL 시스템을 발표

▪ DDL(Data Definition Language)

데이터베이스와 테이블의 구조의 생성, 수정, 삭제에 이용

▪ DML(Data Manipulation Language)

테이블 자료의 검색, 생성, 수정, 삭제에 이용

15

Section 2 SQL p552

(16)

단원 12 JDBC 프로그래밍

필드 자료형

❖ 테이블을 구성하는 필드는 입력되는 자료에 따라 그 유형이 결정

숫자형, 시간형, 문자형, 텍스 바이너리

16

Section 2 SQL

(17)

단원 12 JDBC 프로그래밍

SQL 기본 문장

❖ use 문장

질의에 대상을 지정하는 문장

use databasename;

❖ show 문장

데이터베이스 시스템에 대한 여러 정보를 보여주는 문장

현재 생성된 데이터베이스를 모두 보여주는 문장

show databases;

현재 연결된 데이터베이스의 모든 테이블을 보여주는 문장

show tables;

❖ desc 문장

SQL 문 desc는 테이블의 구조 정보를 보여주는 문장

desc tablename;

17

Section 2 SQL

(18)

단원 12 JDBC 프로그래밍

create 문장

❖ 데이터베이스 생성 문장 

create database databasename;

create database univdb;

create database testdb;

❖ create table: 테이블 생성 문장

create table tablename (fieldname fieldtype, …);

create table department (

departid int NOT NULL auto_increment,

name varchar(30) NOT NULL,

numstudent int NULL,

homepage varchar(30) NULL,

PRIMARY KEY ( departid )

);

18

Section 2 SQL

(19)

단원 12 JDBC 프로그래밍

drop 문장

❖ 데이터베이스, 케이블, 인덱스 또는 사용자 정의 함수를 영구적으로 삭제하는 SQL 문

drop database: 데이터베이스를 전체를 삭제

drop database databasename;

데이터베이스 univdb를 영구히 삭제

drop database univdb;

SQL 문 drop table는 하나 또는 여러 개의 테이블 전체를 삭제

drop table name[, name2, …];

테이블 user를 영구히 삭제

drop table user;

테이블 student와 professor를 삭제

drop table student, professor

19

Section 2 SQL

(20)

단원 12 JDBC 프로그래밍

alter 문장

❖ 데이터베이스의 테이블 구조를 바꾸는 문장

테이블에 칼럼을 추가

alter table tablename add column create_clause;

테이블의 필드를 삭제

alter table tablename drop columnname;

테이블의 이름을 새로운 newname으로 바꾸는 문장

alter table tablename rename newname;

테이블 student에 새로운 칼럼 address2를 추가하는 문장

alter table student add column address2 varchar(100);

테이블 student에서 칼럼 year를 제거

alter table student drop year;

테이블 student의 이름을 stdt로 수정하는 문장

alter table student rename stdt;

20

Section 2 SQL

(21)

단원 12 JDBC 프로그래밍

insert 문장

❖ insert 는 테이블에 한 행인 레코드를 삽입하는 문장

insert [into] table [ (column, …) ]
 values ( values ) [, ( values ) …];

테이블 student에 문장에서 기술된 값의 레코드를 삽입하는 문장

insert into student (id, passwd, name, year, snum, depart, mobile1, mobile2, address, email)


values ('javajsp', 'java8394', '김정수', 2010, '1077818', '컴퓨터공학과', '011', '7649-9875', '서울시', 'java2@gmail.com');

만일 insert 문장에서 기술된 값의 순서가 테이블 student의 필드 생성 순서와 일치 한다면 필드 이름을 기술할 필요가 없음

insert into student values ('jdbcmania', 'javajsp', '김수현', 2009, '2044187', '컴퓨터공학과', '011', '87654-4983', '인천시', 'java@hanmail.com');

21

Section 2 SQL

(22)

단원 12 JDBC 프로그래밍

delete 문장

❖ 테이블의 행을 삭제하는 문장

delete는 테이블 구조를 수정하지 않고 where 조건을 만족하는 행 자료를 모두 삭 제

delete from tablename [where condition_clause];

테이블 student의 모든 자료를 삭제

delete from student;

테이블 student에서 필드 year가 2008인 행을 모두 삭제

delete from student where year == 2008;

22

Section 2 SQL

(23)

단원 12 JDBC 프로그래밍

조회 select 문장

테이블 또는 테이블의 조합에서 조건인 [where] 절을 만족하는 행을 선택하는 문장 

select fieldname1 [, fieldname2 …] from tablename1 [, tablename2 …] [where fieldname <op> value];

▪ 테이블 student에서 모든 레코드의 모든 필드를 나타내는 문장

select * from student;

▪ 테이블 student에서 모든 레코드의 필드 name, snum, depart만 나타내는 문장

select name, snum, depart from student;

▪ 테이블 student에서 필드 name이 ‘홍길동’인 레코드를 선택하여 모든 필드를 표시

select * from student where name = ‘홍길동’;

▪ 테이블 student에서 필드 name이 ‘홍’으로 시작하는 모든 레코드를 선택하여 모든 필드를 나 타내는 문장

즉 이름이 ‘홍’으로 시작하는 레코드를 추출하는 문장

select * from student where name like ‘홍%’;

▪ 테이블 student에서 필드 name 중간에 ‘홍’이 있는 모든 레코드를 선택하여 모든 필드를 나타 내는 문장

즉 이름 중간에 ‘홍’이 존재하는 레코드를 추출하는 문장

select * from student where name like ‘%홍%’;

23

Section 2 SQL

(24)

단원 12 JDBC 프로그래밍

update 문장

❖ 테이블의 구조를 바꾸지 않으면서 테이블 내용을 수정하는 문장

update tablename set column1 = value1 [, column2 = value2 …] [where

condition_clause];

여기서 condition_clause는 조건을 만족하는 구문

테이블 student에서 필드 depart가 ‘전산학과’인 것을 모두 선택하여 depart를 ‘컴 퓨터공학과’로 수정하는 문장

update student set depart = ’컴퓨터공학과’ where depart == ‘전산학과’;

테이블 student에서 필드 id가 ‘javajsp’인 레코드를 선택하여 필드 year는 2010 으로, address는 “인천시’로 수정하는 문장

update student set year = 2010, address = ‘인천시’ where id == ‘javajsp’;

테이블 student에서 평균평점을 표현하는 필드 gpa가 4.3 이상인 학생의 레코드 를 선택하여 필드 award에 ‘우등’으로 수정하는 문장 

update student set award = ‘우등’ where gpa >= 4.3;

24

Section 2 SQL

(25)

단원 12 JDBC 프로그래밍 25

3. JDBC 프로그래밍 구현

(26)

단원 12 JDBC 프로그래밍

JDBC 이해

❖ Java DataBase Connectivity 의 첫 자로 구성된 JDBC

자바 언어로 데이터베이스 프로그래밍을 하기 위한 라이브러리

특정한 DBMS에 종속되지 않는 관련 API(Application Programming Interface) 를 제공

26

Section 3 JDBC 프로그래밍 구현 p562

(27)

단원 12 JDBC 프로그래밍

JDBC API 클래스

❖ 패키지 java.sql와 javax.sql로 구성

▪ Driver, DriverMananager, Connection, Statement, PreparedStatement, CallableStatement, ResultSet, ResultSetMetaData, DatabaseMetaData, DataSource 등

❖ 데이터베이스 기능을 지원하기 위한 표준 API

▪ 데이터베이스를 연결하여 테이블 형태의 자료를 참조

▪ SQL 문을 질의

▪ SQL 문의 결과를 처리

27

Section 3 JDBC 프로그래밍 구현

(28)

단원 12 JDBC 프로그래밍

JDBC 역할

❖ 다양한 DBMS에 독립적으로 데이터베이스 프로그래밍을 가능하도록 하는 API(application programming interfaces) 규격

오라클(ORACLE), MySQL, SQLServer, DB2 등 어떤 DBMS를 사용하던지 소 스의 수정을 최소화하여 바로 실행

JDBC와 함께 JDBC 드라이버(JDBC Driver)도 필요

28

Section 3 JDBC 프로그래밍 구현

(29)

단원 12 JDBC 프로그래밍

JDBC 드라이버 설치

❖ 적당한 버전의 Connector/J 커넥터 설치

[jre 설치폴더] 하부 [lib/ext]에 [mysql-connector-java-5.1.6-bin.jar]와 같은 JDBC 드라이버 파일을 복사

이클립스의 [JRE System Library] 하부에서 확인 가능

다른 방법으로는 적당한 폴더에 복사한 후 classpath를 설정하는 방법

29

Section 3 JDBC 프로그래밍 구현

(30)

단원 12 JDBC 프로그래밍

JDBC 프로그래밍 과정 6단계

❖ select 문으로 간단한 질의를 수행하는 6단계

30

Section 3 JDBC 프로그래밍 구현

(31)

단원 12 JDBC 프로그래밍

실습예제 12-1

드라이버의 파일 이름이 [Driver]

패키지가 [org.gjt.mm.mysql]

문장 Class.forName()을 호출

DriverManager.getConnection()을 호출

31

Section 3 JDBC 프로그래밍 구현

❖ JDBC 프로그래밍 6단계 중에서 1, 2 그리고 6단계를 실행

(32)

단원 12 JDBC 프로그래밍

다양한 JDBC 드라이버 로드

❖ 문장 Class.forName()

동적으로 JDBC 드라이브 클래스를 로드

드라이버 클래스가 객체화 되고 객체화와 동시에 자동적으로 DriverManager.registerDriver()를 호출

DriverManager에서 관리하는 드라이버 리스트에 드라이버 등록

DBMS MySQL 경우

JDBC 드라이버 이름을 [com.mysql.jdbc.Driver]로도 제공

다양한 JDBC 드라이버

32

Section 3 JDBC 프로그래밍 구현

(33)

단원 12 JDBC 프로그래밍

다양한 JDBC 관련 클래스

❖ 주요 클래스

❖ JDBC 의 인터페이스

모든 데이터베이스에서 사용할 수 있는 공통적인 데이터베이스 참조 개념을 추상화

특정 제품의 JDBC드라이버에서 상속받아 구현됨

33

Section 3 JDBC 프로그래밍 구현

(34)

단원 12 JDBC 프로그래밍

데이터베이스 연결 URL 구조

❖ DriverManager.getConnection() 을 호출

클래스 DriverManager의 static 메소드인 getConnection()

등록된 드라이버 중에서 주어진 URL로 데이터베이스에 연결할 수 있는 드라이버를 찾 아서

Driver 클래스의 메소드 connect()를 호출하고

결과인 Connection 객체를 반환

❖ 데이터베이스 URL 정보

JDBC 프로토콜의 의미하는 jdbc로 시작하며

다음에 <subprotocol>, <subname>을 기술

– 세 부분을 콜론(:)으로 구분

34

Section 3 JDBC 프로그래밍 구현

(35)

단원 12 JDBC 프로그래밍

다양한 DBMS 연결 방법

❖ MySQL 의 URL에서 <subname> 요소

❖ DBMS 에 따른 데이터베이스 URL

35

Section 3 JDBC 프로그래밍 구현

(36)

단원 12 JDBC 프로그래밍

실습예제 12-2

데이터베이스 이름을 myjavadb로 생 성하는 SQL 문장 

create database myjavadb

메소드 executeUpdate()

create 또는 drop과 같은 DDL이나 insert, delete, update와 같이 테 이블의 내용을 변경하는 DML 문장에 사용

질의 문장이 DML이면 변경된 행의 수 인 정수를 반환하며, DDL이면 0을 반

36

Section 3 JDBC 프로그래밍 구현

❖ 데이터베이스 myjavadb 만들기

(37)

단원 12 JDBC 프로그래밍

테이블 생성과 레코드 삽입을 위한 SQL

❖ 테이블을 생성하는 SQL 문장 create

테이블 student

식별자, 이름, 학번, 학과 필드로 id, name, snum, dept

주 키는 id

❖ 테이블에 3개의 레코드를 삽입하는 insert 문장

37

Section 3 JDBC 프로그래밍 구현

(38)

단원 12 JDBC 프로그래밍

실습예제 12-3

❖ 테이블 생성과 레코드 삽입 예제

38

Section 3 JDBC 프로그래밍 구현

package database.mysql;

 

import java.sql.*;

 

public class CreateTable {

public static void main(String[] args) { try {

String driverName = "org.gjt.mm.mysql.Driver";

String DBName = "myjavadb";

String dbURL = "jdbc:mysql://localhost:3306/" + DBName;

//+ "?useUnicode=true&characterEncoding=euckr";

String sqlCT = "create table student (" + "id varchar(20) NOT NULL, " + "name varchar(20) NOT NULL, " + "snum int NOT NULL, " +

"dept varchar(20) NOT NULL, " + "PRIMARY KEY ( id ) " +

");";

//JDBC 드라이버 로드

Class.forName(driverName);

Connection con = DriverManager.getConnection(dbURL, "root",

"");

 

//질의를 할 Statement 만들기

Statement stmt = con.createStatement();

//데이터베이스 myjavadb에 테이블 student 만들기 stmt.executeUpdate(sqlCT);

System.out.println("테이블 student가 생성되었습니다.");

 

//데이터베이스 myjavadb의 테이블 student에 레코드 삽입

stmt.executeUpdate("insert into student values ('01', '홍길 동', 20125678, '전산과학과');");

stmt.executeUpdate("insert into student values ('02', '김제 동', 20121234, '미생물학과');");

stmt.executeUpdate("insert into student values ('03', '김지 숙', 20137892, '고고학과');");

System.out.println("테이블 student에 3개의 레코드가 삽입되었습니다.");

con.close();

}

catch (Exception e) {

System.out.println("MySql 데이터베이스에 문제가 있습니다.");

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

e.printStackTrace();

} } }

(39)

단원 12 JDBC 프로그래밍

메소드 executeQuery()와 인터페이스 ResultSet

메소드 executeQuery()

테이블 형태의 결과를 인터페이스 ResultSet으로 반환

데이터베이스 구조와 테이블의 내용에 영향을 미치지 않는 select 문 질의에 적합

인터페이스 ResultSet

실질적으로 질의 결과의
 자료가 있는 영역과
 함께 BOF, EOF 제공

첫 행 자료 이전


(Before the First Row)에
 BOF(Begin Of File)

마지막 행 자료 이후


(After the Last Row)에
 EOF(End Of File)

각각의 행에서 각 칼럼은
 칼럼이름 또는 번호 순으로
 식별

번호는 1번부터 시작

39

Section 3 JDBC 프로그래밍 구현

(40)

단원 12 JDBC 프로그래밍

인터페이스 ResultSet의 커서 이동 메소드

인터페이스 ResultSet

▪ 질의 결과의 현재 행(row)을 가리 키는 커서(cursor)라는 개념

▪ next()

커서를 다음 행으로 이동시키는 메소드

▪ 커서를 이동시키는 다양한 메소드 를 제공

▪ while 문장으로 ResultSet에서 자료가 있는 1행부터 마지막 행까 지 순회

커서는 처음에 BOF에 위치

– 메소드 next()는 커서를 다음 행 으로 이동

행이 자료가 있는 행이면 true 를 반환

– BOF나 EOF과 같이 자료가 없 는 행이면 false를 반환

40

Section 3 JDBC 프로그래밍 구현

(41)

단원 12 JDBC 프로그래밍

ResutSet 의 메소드 getString()과 getInt()

❖ 행에서 컬럼 자료를 참조

ResultSet의 메소드 getString()을 이용

인자는 칼럼이름을 문자열로 직접 쓰거나 또는 칼럼 번호를 이용

getInt(), getDouble(), getDate() 등 다양한 컬럼 반환 메소드를 제공

41

Section 3 JDBC 프로그래밍 구현

(42)

단원 12 JDBC 프로그래밍

실습예제 12-4

데이터베이스 myjavadb에 있는 테이블 student를 모두 조회하여 출력

42

Section 3 JDBC 프로그래밍 구현

package database.mysql;

 

import java.sql.*;

 

public class SelectTable {

public static void main(String[] args) { try {

String driverName = "org.gjt.mm.mysql.Driver";

String DBName = "myjavadb";

String dbURL = "jdbc:mysql://localhost:3306/" + DBName;

String SQL = "select * from student;";

//JDBC 드라이버 로드

Class.forName(driverName);

Connection con =

DriverManager.getConnection(dbURL, "root", "");

 

//질의를 할 Statement 만들기

Statement stmt = con.createStatement();

 

//데이터베이스 myjavadb의 테이블 student에 레코드 조회

ResultSet result = stmt.executeQuery(SQL);

System.out.println(" --- 테이블 student 내용 조회 ---");

while (result.next()) {

System.out.print(result.getString(1) + "\t");

System.out.print(result.getString(2) + "\t");

System.out.print(result.getInt(3) + "\t");

System.out.println(result.getString(4));

}

con.close();

}

catch (Exception e) {

System.out.println("MySql 데이터베이스에 문제가 있습니 다.");

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

e.printStackTrace();

} } }

(43)

43

(44)

[ Add your company slogan ]

Thank You !

참조

관련 문서

프로그래밍

프로그래밍

전류가 흐를때 1, 흐르지 않을 때 0으로만 숫자를 표현할 수 있음 이진수 한자리를 bit라 칭하고 8개의 bit는

 클래스계층 공유어프로치에서는, 부모(parent)클래스에 정의되어 있는 정보의 조작은 자식(child)클래스에서 정의되지 않고, 정의되지 않은 나머지 것만을

Column paid is JDBC type -7 which is called BIT.. 다른 SQL 문장의 실행.

TransferDatabase 다른 데이터베이스 파일과의 가져오기, 내보내기, 연결 등을 지원한다. TransferSpreadsheet 스프레드시트

• 이번 실습에서는 Practice13_1 프로그램을 수 정하여, 곡선의 컨트롤 포인트를 마우스의 드 래깅으로 이동하여 곡선을 업데이트하도록 할 것이고, 곡선을

첫 번째 worker 함수 호출 10번 결과를 출력. 두 번째 worker 함수 호출