명품 JAVA Programming 제 17 장 JDBC 프로그래밍.

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

프로그램이란 프로그램 생성 과정 프로젝트 생성 프로그램 실행 컴퓨터를 사용하는 이유는 무엇인가 ? – 주어진 문제를 쉽고, 빠르게 해결하기 위해서 사용한다. 컴퓨터를 사용한다는 것은 ? – 컴퓨터에 설치 혹은 저장된 프로그램을 사용하는 것이다. 문제를 해결하기 위한.
PARK SUNGJIN Oracle 설치 PARK SUNGJIN
DB 프로그래밍 학기.
DB 프로그래밍 학기.
MS-Access의 개요 1강 MOS Access 2003 CORE 학습내용 액세스 응용 프로그램은 유용한 데이터를
최윤정 Java 프로그래밍 클래스 상속 최윤정
제 10 장 JDBC 프로그래밍 학기 인터넷비즈니스과 강 환수 교수.
소프트웨어시스템설계(6주) 데이터베이스 연동
주)INVENTORNICS 노창배 소프트웨어 김 경 순
Ch.07-5 xml-rpc 사용하기 김상엽.
JDBC 개요 Section 04 JDBC 개념과 역할 JDBC 구조 애 플 리 케 이 션 오라클 DBMS MySql DBMS
JSP Programming with a Workbook
어서와 Java는 처음이지! 제19장 데이터베이스 프로그래밍.
제 09 장 데이터베이스와 MySQL 학기 인터넷비즈니스과 강 환수 교수.
JDBC 프로그래밍 이수지 이동주 1.
6장 Mysql 명령어 한빛미디어(주).
MySQL 및 Workbench 설치 데이터 베이스.
(개정판) 뇌를 자극하는 Red Hat Fedora 리눅스 서버 & 네트워크
데이터베이스 와 JDBC 1.데이터베이스와 데이터베이스 관리 시스템은? 2.데이터베이스 장점?
Department of Computer Software MyongJi University
테이블 : 데이터베이스를 구성하는 요소로 같은 성격에 정보의 집합체. 레코드 : 하나의 정보를 가지고 있는 컬럼의 집합체
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
5장 Mysql 데이터베이스 한빛미디어(주).
4장. 웹로직 서버상에서의 JDBC와 JTA의 운용
Lesson 6. 형변환.
07 그룹 함수 그룹 함수의 개념 그룹 함수의 종류 데이터 그룹 생성 HAVING 절.
4-1장. MySQL 제13장.
CHAPTER 02 OpenCV 개요 PART 01 영상 처리 개요 및 OpenCV 소개.
3.2 SQL Server 설치 및 수행(계속) 시스템 데이터베이스 master
1. C++ 시작하기.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
13 인덱스 인덱스의 개념 인덱스의 구조 인덱스의 효율적인 사용 방법 인덱스의 종류 및 생성 방법 인덱스 실행 경로 확인
                              데이터베이스 프로그래밍 (소프트웨어 개발 트랙)                               퍼스널 오라클 9i 인스톨.
