5 장 SQL 응용 데이터베이스실험실 1
[ 목차 ] 5.1 데이터베이스프로그래밍개념 5.2 T-SQL 5.2.1 T-SQL 문법 5.3 JAVA 프로그래밍 2
5.1 데이터베이스프로그래밍개념 프로그래밍 이라고하면프로그램소스를설계하고, 작성하고, 디버깅하는과정을말한다. 프로그램 혹은소프트웨어는컴퓨터에서주어진작업을하는명령어나열을말한다. 데이터베이스프로그래밍은명확한정의는없지만데이터베이스에데이터를정의하고, 저장된데이터를읽어오며, 데이터를변경하는프로그램을작성하는것을말한다. 데이터베이스프로그래밍은데이터베이스언어인 SQL 언어를이용하는점이일반프로그래밍과다른점이다. SQL Interface (SQL) 응용프로그램 (SQL + Java) MSSQL DB MSSQL DB SQL 인터페이스와데이터베이스프로그래밍비교 3
- 데이터베이스프로그래밍방법 (1) 일반프로그래밍언어 : 호스트언어가 Java, C++, C 등일반프로그래밍언어인경우이다. 일반프로그래밍언어로작성된응용프로그램에서데이터베이스에저장된데이터를관리 / 검색하는방법으로 SQL 문을컴파일러가처리한다. (2) 웹프로그래밍언어 : 웹브라우저에서데이터를관리하고검색하는응용의경우호스트언어가 JSP, ASP, PHP 등웹스크립트언어인경우이다. (3) SQL 전용언어 : SQL 언어를확장하여변수, 제어, 입출력등기능을추가한새로운언어로데이터베이스를다루는기능이뛰어나다. MSSQL 은 T- SQL 이라는이름의언어를사용하며 Oracle 데이터베이스는 PL/SQL 이라는언어를사용한다. (4) 4GL(4th Generation Language) : 데이터베이스관리기능과비주얼프로그래밍기능을갖춘언어로 Delphi, Power Builder, Visual Basic 등이있다. 4
- 데이터베이스프로그래밍방법 Program Language - Java - C, C++ Web Program - JSP, ASP - PHP SQL 전용언어 -T-SQL - PL/SQL 4G Language - Delphi -VB 파일 Access MSSQ L Oracle MySQL DB2 DB DB DB DB DB 윈도우즈 Linux Unix 인텔 HP Sun IBM 5
5.2 T-SQL 5.2.1 T-SQL 문법 (1/2) 구분 명령어 DDL DCL DML CREATE, ALTER, DROP GRANT, DENY, REVOKE SELECT, INSERT, DELETE, UPDATE CHAR(n) VARCHAR(n) 데이터타입 INT NUMERIC(p,s) DATE, TIME 변수 @ 를사용, DECLARE 문으로선언, SET 문으로치환 산술연산자 (+, -, *, /, %) 연산자 비교연산자 (=, <, >, >=, <=, <>) 문자열연산자 (+) 논리연산자 (NOT, AND, OR) 6
5.2.1 T-SQL 문법 (2/2) 구분 명령어 주석 --, /* */ BEGIN... END IF... ELSE 제어문 CASE... END WHILE - BREAK/CONTINUE GOTO 집계함수 (AVG, COUNT, MAX, MIN, SUM) 함수 날짜함수 (SYSDATETIME, GETDATE) 문자열함수 (CHAR, LEN, LOWER, SUBSTRING) 프로시저 CREATE PROC CREATE FUNCTION 7
5.3 JAVA 프로그래밍 ( 절차및준비사항 ) - SQL Server 2008, - Java 컴파일러 ( 데이터베이스 ) 프로그래머 프로그램사용자 SQL 사용자 1 자바프로그램 4 자바 CLASS 5 PORT 1433 번 SQL Server DBMS 2 3 65 사용자 sa 5 사용자 kim + 자바컴파일러 JDBC Library 7 데이터베이스 COMPANY 8
(MSSQL + JAVA) 연동방법 1/2 /* MSSQL 과자바연동실험프로그램수행을위한준비 1. (MSSQL 2008 express edition 이설치 ) 2. ( 자바컴파일러설치 ) - 자바가설치안되어있는경우자바설치 (java.sun.com) -> Java SE 다운로드및설치 ( Java 6.19 버전의경우 : jdk-6u19-windows-i586.exe ) 자바의 C:\Program Files\Java\jdk1.6.0_19\bin 폴더를환경변수 PATH에추가한다. 내컴퓨터->( 오른쪽마우스 ) 속성-> 고급-> 환경변수->PATH-> 편집->( 추가 ) 내컴퓨터 ->( 오른쪽마우스 ) 속성 -> 고급 -> 환경변수 ->CLASSPATH-> 편집 -> ;. ( 추가 ) 3. (jdbc 복사 )- Java 1.6 은 sqljdbc4.jar 파일을아래폴더에복사한다. ( 다운로드시 sqljdbc4.zip 으로받아지면 sqljdbc4.jar 로이름을변경한다.) 3-1. 자바의 C:\Program Files\Java\jdk1.6.0_19\jre\lib\ext 에복사한다. 3-2. 자바의 C:\Program Files\Java\jre\lib\ext 에복사한다. 4. ( 컴파일및실행 ) C 드라이브에 database 폴더생성후 StatementMSSQL.java 를복사해넣는다. ( 시작 -> 실행 ->cmd 로 DOS 실행창을열어 cd C:\database 명령으로폴더이동 ) DOS 실행창에서 C:\database>javac StatementMSSQL.java DOS 실행창에서 C:\database>java StatementMSSQL 9
(MSSQL + JAVA) 연동방법 2/2 5. MSSQL 접속포트설정시작 -> SQL Server -> 구성도구 -> SQL Server 구성관리자 -> SQL Server 네트워크구성 -> MSSQLSERVER 에대한프로토콜 -> TCP/IP 를 " 사용 " 으로바꾸고 -> (TCP/IP 더블클릭 ) -> IP ALL -> TCP 포트 1433 입력. SQL Server 네트워크구성 -> SQLEXPRESS 에대한프로토콜 -> TCP/IP 를 " 사용 " 으로바꾸고 -> (TCP/IP 더블클릭 ) -> IP ALL -> TCP 포트 1433 입력. 6. MSSQL 인증모드바꾸기 (1) SQL Server Management Studio -> 개체탐색기의 root ( 오른쪽마우스 ) -> 속성 -> 보안 -> "SQL Server및 Windows 인증모드 " 선택 (2) SQL Server Management Studio -> 보안 -> 로그인 -> sa -> ( 암호 / 암호확인 -> duksung), ( 상태-> 로그인-> 사용 ) ( 참고 : 자격증명 에관한오류가있을경우 " 일반 의 " 자격증명 " 체크 ) (3) ( 개체 root) -> ( 오른쪽마우스 ) -> 다시시작 7. 데이터준비 - MSSQL 의 Server Management Studio 를실행시키고 COMPANY 데이터베이스를생성한후스키마 department(deptno, dname, loc) 와데이터입력. *( 참조 ) http://blog.naver.com/cdi1318?redirect=log&logno=90116070140 10
( 자바프로그램작성 ) 1/2 import java.io.*; import java.sql.*; import java.sql.callablestatement; public class StatementMSSQL { Connection con; public StatementMSSQL() { String Driver = ""; String url = "jdbc:sqlserver://localhost:1433;databasename=company;"; String userid = "sa"; String pwd = "duksung"; try { // 드라이버찾기 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); System.out.println(" 드라이버로드성공 "); catch(classnotfoundexception e) { e.printstacktrace(); 11 try { // 데이터베이스를연결 System.out.println(" 데이터베이스연결준비 "); con = DriverManager.getConnection(url, userid, pwd); System.out.println(" 데이터베이스연결성공 "); catch(sqlexception e) { e.printstacktrace();
( 자바프로그램작성 ) 2/2 private void sqlrun() { String query="select deptno, deptname from DEPARTMENT"; try { Statement stmt = con.createstatement(); ResultSet rs = stmt.executequery(query); while(rs.next()) { System.out.print(" DEPARTMENT NO : + rs.getint(1)); System.out.println(" DEPARTMENT NAME : + rs.getstring(2)); con.close(); catch(sqlexception e) { e.printstacktrace(); public static void main(string args[]) { StatementMSSQL so = new StatementMSSQL(); so.sqlrun(); 12
( 샘플스키마및데이터생성 ) 1/2 use duksung; DROP TABLE EMP; DROP TABLE DEPT; -- create TABLES CREATE TABLE DEPT (DEPTNO TinyInt CONSTRAINT PK_DEPT PRIMARY KEY, DNAME VARCHAR(14), LOC VARCHAR(13) ) ; CREATE TABLE EMP (EMPNO Int CONSTRAINT PK_EMP PRIMARY KEY, ENAME VARCHAR(10), JOB VARCHAR(9), MGR SmallInt, HIREDATE DATE, SAL Decimal(7,2), COMM DEcimal(7,2), DEPTNO TinyInt CONSTRAINT FK_DEPTNO REFERENCES DEPT); set nocount on 13
( 샘플스키마및데이터생성 ) 1/2 -- insert DEPT 4 data INSERT INTO DEPT VALUES (10,'ACCOUNTING','NEW YORK'); INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS'); INSERT INTO DEPT VALUES (30,'SALES','CHICAGO'); INSERT INTO DEPT VALUES (40,'OPERATIONS','BOSTON'); --select count(*) from DEPT -- insert EMP 14 data INSERT INTO EMP VALUES (7369,'SMITH','CLERK', 7902,'12-17-1980',800,NULL,20); INSERT INTO EMP VALUES (7499,'ALLEN','SALESMAN', 7698,'02-20-1981',1600,300, 30); INSERT INTO EMP VALUES (7521,'WARD','SALESMAN', 7698,'02-22-1981',1250,500, 30); INSERT INTO EMP VALUES (7566,'JONES','MANAGER', 7839,'04-02-1981',2975,NULL,20); INSERT INTO EMP VALUES (7654,'MARTIN','SALESMAN',7698,'09-28-1981',1250,1400,30); INSERT INTO EMP VALUES (7698,'BLAKE','MANAGER', 7839,'05-01-1981',2850,NULL,30); INSERT INTO EMP VALUES (7782,'CLARK','MANAGER', 7839,'06-09-1981',2450,NULL,10); INSERT INTO EMP VALUES (7788,'SCOTT','ANALYST', 7566,'07-13-1987',3000,NULL,20); INSERT INTO EMP VALUES (7839,'KING','PRESIDENT', NULL,'11-17-1981',5000,NULL,10); INSERT INTO EMP VALUES (7844,'TURNER','SALESMAN',7698,'09-08-1981',1500,0, 30); INSERT INTO EMP VALUES (7876,'ADAMS','CLERK', 7788,'07-13-1987',1100,NULL,20); INSERT INTO EMP VALUES (7900,'JAMES','CLERK', 7698,'12-03-1981',950,NULL,30); INSERT INTO EMP VALUES (7902,'FORD','ANALYST', 7566,'12-03-1981',3000,NULL,20); INSERT INTO EMP VALUES (7934,'MILLER','CLERK', 7782,'01-23-1982',1300,NULL,10); 14