Download presentation
Presentation is loading. Please wait.
1
12장. JDBC 프로그래밍
2
학습목표 데이터베이스를 이해하고 DBMS인 MySQL을 설치할 수 있다.
• DML과 DDL의 이해 • 데이터베이스 생성, 테이블 생성, 테이블 조회 관련 문장 JDBC와 드라이버에 대해 이해하고 JDBC 프로그래밍 6단계를 구현할 수 있다. • JDBC 의미와 드라이버의 필요성 • JDBC 프로그래밍 6단계 구현 • JDBC 관련 클래스의 이해 JDBC 프로그래밍 방법을 이해하고 구현할 수 있다. • JDBC 드라이버 로드와 데이터베이스 연결 방법 • 원하는 테이블 생성 및 레코드 삽입 • 테이블 내용 조회
3
1. 데이터베이스와 MySQL
4
데이터베이스 개요 데이터베이스 데이터베이스 관리시스템 ‘관련 있는 데이터의 저장소’ 데이터와 응용 프로그램 사이에서 중재자
Section 1 데이터베이스와 MySQL p544 데이터베이스 개요 데이터베이스 ‘관련 있는 데이터의 저장소’ 여러 사람이나 응용시스템에 의해 참조 가능하도록 서로 논리적으로 연관되어 통합 관리되는 데이터의 모임 데이터베이스 관리시스템 데이터와 응용 프로그램 사이에서 중재자 모든 프로그램들이 데이터베이스를 유용하게 활용할 수 있도록 관리해 주는 소프트웨어
5
필드와 레코드, 파일과 데이터베이스 필드와 레코드 파일과 데이터베이스 필드: 특정한 종류의 데이터를 저장하기 위한 영역
Section 1 데이터베이스와 MySQL 필드와 레코드, 파일과 데이터베이스 필드와 레코드 필드: 특정한 종류의 데이터를 저장하기 위한 영역 레코드record : 필드가 여러 개 모이면 레코드 파일과 데이터베이스 파일 : 레코드가 여러 개 모이면 하나의 파일 데이터베이스: 서로 관련 있는 데이터들로 통합한 파일의 집합을
6
MySQL 개요 MySQL은 대표적인 오픈 소스 DBMS 제품 초기에는 무료로 연구용
Section 1 데이터베이스와 MySQL MySQL 개요 MySQL은 대표적인 오픈 소스 DBMS 제품 초기에는 무료로 연구용 현재는 성능이 향상되어 상용 DBMS로도 널리 사용되는 제품
7
MySQL Community Server 버전 내려받기
Section 1 데이터베이스와 MySQL MySQL Community Server 버전 내려받기 MySQL 홈페이지 [Download]를 누르고 왼쪽 메뉴 [MySQL Community Server]
8
MySQL JDBC 드라이버 내려받기 홈페이지 [Download] 페이지 하부 [Connector/J]를 선택
Section 1 데이터베이스와 MySQL MySQL JDBC 드라이버 내려받기 홈페이지 [Download] 페이지 하부 [Connector/J]를 선택 MySQL은 JDBC 드라이버를 [Connector/J]라고 부름
9
MySQL 설치 MySQL 설치 파일 [mysql-5.5.28-win32.msi]을 더블 클릭하여 설치
Section 1 데이터베이스와 MySQL MySQL 설치 MySQL 설치 파일 [mysql win32.msi]을 더블 클릭하여 설치
10
설정 마법사 설정 마법사를 시작하여 설정할 MySQL 버전을 선택 [Standard Configuration]을 선택
Section 1 데이터베이스와 MySQL 설정 마법사 설정 마법사를 시작하여 설정할 MySQL 버전을 선택 [Standard Configuration]을 선택
11
MySQL 워크벤치 설치 MySQL 워크벤치 MySQL의 윈도우 유틸리티 홈페이지에서 내려받은 설치파일
Section 1 데이터베이스와 MySQL MySQL 워크벤치 설치 MySQL 워크벤치 MySQL의 윈도우 유틸리티 홈페이지에서 내려받은 설치파일 [mysql-workbench-gpl win32.msi]로 설치
12
MySQL 설치 확인(1) 화면 왼쪽의 [Open Connection to Start Querying]
Section 1 데이터베이스와 MySQL MySQL 설치 확인(1) 화면 왼쪽의 [Open Connection to Start Querying] [Local Instance MySQL55]를 더블 클릭하면 서버 접속 화면이 표시 대화상자 [Connect to MySQL Server] 설치 시 지정한 암호를 입력하여 서버에 접속
13
MySQL 설치 확인(2) MySQL 서버 실행의 다른 확인 방법 [Ctrl+Alt+Del]을 눌러
Section 1 데이터베이스와 MySQL MySQL 설치 확인(2) MySQL 서버 실행의 다른 확인 방법 [Ctrl+Alt+Del]을 눌러 [Windows 작업 관리자]에서 [서비스]에서 서비스되는 MySQL55를 확인
14
2. SQL
15
SQL 개요 SQL(Structured Query Language) Section 2 SQL p552
DBMS에서 사용되는 언어 데이터베이스를 구축하고, 새로운 자료를 입력하거나, 데이터를 수정, 또는 삭제, 검색하는데 이용되는 가장 기본적인 언어 1970년대에 IBM에서 개발 1980년대에 오라클에서 세계 최초로 상용 SQL 시스템을 발표 DDL(Data Definition Language) 데이터베이스와 테이블의 구조의 생성, 수정, 삭제에 이용 DML(Data Manipulation Language) 테이블 자료의 검색, 생성, 수정, 삭제에 이용
16
필드 자료형 테이블을 구성하는 필드는 입력되는 자료에 따라 그 유형이 결정 숫자형, 시간형, 문자형, 텍스 바이너리
Section 2 SQL 필드 자료형 테이블을 구성하는 필드는 입력되는 자료에 따라 그 유형이 결정 숫자형, 시간형, 문자형, 텍스 바이너리
17
SQL 기본 문장 use 문장 show 문장 desc 문장 질의에 대상을 지정하는 문장
Section 2 SQL SQL 기본 문장 use 문장 질의에 대상을 지정하는 문장 use databasename; show 문장 데이터베이스 시스템에 대한 여러 정보를 보여주는 문장 현재 생성된 데이터베이스를 모두 보여주는 문장 show databases; 현재 연결된 데이터베이스의 모든 테이블을 보여주는 문장 show tables; desc 문장 SQL 문 desc는 테이블의 구조 정보를 보여주는 문장 desc tablename;
18
create 문장 데이터베이스 생성 문장 create table: 테이블 생성 문장
Section 2 SQL 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 ) );
19
drop 문장 데이터베이스, 케이블, 인덱스 또는 사용자 정의 함수를 영구적으로 삭제하는 SQL 문
Section 2 SQL 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
20
alter 문장 데이터베이스의 테이블 구조를 바꾸는 문장 테이블에 칼럼을 추가 테이블의 필드를 삭제
Section 2 SQL 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;
21
insert 문장 insert는 테이블에 한 행인 레코드를 삽입하는 문장
Section 2 SQL insert 문장 insert는 테이블에 한 행인 레코드를 삽입하는 문장 insert [into] table [ (column, …) ] values ( values ) [, ( values ) …]; 테이블 student에 문장에서 기술된 값의 레코드를 삽입하는 문장 insert into student (id, passwd, name, year, snum, depart, mobile1, mobile2, address, ) values ('javajsp', 'java8394', '김정수', 2010, ' ', '컴퓨터공학과', '011', ' ', '서울시', 만일 insert 문장에서 기술된 값의 순서가 테이블 student의 필드 생성 순서와 일치한다면 필드 이름을 기술할 필요가 없음 insert into student values ('jdbcmania', 'javajsp', '김수현', 2009, ' ', '컴퓨터공학과', '011', ' ', '인천시',
22
delete 문장 테이블의 행을 삭제하는 문장
Section 2 SQL delete 문장 테이블의 행을 삭제하는 문장 delete는 테이블 구조를 수정하지 않고 where 조건을 만족하는 행 자료를 모두 삭제 delete from tablename [where condition_clause]; 테이블 student의 모든 자료를 삭제 delete from student; 테이블 student에서 필드 year가 2008인 행을 모두 삭제 delete from student where year == 2008;
23
조회 select 문장 테이블 또는 테이블의 조합에서 조건인 [where] 절을 만족하는 행을 선택하는 문장
Section 2 SQL 조회 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 ‘%홍%’;
24
update 문장 테이블의 구조를 바꾸지 않으면서 테이블 내용을 수정하는 문장
Section 2 SQL 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;
25
3. JDBC 프로그래밍 구현
26
JDBC 이해 Java DataBase Connectivity의 첫 자로 구성된 JDBC
Section 3 JDBC 프로그래밍 구현 p562 JDBC 이해 Java DataBase Connectivity의 첫 자로 구성된 JDBC 자바 언어로 데이터베이스 프로그래밍을 하기 위한 라이브러리 특정한 DBMS에 종속되지 않는 관련 API(Application Programming Interface)를 제공
27
JDBC API 클래스 패키지 java.sql와 javax.sql로 구성 데이터베이스 기능을 지원하기 위한 표준 API
Section 3 JDBC 프로그래밍 구현 JDBC API 클래스 패키지 java.sql와 javax.sql로 구성 Driver, DriverMananager, Connection, Statement, PreparedStatement, CallableStatement, ResultSet, ResultSetMetaData, DatabaseMetaData, DataSource 등 데이터베이스 기능을 지원하기 위한 표준 API 데이터베이스를 연결하여 테이블 형태의 자료를 참조 SQL 문을 질의 SQL 문의 결과를 처리
28
Section 3 JDBC 프로그래밍 구현 JDBC 역할 다양한 DBMS에 독립적으로 데이터베이스 프로그래밍을 가능하도록 하는 API(application programming interfaces) 규격 오라클(ORACLE), MySQL, SQLServer, DB2 등 어떤 DBMS를 사용하던지 소스의 수정을 최소화하여 바로 실행 JDBC와 함께 JDBC 드라이버(JDBC Driver)도 필요
29
JDBC 드라이버 설치 적당한 버전의 Connector/J 커넥터 설치
Section 3 JDBC 프로그래밍 구현 JDBC 드라이버 설치 적당한 버전의 Connector/J 커넥터 설치 [jre 설치폴더] 하부 [lib/ext]에 [mysql-connector-java bin.jar]와 같은 JDBC 드라이버 파일을 복사 이클립스의 [JRE System Library] 하부에서 확인 가능 다른 방법으로는 적당한 폴더에 복사한 후 classpath를 설정하는 방법
30
Section 3 JDBC 프로그래밍 구현 JDBC 프로그래밍 과정 6단계 select 문으로 간단한 질의를 수행하는 6단계
31
실습예제 12-1 JDBC 프로그래밍 6단계 중에서 1, 2 그리고 6단계를 실행 드라이버의 파일 이름이 [Driver]
Section 3 JDBC 프로그래밍 구현 실습예제 12-1 JDBC 프로그래밍 6단계 중에서 1, 2 그리고 6단계를 실행 드라이버의 파일 이름이 [Driver] 패키지가 [org.gjt.mm.mysql] 문장 Class.forName()을 호출 DriverManager.getConnection()을 호출
32
다양한 JDBC 드라이버 로드 문장 Class.forName() 동적으로 JDBC 드라이브 클래스를 로드
Section 3 JDBC 프로그래밍 구현 다양한 JDBC 드라이버 로드 문장 Class.forName() 동적으로 JDBC 드라이브 클래스를 로드 드라이버 클래스가 객체화 되고 객체화와 동시에 자동적으로 DriverManager.registerDriver()를 호출 DriverManager에서 관리하는 드라이버 리스트에 드라이버 등록 DBMS MySQL 경우 JDBC 드라이버 이름을 [com.mysql.jdbc.Driver]로도 제공 다양한 JDBC 드라이버
33
다양한 JDBC 관련 클래스 주요 클래스 JDBC의 인터페이스
Section 3 JDBC 프로그래밍 구현 다양한 JDBC 관련 클래스 주요 클래스 JDBC의 인터페이스 모든 데이터베이스에서 사용할 수 있는 공통적인 데이터베이스 참조 개념을 추상화 특정 제품의 JDBC드라이버에서 상속받아 구현됨
34
데이터베이스 연결 URL 구조 DriverManager.getConnection()을 호출 데이터베이스 URL 정보
Section 3 JDBC 프로그래밍 구현 데이터베이스 연결 URL 구조 DriverManager.getConnection()을 호출 클래스 DriverManager의 static 메소드인 getConnection() 등록된 드라이버 중에서 주어진 URL로 데이터베이스에 연결할 수 있는 드라이버를 찾아서 Driver 클래스의 메소드 connect()를 호출하고 결과인 Connection 객체를 반환 데이터베이스 URL 정보 JDBC 프로토콜의 의미하는 jdbc로 시작하며 다음에 <subprotocol>, <subname>을 기술 세 부분을 콜론(:)으로 구분
35
다양한 DBMS 연결 방법 MySQL의 URL에서 <subname> 요소 DBMS에 따른 데이터베이스 URL
Section 3 JDBC 프로그래밍 구현 다양한 DBMS 연결 방법 MySQL의 URL에서 <subname> 요소 DBMS에 따른 데이터베이스 URL
36
실습예제 12-2 데이터베이스 myjavadb 만들기 데이터베이스 이름을 myjavadb로 생성하는 SQL 문장
Section 3 JDBC 프로그래밍 구현 실습예제 12-2 데이터베이스 myjavadb 만들기 데이터베이스 이름을 myjavadb로 생성하는 SQL 문장 create database myjavadb 메소드 executeUpdate() create 또는 drop과 같은 DDL이나 insert, delete, update와 같이 테이블의 내용을 변경하는 DML 문장에 사용 질의 문장이 DML이면 변경된 행의 수인 정수를 반환하며, DDL이면 0을 반환
37
테이블 생성과 레코드 삽입을 위한 SQL 테이블을 생성하는 SQL 문장 create
Section 3 JDBC 프로그래밍 구현 테이블 생성과 레코드 삽입을 위한 SQL 테이블을 생성하는 SQL 문장 create 테이블 student 식별자, 이름, 학번, 학과 필드로 id, name, snum, dept 주 키는 id 테이블에 3개의 레코드를 삽입하는 insert 문장
38
실습예제 12-3 테이블 생성과 레코드 삽입 예제 Section 3 JDBC 프로그래밍 구현
package database.mysql; Statement stmt = con.createStatement(); //데이터베이스 myjavadb에 테이블 student 만들기 import java.sql.*; stmt.executeUpdate(sqlCT); System.out.println("테이블 student가 생성되었습니다."); public class CreateTable { public static void main(String[] args) { //데이터베이스 myjavadb의 테이블 student에 레코드 삽입 try { stmt.executeUpdate("insert into student values ('01', '홍길동', , '전산과학과');"); String driverName = "org.gjt.mm.mysql.Driver"; String DBName = "myjavadb"; stmt.executeUpdate("insert into student values ('02', '김제동', , '미생물학과');"); String dbURL = "jdbc:mysql://localhost:3306/" + DBName; //+ "?useUnicode=true&characterEncoding=euckr"; stmt.executeUpdate("insert into student values ('03', '김지숙', , '고고학과');"); String sqlCT = "create table student (" + "id varchar(20) NOT NULL, " + System.out.println("테이블 student에 3개의 레코드가 삽입되었습니다."); "name varchar(20) NOT NULL, " + "snum int NOT NULL, " + con.close(); "dept varchar(20) NOT NULL, " + } "PRIMARY KEY ( id ) " + catch (Exception e) { ");"; System.out.println("MySql 데이터베이스에 문제가 있습니다."); System.out.println(e.getMessage()); //JDBC 드라이버 로드 e.printStackTrace(); Class.forName(driverName); Connection con = DriverManager.getConnection(dbURL, "root", ""); //질의를 할 Statement 만들기
39
메소드 executeQuery()와 인터페이스 ResultSet
Section 3 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번부터 시작
40
인터페이스 ResultSet의 커서 이동 메소드
Section 3 JDBC 프로그래밍 구현 인터페이스 ResultSet의 커서 이동 메소드 인터페이스 ResultSet 질의 결과의 현재 행(row)을 가리키는 커서(cursor)라는 개념 next() 커서를 다음 행으로 이동시키는 메소드 커서를 이동시키는 다양한 메소드를 제공 while 문장으로 ResultSet에서 자료가 있는 1행부터 마지막 행까지 순회 커서는 처음에 BOF에 위치 메소드 next()는 커서를 다음 행으로 이동 행이 자료가 있는 행이면 true를 반환 BOF나 EOF과 같이 자료가 없는 행이면 false를 반환
41
ResutSet의 메소드 getString()과 getInt()
Section 3 JDBC 프로그래밍 구현 ResutSet의 메소드 getString()과 getInt() 행에서 컬럼 자료를 참조 ResultSet의 메소드 getString()을 이용 인자는 칼럼이름을 문자열로 직접 쓰거나 또는 칼럼 번호를 이용 getInt(), getDouble(), getDate() 등 다양한 컬럼 반환 메소드를 제공
42
실습예제 12-4 데이터베이스 myjavadb에 있는 테이블 student를 모두 조회하여 출력
Section 3 JDBC 프로그래밍 구현 실습예제 12-4 데이터베이스 myjavadb에 있는 테이블 student를 모두 조회하여 출력 package database.mysql; ResultSet result = stmt.executeQuery(SQL); System.out.println(" 테이블 student 내용 조회 ---"); import java.sql.*; while (result.next()) { public class SelectTable { System.out.print(result.getString(1) + "\t"); public static void main(String[] args) { System.out.print(result.getString(2) + "\t"); try { System.out.print(result.getInt(3) + "\t"); String driverName = "org.gjt.mm.mysql.Driver"; System.out.println(result.getString(4)); String DBName = "myjavadb"; } String dbURL = "jdbc:mysql://localhost:3306/" + DBName; con.close(); String SQL = "select * from student;"; catch (Exception e) { System.out.println("MySql 데이터베이스에 문제가 있습니다."); //JDBC 드라이버 로드 Class.forName(driverName); System.out.println(e.getMessage()); Connection con = DriverManager.getConnection(dbURL, "root", ""); e.printStackTrace(); //질의를 할 Statement 만들기 Statement stmt = con.createStatement(); //데이터베이스 myjavadb의 테이블 student에 레코드 조회
43
Thank You !
Similar presentations