모바일 자바 프로그래밍 JDBC / WAP Ps lab 오민경.
18강. 데이터 베이스 - II JDBC 살펴보기 Statement객체 살펴보기 Lecturer Kim Myoung-Ho
17강. 데이터 베이스 - I 데이터 베이스의 개요 Oracle 설치 기본적인 SQL문 익히기
8 데이터베이스 사용하기.
12 데이터베이스 사용하기.
KHS JDBC Programming 4 KHS
5장 Mysql 데이터베이스 한빛미디어(주).
10장. 예외처리.
13 인덱스 인덱스의 개념 인덱스의 구조 인덱스의 효율적인 사용 방법 인덱스의 종류 및 생성 방법 인덱스 실행 경로 확인
You YoungSEok Oracle 설치 You YoungSEok
1장. 데이터베이스 자료의 조직적 집합체_데이터베이스 시스템의 이해
웹 어플리케이션 보안 2016년 2학기 3. Mongo db.
JDBC (Java Database Connectivity)
Method & library.
인터넷응용프로그래밍 JavaScript(Intro).
CHAP 13. 방명록 만들기 실습.
JDBC Lecture 004 By MINIO.
2장. 데이터베이스 관리 시스템 데이터베이스 관리 시스템의 등장 배경 데이터베이스 관리 시스템의 정의
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
자바 5.0 프로그래밍.
데이터 베이스 DB2 관계형 데이터 모델 권준영.
CHAP 21. 전화, SMS, 주소록.
문성우 SQL 실습 Part Ⅰ 문성우.
JSP Programming with a Workbook
기초C언어 제2주 실습 프로그래밍의 개념, 프로그램 작성 과정 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원
Chapter 10 데이터 검색1.
멀티미디어시스템 제 5 장. 멀티미디어 데이터베이스 개념 IT응용시스템공학과 김 형 진 교수.
Android -Data Base 윤수진 GyeongSang Univ. IT 1.
 6장. SQL 쿼리.
6 객체.
교과서 78쪽 학습 목표 정보 관리의 필요성을 이해할 수 있다. 데이터베이스의 개념과 필요성을 이해할 수 있다.
GB ridge 웹 모바일및 빅데이터 응용과정 3주차: 데이터베이스 프로그래밍 [경기도형 대학생 취업브리지 사업]
Ⅰ. 데이터베이스 정의 Ⅱ. MS SQL 서버 Ⅲ. 데이터베이스 인터페이스
Presentation transcript:

명품 JAVA Programming 제 17 장 JDBC 프로그래밍

데이터베이스의 개념 데이터베이스 DBMS 데이터베이스 종류 여러 응용 시스템들의 통합된 정보들을 저장하여 운영할 수 있는 공용 데이 터들의 집합 데이터의 저장, 검색, 갱신을 효율적으로 수행할 수 있도록 데이터를 고도로 조직화하여 저장 DBMS 데이터베이스 관리 시스템(DataBase Management System) 오라클(Oracle), 마이크로소프트의 SQL Server, MySQL, IBM의 DB2 등 데이터베이스 종류 관계형 데이터베이스 키(key)와 값(value)들의 관계를 테이블로 표현한 데이터베이스 모델 키는 테이블의 열(column)이 되며 테이블의 행(row)은 하나의 레코드(record)를 표현 현재 사용되는 대부분의 데이터베이스는 관계형 데이터베이스 객체 지향 데이터베이스 객체 지향 프로그래밍에 쓰이는 것으로, 정보를 객체의 형태로 표현하는 데이터베 이스 모델 오브젝트 데이터베이스(object database)라고도 부른다.

기업 내의 데이터베이스 사례

관계형 데이터베이스 구조 관계형 데이터 베이스 데이터들이 다수의 테이블로 구성 각 행은 하나의 레코드 각 테이블은 키(key)와 값(value) 들 의 관계로 표현 여러 테이블 간에 공통된 이름의 열 포함 이런 경우 서로 다른 테이블 간에 관 계(relation)가 성립 대부분의 데이터베이스는 관계형 데이터베이스 JDBC API

겍체지향 데이터베이스 객체지향 데이터 베이스 객체 지향 프로그래밍에 사용 정보를 객체의 형태로 표현 오브젝트 데이터베이스(object database)라고도 부름 객체 모델이 그대로 데이터베이스에도 적용되므로 응용프로그램 의 객체 모델과 데이터베이스의 모델이 부합됨

SQL과 JDBC SQL(Structured Query Language) 관계형 데이터베이스 관리 시스템에서 사용 데이터베이스 스키마 생성, 자료의 검색, 관리, 수정, 그리고 데이 터베이스 객체 접근 관리를 위해 고안된 언어 데이터베이스로부터 정보를 추출하거나 갱신하기 위한 표준 대 화식 프로그래밍 언어 다수의 데이터베이스 관련 프로그램들이 SQL을 표준으로 채택 JDBC (Java DataBase Connectivity) 관계형 데이터베이스에 저장된 데이터를 접근 및 조작할 수 있게 하는 API 다양한 DBMS에 대해 일관된 API로 데이터베이스 연결, 검색, 수 정, 관리 등을 할 수 있게 함

