Power Java 제 27 장데이터베이스 프로그래밍
이번장에서학습할내용 자바와데이터베이스 데이터베이스의기초 SQL JDBC 를이용한프로그래밍 변경가능한결과집합 자바를통하여데이터베이스를사용하는방법을학습합니다.
자바와데이터베이스 JDBC(Java Database Connectivity) 는자바 API 의하나로서데이터베이스에연결하여서데이터베이스안의데이터에대하여검색하고데이터를변경할수있게한다.
데이터베이스프로그램개발절차 1 DBMS(DataBase Management System) 를설치 2 자신이설치한 DBMS 에필요한 JDBC 드라이버를설치한다. 3 JDBC 가제공하는기능을이용하여데이터베이스응용프로그램을개발한다. JDBC 를통하여데이터베이스에연결되면그다음에는 SQL 명령어를데이터베이스에전달하면됩니다.
데이터베이스란? 관계형데이터베이스 (database) 는데이터를여러개의테이블에나누어서저장한다. 가장많이사용되는 DBMS 오라클, 마이크로소프트의 SQL Server, 사이베이스, MySQL
테이블
MySQL MySQL 은 www.mysql.com 에서다운로드 무료 설치프로그램제공
SQL 이란? 관계형데이터베이스에서사용하기위하여설계된언어
MySQL 에서 SQL 실행하기 MySQL 은다음과같은명령어행클라이언트를가지고있다.
데이터베이스생성하기 기존의데이터베이스가있으면삭제 데이터베이스생성 데이터베이스사용 데이블생성
레코드추가하기 레코드삽입
레코드검색하기 레코드선택
검색시조건지정 선택조건지정
정렬하려면 정렬지정
레코드수정하기 레코드수정명령어
레코드삭제하기 레코드삭제명령어
결과집합과커서 쿼리의조건을만족하는레코드들의집합이결과집합 (result set) 이다. 커서 (cursor) 는결과집합의레코드들을포함하고있는파일에대한포인터 레코드........................ 커서 결과집합
중간점검문제 1. 영화를저장할수있는테이블을 SQL 을사용하여정의하여보라. 2. books 테이블에서가격이 30000 원이상이고 2005 년이후에출간된책을검색하는 SQL 문장을작성하여보라.
JDBC 드라이버설치 1. www.mysql.com/products/connector 로부터드라이버를다운로드받아서압축을푼다. 2. 다음은자바가상기계가이드라이버파일을찾을수있도록하여야한다. 클래스경로를나타내는환경변수인 CLASSPATH 를변경또는압축된아카이브파일을 jre/lib/ext 디렉토리에복사
드라이버클래스적재 try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { System.out.println(" 드라이버를찾을수업습니다 ); } 지정된이름의클래스를찾아서메모리로적재한다.
데이터베이스연결 String url = jdbc:mysql://localhost/book_db ; String user = root ; String password = password ; con = DriverManager.getConnection(url, user, password); 사용자아이디와패스워드를사용하여데이터베이스에연결.
import java.sql.*; public class ConnectDatabase { 데이터베이스연결예제 public static Connection makeconnection() { } String url = "jdbc:mysql://localhost/book_db"; String id = "root"; String password = "password"; Connection con = null; try { Class.forName("com.mysql.jdbc.Driver"); System.out.println(" 드라이버적재성공 "); con = DriverManager.getConnection(url, id, password); System.out.println(" 데이터베이스연결성공 "); } catch (ClassNotFoundException e) { System.out.println(" 드라이버를찾을수없습니다."); } catch (SQLException e) { } System.out.println(" 연결에실패하였습니다."); return con;
데이터베이스연결예제 public static void main(string arg[]) throws SQLException { Connection con = makeconnection(); } 드라이버적재성공데이터베이스연결성공
SQL 문장수행
SQL 문장수행 Statement s = con.createstatement(); String select = SELECT * FROM books ORDER BY book_id ; ResultSet rows = s.executequery(select); // 문장객체생성 // SQL 문장생성 // SQL 문장실행 SQL 문장을실행하고결과집합을반환한다.
데이터베이스연결예제 import java.sql.*; public class SQLSelectTest { } public static Connection makeconnection() {... // 앞의코드와동일 } public static void main(string arg[]) throws SQLException { } Connection con = makeconnection(); Statement stmt = con.createstatement(); ResultSet rs = stmt.executequery("select * FROM books"); while (rs.next()) { } int id = rs.getint("book_id"); String title = rs.getstring("title"); System.out.println(id + " " + title); 결과집합에서다음레코드로이동한다. 현재레코드에서필드의값을가져온다.
실행결과 드라이버적재성공데이터베이스연결성공 1 Operating System Concepts 2 Head First PHP and MYSQL 3 C Programming Language 4 Head First SQL
레코드수정, 삭제 import java.sql.*; public class SQLInsertTest { public static Connection makeconnection() {...// 전과동일 } public static void main(string arg[]) { } addbook("artificial Intellegence", "Addison Wesley", "2002", 35000);
레코드수정, 삭제 } private static void addbook(string title, String publisher, String year, } int price) { Connection con = makeconnection(); try { Statement stmt = con.createstatement(); String s = "INSERT INTO books (title, publisher, year, price) VALUES "; s += "('" + title + "','" + publisher + "','" + year + "','" + price + "')"; System.out.println(s); int i = stmt.executeupdate(s); if (i == 1) System.out.println(" 레코드추가성공 "); else System.out.println(" 레코드추가실패 "); } catch (SQLException e) { } System.out.println(e.getMessage()); System.exit(0); 레코드를수정할때사용.
실행결과 드라이버적재성공데이터베이스연결성공 INSERT INTO books (title, publisher, year, price) VALUES ('Artificial Intellegence','Addison Wesley','2002','35000') 레코드추가성공
중간점검문제 1. 레코드의모든필드를출력하도록 SQLSelectTest.java 를변경하여보라. 2. 사용자로부터필드값을받아서새로운레코드를생성하도록 SQLInsertTest.java 를변경하여보라.
Q & A