db실습자료20151027

Download Report

Transcript db실습자료20151027

데이터베이스 실습
2015년 10월 28일
선동한
Exists
학생( 학번(int), 이름(varchat(30) ,학과(varchar(30)) )
수강( 학번(int), 과목번호(char(8) )
과목(과목번호(char(8)),학과(varchar(30)))
▶ 과목번호 ‘C413’인 과목을 수강하는 학생의 이름과 학과를
검색하기 위한 질의를 표현하라 EXISTS 함수를 사용하시오.
2
Exists
학생( 학번(int), 이름(varchat(30) ,학과(varchar(30)) )
수강( 학번(int), 과목번호(char(8) )
▶ 과목번호 ‘C413’인 과목을 수강하는 학생의 이름과 학과를 검색하기 위한 질의를
표현하라 EXISTS 함수를 사용하시오.
Select 이름,학과
from 학생,수강
where 학생.학번 = 수강.학번 and
exists ( select * from 수강 as A where A.과목번호 = ‘C413’ )
3
Exists
학생( 학번(int), 이름(varchat(30) ,학과(varchar(30)) )
수강( 학번(int), 과목번호(char(8) )
▶ 과목번호 ‘C413’인 과목을 수강하는 학생의 이름과 학과를 검색하기 위한 질의를
표현하라 EXISTS 함수를 사용하시오.
Select 이름,학과
from 학생
where exists ( select * from 학생 as A, 수강 as B where A.학번 = B.학번 and B.과목번호 = ‘C413’ )
4
Exists
학생( 학번(int), 이름(varchat(30) ,학과(varchar(30)) )
수강( 학번(int), 과목번호(char(8) )
▶ 과목번호 ‘C413’인 과목을 수강하는 학생의 이름과 학과를 검색하기 위한 질의를
표현하라 EXISTS 함수를 사용하시오.
Select 이름,학과
from 학생
where exists ( select * from 수강 as B where 학번 = B.학번 and B.과목번호 = ‘C413’ )
5
JDBC 개요
JDBC 등장배경
▶ Java DataBase Connectivity
▶ 자바 애플리케이션에서의 DB접근 및 사용방법에 대한 표준화 필요성 부
각
▶ 자바애플리케이션과 DB와의 독립성 필요
▶ 표준화된 인터페이스 제공
개발자 : DB제품과 상관없이 표준화된 인터페이스를 이용하여 코드를 작성하므
로 각 DB 접속방법 및 구현에 대한 상세한 정보를 알 필요 없음
DB벤더 : 표준화된 인터페이스를 준수하는 벤더만의 고유한 클래스를 구현하므
로 다른 벤더와 다른 독자적인 구현을 유지 할 수 있음
6
JDBC 개요
JDBC Driver
▶ JDBC 인터페이스에 대한 DB 벤더들이 구현한 클래스 라이브러리
▶ 해당 DB벤더의 홈페이지에서 다운 받음
▶ 개발된 애플리케이션에서 DB변경 시 JDBC 드라이버만 교체하면 됨
어
플
리
케
이
션
JDBC
드라이버
관리자
오라클 JDBC 드라이버
오라클 DBMS
MySql JDBC 드라이버
MySql DBMS
MsSql JDBC 드라이버
MsSql DBMS
구현
7
JDBC 개요
JDBC를 이용한 간단한 DB연동 (1/3)
JDBC 프로그래밍 단계
JDBC 드라이버 로드
사용 클래스
System.setProperty()
Class.forName()
데이터베이스 연결
Statement 생성
Java.sql.Connection
Java.sql.Statement
Java.sql.PreparedStatement
SQL 문 전송
Java.sql.Statement
결과 받기
Java.sql.ResultSet
연결 해제
Java.sql.Connection
8
JDBC 개요
JDBC를 이용한 간단한 DB연동 (1/3)
JDBC 프로그래밍 단계
JDBC 드라이버 로드
사용 클래스
System.setProperty()
Class.forName()
데이터베이스 연결
Statement 생성
Java.sql.Connection
Java.sql.Statement
Java.sql.PreparedStatement
SQL 문 전송
Java.sql.Statement
결과 받기
Java.sql.ResultSet
연결 해제
Java.sql.Connection
9
JDBC 개요
JDBC를 이용한 간단한 DB연동 (2/3)
JDBC 드라이버 로드
▶Class.forName() 메소드를 통해 JDBC 드라이버를 로드한다.
MySQL : Class.forName(“com.mysql.jdbc.Driver”);
Oracle : Class.forName(“oracle.jdbc.driver.OracleDriver”);
MS-SQL : Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
10
JDBC 개요
JDBC를 이용한 간단한 DB연동 (2/3)
데이터베이스 연결
▶ Connection con = DriverManager.getConnection(url, uid, pwd);
▶ 위 구문으로 데이터베이스에 연결하고 getConnection 메소드의 인자
url(JDBC형식URL), uid(사용자명), pwd(패스워드)를 넣는다.
11
JDBC 개요
JDBC를 이용한 간단한 DB연동 (2/3)
Statement 객체
▶ 데이터베이스와 sql을 작업하기 위한 통로 역할
1.Statement
= 기본적인 Statement
= createStatement()
2. PreparedStatement
= 반복적인 sql작업을 최적화한 statement
= prepareStatement(String sql)
3. CallableStatement
= stored procedure
= prepareCall(String sql)
12
JDBC 개요
JDBC를 이용한 간단한 DB연동 (2/3)
Statement 객체
▶ CallableStatement
= DB의 Stored procedure와 작업하기 위한 Statement
create or replace procedure getUserName(p_id in varchar, o_name out varchar)
Is begin
select name into o_name from userinfo where userId = p_id;
end;
/
D
B
Sdfsf.sql
3gsd.sql
Gsdgsdg.sql
Sdfsdgweg.sql
Sgsgsdg.sql
Sdgdgddddddg.sql
13
JDBC 개요
JDBC를 이용한 간단한 DB연동 (2/3)
Batch & Transaction
▶ Batch기능을 이용한 여러 SQL 일괄 처리
▶ Transaction
여러 DML작업을 하나의 처리작업으로 처리하여 모든 작업이 성공적으로 수행되었을
경우 DB에 반영(commit)하고 그렇지 않은 경우 DB에 반영하지 않도록(rollback)함
14
JDBC 개요
JDBC를 이용한 간단한 DB연동 (2/3)
Batch & Transaction
▶ ex) 학생정보 입력
USER
Insert1
Insert2
인터넷 연결 끊어짐
15
JDBC 개요
JDBC를 이용한 간단한 DB연동 (3/3)
기본 연결
public class test {
static String url;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
import java.sql.SQLException;
PreparedStatement pstmt = null;
import java.sql.Statement;
ResultSet rs = null;
try{
Class.forName("oracle.jdbc.driver.OracleDriver"); // JDBC 드라이버 로드
conn = DriverManager.getConnection("jdbc:oracle:thin:@203.253.146.198:1521:ORCL",
"system", "0000");
if(conn==null){
System.out.println("연결실패");
}else{
System.out.println("연결성공");
16
JDBC 개요
JDBC를 이용한 간단한 DB연동 (3/3)
Select
// 출력 준비
String sql = "select * from employee";
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
// 출력
while(rs.next()){
String Fname = rs.getString(1);
String Lname = rs.getString(3);
System.out.print(Lname+", " + Fname);
}
}
17
JDBC 개요
JDBC를 이용한 간단한 DB연동 (3/3)
Insert
// 삽입
String isql = "insert into employee (ssn, Fname, dno) values(?,?,?)";
stmt = conn.createStatement();
pstmt = conn.prepareStatement(isql);
pstmt.setInt(1,"123456789");
pstmt.setString(2,"Lee"); // 입력 값이 String형일 때
pstmt.setInt(3,10); // 입력 값이 int형일 때
int insCnt = pstmt.executeUpdate(); // executeUpdate()는 int값 반환
System.out.println(insCnt+"건 삽입");
18
JDBC 개요
JDBC를 이용한 간단한 DB연동 (3/3)
예외
}catch(ClassNotFoundException ce){
ce.printStackTrace();
}catch(SQLException se){
se.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}finally{
try{ // 연결 해제(한정돼 있으므로)
if(rs!=null){
if(pstmt!=null){
rs.close();
}
pstmt.close();
if(stmt!=null){
stmt.close();
if(conn!=null){
conn.close();
}
}
}
}catch(SQLException se2){
se2.printStackTrace();
}
}
}
}
19
JDBC 개요
실습
String url = “jdbc:oracle:thin:@203.253.146.198:1521:orcl”
ID : grade2
Pw : grade2
Table 학생
학번(pk) int, 이름 char, 성별 char
20
감사합니다
21