JDBC 구조 JDBC 드라이버 매니저 JDBC 드라이버 DBMS 자바 API에서 지원하며 DBMS를 접근할 수 있는 JDBC 드라이버 로드 JDBC 드라이버 DBMS마다 고유한 JDBC 드라이버 제공, JDBC 드라이버와 DBMS는 전용 프로토콜로 데이터베이스 처리 DBMS 데이터베이스 관리 시스템. 데이터베이스 생성·삭제, 데이터 생성·검색·삭제 등 전담 소프트웨어 시스템

MySQL 서버 설치 클릭!

플랫폼 선택 후 다운로드 플랫폼 선택 다운로드!

Typical 타입으로 설치 실습용으로는 typical이면 충분

설치 완료 및 서버 설정 서버 설정 선택

표준 서버 설정 표준 설정 선택

서버 인스턴스 설정 MySQL서버가 윈도우 서비스로 동작 수동으로 서버 시작 시킴 환경변수에 경로 포함

익명 계정 생성 실습용으로 익명 계정 생성

JDBC 드라이버 설치 MySQL 다운로드 페이지에서 Java용 Connector 선택

JDBC 드라이버 설치 Java용 드라이버 복사 ZIP을 풀어 JAR 파일을 JDK 설치 디렉터리 밑의 JRE\LIB\EXT 디렉터리에 복사 JRE만 설치한 경우는 JRE 설치 디렉터리 밑의 LIB\EXT 디렉터리 에 복사

MySQL 서버 실행 서비스 관리자 이용 윈도우 서비스로 동작하게 설정하였으므로 제어판\시스템 및 보안\관리 도구에서 서비스 관리자를 실행하여 실행 상태 확인 서비스 관리자에서 수동으로 실행 시작 및 중지

실습용 데이터베이스 생성하기 데이터베이스 생성 MySQL 설치 디렉터리의 bin\mysqladmin.exe 프로그램 이용 -u 옵션은 root 계정으로 명령 수행을 의미 create는 DB 생성 명령 sampledb는 생성할 DB 이름

데이터 베이스 접속 및 사용 DB 사용 MySQL 설치 디렉터리의 bin\mysql.exe로 생성된 DB에 접속 -u 옵션은 root 계정으로 명령 수행을 의미 use는 DB 사용 명령 sampledb는 사용할 DB 이름

테이블 생성 데이터 저장을 위해 테이블을 생성 다음과 같은 구조의 student 테이블 생성 저장할 데이터 name은 varchar 타입으로 10자 dept는 varchar 타입으로 20자 id은 char 타입으로 7자 저장할 데이터 id name dept char(7) varchar(10) varchar(20) id name dept 1091011 김철수 컴퓨터시스템 0792012 최고봉 멀티미디어 0494013 이기자 컴퓨터공학

테이블 생성 create 문으로 테이블 생성 desc명령은 생성된 테이블의 구조 표시 create table 다음에 테이블 이름 지정 열 이름 데이터 타입(데이터 크기)을 콤마로 분리하여 나열 not null은 행의 데이터에 null값이 올 수 없음을 의미 primary key는 키로 사용될 행 지정 desc명령은 생성된 테이블의 구조 표시

데이터 추가 insert 문으로 테이블의 데이터 추가 insert into 다음에 테이블 이름 지정 테이블 이름 다음 괄호 안에 열 이름을 콤마로 구분하여 나열 values 다음 괄호 안에 열의 값들을 콤마로 구분하여 나열 문자 타입의 데이터는 단일 인용 부호로 묶어서 표시함에 유의

데이터 검색 select문으로 테이블 내의 데이터 검색 select 다음에는 데이터를 추출할 열 이름을 콤마로 분리하여 나열 모든 열에 대해 데이터를 추출할 때는 *를 열 이름 대신 사용 from 다음에 테이블 이름을 지정 where 다음에 검색 조건 지정. 위의 예에서 dept 값이‘컴퓨터공학’인 레코드 검색 where는 생략 가능

데이터 수정 update문을 이용하여 데이터 수정 update 다음에는 테이블 이름 지정 set 다음에 수정할 열의 이름과 값을 콤마로 분리하여 나열 where 다음에는 검색 조건을 지정. 위의 예에서는 name 값이‘최고봉’인 레 코드의 데이터 수정 where는 생략 가능

레코드 삭제 delete문을 이용하여 데이터 삭제 delete from 다음에는 테이블 이름 지정 where 다음에는 검색 조건을 지정. 위의 예에서는 name 값이‘최 고봉’인 레코드 삭제 where는 생략 가능

JDBC 프로그래밍 DB 연결 설정 JDBC 드라이버 로드 Class.forName()은 동적으로 자바 클래스 로딩 MySQL의 JDBC 드라이버 클래스인 com.mysql.jdbc.Driver 로드 드라이버의 클래스 이름은 DB의 드라이버마다 다를 수 있으므로 JDBC 드라이버 문서 참조할 것 자동으로 드라이버 인스턴스를 생성하여 DriverManager에 등록 해당 드라이버가 없으면 ClassNotFoundException 발생 try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); }

자바 응용프로그램과 JDBC의 연결 연결 DriverManager는 자바 어플리케이션을 JDBC 드라이버에 연결시켜 주는 클래스로서 getConnection() 메소드로 DB에 연결하여 Connection 객체 반환 getConnection에서 jdbc: 이후에 지정되는 URL의 형식은 DB에 따 라 다르므로 JDBC 문서를 참조 MySQL 서버가 같은 컴퓨터에서 동작하므로 서버 주소를 localhost로 지정 MySQL의 경우 디폴트로 3306 포트를 사용 sampledb는 앞서 생성한 DB의 이름 “root”는 DB에 로그인할 계정 이름이며, “”는 계정 패스워드 try { Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/sampledb", "root",""); } catch (SQLException e) { e.printStackTrace(); }

예제 17-1 : sampledb의 데이터베이스 연결하는 JDBC 프로그램 작성 JDBC를 이용하여 sampledb 데이터베이스에 연결하는 자바 응용프로그램을 작성하라. import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class JDBC_Ex1 { public static void main (String[] args) { try { Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/sampledb", "root",""); System.out.println("DB 연결 완료"); } catch (ClassNotFoundException e) { System.out.println("JDBC 드라이버 로드 에러"); } catch (SQLException e) { System.out.println("DB 연결 오류"); } DB 연결 오류 또는 DB 연결 완료

데이터베이스 사용 Stetement 클래스 SQL문을 실행하기 위해서는 Statement 클래스를 이용 주요 메소드 데이터 검색을 위해 executeQuery() 메소드 사용 추가, 수정, 삭제와 같은 데이터 변경은 executeUpdate() 메소드 사용 메소드 설명 ResultSet executeQuery(String sql) 주어진 SQL문을 실행하고 결과는 ResultSet 객체에 반환 int executeUpdate(String sql) INSERT, UPDATE, 또는 DELETE과 같은 SQL문을 실행하고, SQL문 실행으로 영향을 받은 행의 개수나 0을 반환 void close() Statement 객체의 데이터베이스와 JDBC 리소스를 즉시 반환

데이터베이스 사용 ResultSet 클래스 SQL문 실행 결과를 얻어오기 위해서는 ResultSet 클래스를 이용 현재 데이터의 행(레코드 위치)을 가리키는 커서(cursor)를 관리 커서의 초기 값은 첫 번째 행 이전을 가리킴 주요 메소드 메소드 설명 boolean first() 커서를 첫 번째 행으로 이동 boolean last() 커서를 마지막 행으로 이동 boolean next() 커서를 다음 행으로 이동 boolean previous() 커서를 이전 행으로 이동 boolean absolute(int row) 커서를 지정된 행으로 이동 boolean isFirst() 첫 번째 행이면 true 반환 boolean isLast() 마지막 행이면 true 반환 void close() ResultSet 객체의 데이터베이스와 JDBC 리소스를 즉시 반환 Xxx getXxx(String columnLable) Xxx는 해당 데이터 타입을 나타내며 현재 행에서 지정된 열 이름에 해당하는 데이터를 반환. 예를 들어, int형 데이터를 읽는 메소드는 getInt()이다. Xxx getXxx(int columnIndex) Xxx는 해당 데이터 타입을 나타내며 현재 행에서 지정된 열 인덱스에 해당하는 데이터를 반환. 예를 들어, int형 데이터를 읽는 메소드는 getInt()이다.

데이터베이스 사용 테이블의 모든 데이터 검색 특정 열만 검색 조건 검색 Statement의 executeQuery()는 SQL문의 실행하여 실행 결과를 넘 겨줌 위의 SQL문의 student 테이블에서 모든 행의 모든 열을 읽어 결과를 rs에 저장 특정 열만 검색 특정 열만 읽을 경우는 select문을 이용하여 특정 열의 이름 지정 조건 검색 select문에서 where절을 이용하여 조건에 맞는 데이터 검색 Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("select * from student"); ResultSet rs = stmt.executeQuery("select name, id from student"); rs = stmt.executeQuery("select name, id, dept from student where id='0494013'");

데이터베이스 사용 검색된 데이터의 사용 Statement객체의 executeQuery() 메소드 ResultSet 인터페이스 DB에서 읽어온 데이터를 추출 및 조작할 수 있는 방법 제공 next() 메소드 다음 행으로 이동 while (rs.next()) { System.out.println(rs.getString("name")); System.out.println(rs.getString("id")); System.out.println(rs.getString("dept")); } rs.close(); next() : true next() : true 김철수 컴퓨터시스템 1091011 최고봉 멀티미디어 0792012 이기자 컴퓨터공학 0494013 next() : true next() : true next() : false

데이터베이스 사용 ResultSet의 getXXX() 메소드 해당 데이터 타입으로 열 값을 읽어옴 인자로 열의 이름이나 인덱스를 줄 수 있음 DB의 데이터 타입에 해당하는 자바 데이터 타입으로 데이터를 읽어 야 함. 모든 데이터 타입에 대해 getString() 메소드로 읽을 수 있으나 사용 할 때는 해당 데이터 타입으로 변환해서 사용 ResultSet에서 모든 데이터를 다 읽어들인 후에는 close()를 호출 하여 자원 해제

한글 처리 문제 문자열 코드 문제 MySQL의 문자 집합은 ISO-8859-1 Unicode를 사용하는 자바에서 한글이 깨져 출력 ISO-8859-1를 Unicode로 변환하여 출력해야 함 반대로 MySQL에서 사용될 한글이 포함된 문자열은 Unicode에서 ISO-8859-1로 변환해야 MySQL에서 정상적으로 처리됨 String ISO_8859_1String = rs.getString("name"); byte [] UnicodeBytes = ISO_8859_1String.getBytes("ISO-8859-1"); String UnicodeString = new String(UnicodeBytes); System.out.print(UnicodeString); 유니코드로 변환 byte [] UnicodeBytes = "홍길동".getBytes(); String IOS_8859_1String = new String(UnicodeBytes, "ISO-8859-1"); stmt.executeQuery("select name, id, dept from student where name='"+ IOS_8859_1String +"'"); 유니코드를 ISO-8859-1로 변환

예제 17-2 : 데이터 검색과 출력 앞서 생성한 sampledb의 student 테이블의 모든 데이터를 출력하는 프로그램과 이름이 “이기자”인 학생의 데이터를 출력하는 프로그램을 작성하시오. import java.io.UnsupportedEncodingException; import java.sql.*; public class JDBC_Ex2 { public static void main (String[] args) { Connection conn; Statement stmt = null; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/sampledb", "root",""); System.out.println("DB 연결 완료"); stmt = conn.createStatement(); ResultSet srs = stmt.executeQuery("select * from student"); printData(srs, "name", "id", "dept"); srs = stmt.executeQuery("select name, id, dept from student where name='"+ new String("이기자".getBytes(), "ISO-8859-1") +"'"); } catch (ClassNotFoundException e) { System.out.println("JDBC 드라이버 로드 에러"); } catch (SQLException e) { System.out.println("SQL 실행 에러"); } catch (UnsupportedEncodingException e) { System.out.println("지원되지 않는 인코딩 타입"); }

예제 17-2 : 데이터 검색과 출력(소스 계속) private static void printData(ResultSet srs, String col1, String col2, String col3) throws UnsupportedEncodingException, SQLException { while (srs.next()) { if (!col1.equals(“”)) System.out.print(new String(srs.getString("name").getBytes("ISO-8859-1"))); if ((!col2.equals(“”)) System.out.print("\t|\t" + srs.getString("id")); if ((!col3.equals(“”)) System.out.println("\t|\t" + new String(srs.getString("dept").getBytes("ISO-8859-1"))); else System.out.println(); }

데이터의 변경 레코드 추가 데이터 수정 데이터 삭제 DB에 변경을 가하는 조작은 executeUpdate() 메소드 사용 SQL문 수행으로 영향을 받은 행의 개수 반환 데이터 수정 where문의 MySQL에서 처리되므로 문자열을 Unicode에서 ISO- 8859-1로 변환에 주의 데이터 삭제 stmt.executeUpdate("insert into student (name, id, dept) values('" + new String("아무개".getBytes(), "ISO-8859-1") + "', '0893012', '" + new String("컴퓨터공학".getBytes(),"ISO-8859-1") +"');"); stmt.executeUpdate("update student set id='0189011' where name='"+ new String("아무개".getBytes(), "ISO-8859-1") +"'"); stmt.executeUpdate("delete from student where name='"+ new String("아무개".getBytes(), "ISO-8859-1") +"'");

예제 17-3 : 데이터의 변경 앞서 생성한 sampledb의 student 테이블에 새로운 학생 정보를 추가하고, 새로 생성된 학생의 정보를 수정한 후에 다시 삭제하는 코드를 작성하시오. 데이터가 변경될 때마다 모든 테이블의 내용을 출력하도록 하시오. import java.io.*; import java.sql.*; public class JDBC_Ex3 { public static void main (String[] args) { Connection conn; Statement stmt = null; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/sampledb", "root",""); System.out.println("DB 연결 완료"); stmt = conn.createStatement(); stmt.executeUpdate("insert into student (name, id, dept) values('" + new String("아무개".getBytes(), "ISO-8859-1") + "', '0893012', '" + new String("컴퓨터공학".getBytes(),"ISO-8859-1") +"');"); printTable(stmt); stmt.executeUpdate("update student set id='0189011' where name='"+ new String("아무개".getBytes(), "ISO-8859-1") +"'"); stmt.executeUpdate("delete from student where name='"+ new String("아무개".getBytes(), "ISO-8859-1") +"'"); } catch (ClassNotFoundException e) { System.out.println("JDBC 드라이버 로드 에러"); } catch (SQLException e) { System.out.println("SQL 실행 에러"); } catch (UnsupportedEncodingException e) { System.out.println("지원되지 않는 인코딩 타입"); }

예제 17-3 : 데이터의 변경(소스 계속) private static void printTable(Statement stmt) throws SQLException, UnsupportedEncodingException { ResultSet srs = stmt.executeQuery("select * from student"); while (srs.next()) { System.out.print(new String(srs.getString("name").getBytes("ISO-8859-1"))); System.out.print("\t|\t" + srs.getString("id")); System.out.println("\t|\t" + new String(srs.getString("dept").getBytes("ISO-8859-1"))); }