『리눅스 학당-리눅스 강좌 / 연재 (go LINUX)』 590번 제 목:[강좌]JDBC와 MySQL을 이용한 웹과 DB 연동 1. 올린이:wertyu (허정수 ) 98/08/02 22:29 읽음:2141 관련자료 없음 ----------------------------------------------------------------------------- JAVA, JDBC와 MySQL을 이용한 웹과 DB의 연동 1. (저도 아직 공부 중이라 틀린 부분이 많을 겁니다. 혹시 발견하신 분께서는 알려주십시오. 감사합니다.) 안녕하십니까... InoS 허정수입니다. 제가 방학동안 공부한 JDBC와 SQL을, 저도 다시 한번 공부하고 여러분과 지식을 공유한다는 측면에서 이렇게 강좌를 올립니다. JDBC를 공부하면서, 참 막막했던게, 참조 할만한 Document가 정말 없었다는 것입니다.. 고작해야, javasoft에서 받는 문서와, JDBC Driver안에 있던 예제 몇개들. 그리고 선배들의 조언..... 이번 강좌가 여러분께 많은 도움이 되었으면 합니다. (JAVA 및, JDBC등 밑에 나오는 모든 제품 명은 그들 회사에게 저작권이 있습니다.) 1. 이번 강좌에서 배울 것들..... 1) MySQL의 소개와 간단한 이용법, SQL문법..... 2) JDBC란 무엇인가.......... 3) - i. JDBC Driver의 설치와 설정..... - ii. JDBC API (JDBC API는 java.sql.* API를 말함) 아마 3)-ii JDBC API를 가장 많이 배울 것입니다. 2. 사전 지식.... 1) java에 대한 기본적인 이해..... 2) DB에 대한 아주 기본적인 이해..... 3) SQL이 몬지, 대충이라도 아는 사람...... 4) 해커(크래커가 아닌)같은 정열과 의지...... 1)과 4)는 필수 입니다. 이 강좌에서는 java라는 language에 대한 설명은안 할것입니다. 다만, 2), 3)은 강좌를 하면서, 설명해드것이므로 모르셔도 됩니다. 3. 강좌의 내용에 대한 전체적인 이해... 이번 강좌에서는 MySQL이라는 DB 서버를 씁니다. MySQL의 특징은 빠르다는 것입니다. MySQL은 http://www.tcx.se 에서 구하실수 있습니다. 리눅스 동호회에도 rpm 패키지로 올라와 있습니다. MySQL에 대한 자세한 설명은 다음에 하기로 하져. 지금은 강좌에 대한 전반적인 이해를 하는 시간이니깐여..... 보통 웹과 DB를 연동하는 것을 보면 CGI를 많이 씁니다. 하지만, 우리는 java를 쓰도록 할 것입니다. 그리고 이때에 필요한 것이 바로 JDBC입니다. JDBC는 (Java Database Connectivity)의 약자로서, 말그대로 해석을 하면 java와 Database를 연결시켜주는 것입니다. java에서는 java.sql API로 Query등을 넘기고, 그것이 JDBC를 통해 DB로 넘어 가게 됩니다. 그럼 DB는 결과값(ResultSet)을 JDBC를 통해 다시 java로 보내주게됩니다. ------------ | Java | |application| Client Machine |-----------| | JDBC | |---------- | /\ | DBMS-proprietary protocol | | \/ ------------ | MySQL | DataBase Server | | ------------ <그림의 출처:JDBC Guide,Getting started> 대충 그림을 그리면 위와 같은 그림이 됩니다. DB에 access하기 위한 모델이 두 가지(two tier, three tier model)가 있는데 자세한 건 다음에 얘기 합시다. 위의 모델은 two tier model입니다. two tier model은 java applet이나 application이 직접적으로(directly) database에 얘기(talk)할 수 있습니다. 즉, 이때 필요한 것이 바로,,,,, JDBC 드라이버 입니다. 각, Database Server회사 마다, 모두 JDBC Driver를 제공하고 있습니다. http://www.javasoft.com/products/jdbc에 가시면, 드라이버를 다운 받으실 수 있습니다. 위처럼 JDBC는 java application 혹은 applet이 DB에 query를 넘기고, 결과 값을 받도록 중간 매개 역할을 합니다. 이제 java application이나 applet이 query등을 JDBC에 넘기는 방법을 알아야 하는데, 이것은 JDBC API를 이용하게 됩니다. 따라서 이번 저의 강좌에서 배울 것은 위에서처럼 세가지로 요약할 수 있습니다. 1) MySQL의 사용법과 SQL 문법 공부. 2) JDBC에 대한 공부 3) JDBC API 1)번은 아마 아시는 분들이 많을 것입니다. 따라서, 1)번 강좌는 넘어 가셔도 좋습니다. 마지막으로 CGI로 할 수 있는 것을 모하러, java로 하려하는가.... 에 대한 대답을 하고 마치겠습니다. java의 장점은 다들 아시져? 이 장점들을 모두 소화할 수 있기 때문이져...(넘 간단한가?) 암튼 전 cgi는 하나도 모릅니다. JDBC로 공부하는데,,,, SQL, java, JDBC를 동시에 다 공부했습니다. 별루 어렵지는 않더군여.... 오늘은 여기서 마치겠습니다. 뭐 질문은 없겠지만, 혹시라도 질문이 있스면,,,,,, 메일을 보내주십시오. 감사합니다. -------------------- 숭실대학교 컴퓨터학부 97학번 허정수 -------------- 『리눅스 학당-리눅스 강좌 / 연재 (go LINUX)』 591번 제 목:[강좌]JDBC와 MySQL을 이용한 웹과 DB 연동 2 올린이:wertyu (허정수 ) 98/08/02 22:30 읽음:1373 관련자료 없음 ----------------------------------------------------------------------------- JAVA, JDBC와 MySQL을 이용한 웹과 DB 2 (저도 아직 공부를 하는 중이라, 틀린 부분이 많습니다. 혹시 발견되면, 저에게 연락을 주십시오. 감사합니다.) 안녕하십니까. InoS 허정수십니다. 오늘은 Mysql의 사용법과 SQL 문법을 배울 시간이군여..... SQL과 Mysql을 까신 분들이라면 오늘은 넘어가셔도 됩니다. 초보자들은 위해 SQL 문법도 배워봅시다. 1) MySQL의 사용법과 SQL 문법 공부 <= 오늘... 2) JDBC 3) - i. JDBC Driver의 설치와 설정 - ii. JDBC API SQL은 Structured Query Language의 약자로 우리 나라 말로 하자면 구조화된 질의어 정도입니다. DataBase에 이런 질의(queyr)를 하면, 우리는 그 결과를 보게 되는 것입니다. SQL에 대한 설명은 자세히 안하겠습니다. 하지만, 문법은 배울 것입니다. 아무튼 SQL은 국제적인 표준이 되었고, 많은 DataBase들이 있습니다. 유명한 mSQL, PostgreSQL, ORACLE등 많은 DataBase들이 있는데, 전 그중에서 MySQL 이라는 것을 선택했습니다. http://www.tcx.se에서 구할 수 있습니다. 물론 무료고, 그 특징은 상당히 빠른 속도를 낸다는 것입니다. 리눅스 동호회에도 있더군여...... rpm 패키지로 올려저 있으니 깔 기는 쉬울 겁니다. 이제 설치를 하고, 몇 가지 설정도 합시다. 1. 설치와 설정.(root로 설치합시다.) 우선 자료실에서 rpm으로 받으셨으면, rpm 명령을 이용해서 설치합니다. (쉽져? ^^;) http://www.tcx.se에 가셨다면, 소스 및, 바이너리, rpm, 데비안 패키지 등 없는게 없습니다. 맘에 드는 것을 골라 설치를 합시다. rpm이 아니고 바이너리라면, 디렉터리 설정을 잘해 주시길.. 뭐 안해줘도 상권은 없습니다만, 관리를 잘해줘야 이용하기 편하겠져.... 자~ 설치가 잘 ㅅ틱윱歐荏(이거 강좌 맞어? 설명도 안해주고 --;) rpm으로 설치하셨다면, 앞으로 부팅시마다 MySQL 대몬이 자동으로 실행될 것입니다. 바이너리로 설치하신 분은 mysql.server start로 MySQL 대몬을 실행하고 mysql.server stop으로 MySQL 대몬을 종료할 수 있습니다. 아니면, /etc/rc.d/rc3.d 등에 편집해서 부팅시마다 대몬이 뜰 수 있도록 할수 있는데, 이건 제가 잘 모르는 군여 ^^; MySQL을 쓰려면 데몬이 띄어져 있어여 합니다.telnet이나, ftp처럼 말이져. ps -x 해서 , (당분간은 root로 작업합시다.) 238 ? S 0:00 /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql --ski 와 같은 내용이 있나 봅시다. 있으면, 대몬이 잘 실행되고 있는 겁니다. 아마, rpm 으로 설치하신 분들은 자동으로 띄어져 있을 거구, 바이너리로 설치하신 분은 mysql.server start 로, 매 부팅시마다 실행하시길. 아님 /etc/rc.d 등을 편집하시면, 자동으로 뜸. 하지만 전 모름. 앞으로 자주 쓸 실행 파일은 mysql, mysqladmin과 mysqlshow 등입니다. mysql - MySQL에 쿼리 등을 넘기고, 결과를 받는 실행 파일입니다. mysqladmin - 이름답게 MySQL을 관리하는 것입니다. mysqlshow - 어떤 데이타 베이스가 있는지... 그리고, 그 데이타 베이스에 어떤 테이블이 있는지를 보여줍니다. MySQL FAQ에는 다음과 같은 글이 있군여. 1. mysql A SQL shell (with gnu readline). Supports interactive use or as a non inte ractive query tool. When used interactively gives result in a ascii-table format, when using as a filter gives tab-separated output. 2. mysqladmin Administration utility. Create/Drop of databases. reload (read new users and flush tables to disk). Version and process info. 3. mysqld The SQL deamon. This should always be running. 4. mysqldump Dump a MySQL database. Freeware by Igor Romanenko. 5. mysqlshow Show information about database, tables and fields. 6. safe_mysqld Start the mysqld demon with some safety features. Restarts on error and h as logging of runtime info to a logfile. 7. mysqlaccess Script to check the priviliges for a host, user and database combination. 8. mysqlbug This script should always be used when filing a bug report to the mysql l ist. 9. mysql_install_db Creates the mysql grant tables with default privileges. This is usually o nly executed when installing the first MySQL release on a new system. 10. isamchk Check, optimize and repair MySQL tables. 11. msql2mysql A shell script to convert a mSQL program to MySQL. Doesn't handle all cas es but gives a good start when converting. 12. replace Binary used for msql2mysql. Utility program to change strings inplace in files or on stdin. Uses a finite state machine to match longer strings first. Can be used to swap strings, for example 'replace a b b a -- files' swap s 'a' and 'b' in the given files. 13. make_binary_release Makes a binary release of a compiled MySQL. This could be sent by ftp to www.tcx.se/pub/mysql/Incoming for the convenience of other MySQL users. 글이 좀 길어서 보기 흉하군여... 암튼 다른건 거의 안쓰고, mysql, mysqladmin, mysqlshow 정도만 사용하실수 있으면 됩니다 우선 mysqlshow라고 만 프롬프트에서 쳐봅시다. [InoS#root/]mysqlshow +-----------+ | Databases | +-----------+ | inos | | mysql | | test | +-----------+ 저의 경우 위와 같이 나오네여... 여러분들은 다르게 나오겠지만, mysql 이라는 Database는 꼭 있을 겁니다. 이 데이터 베이스에, mysql에 사용자에 대한 설정이 들어 있거든여. 그럼 mysql이라는 데이타 베이스에 어떤 테이블이 있는지 알아 봅시다. [InoS#root/]mysqlshow mysql +--------+ | Tables | +--------+ | db | | host | | jdbc | | user | +--------+ 저의 경우 위 처럼 나왔는데, 여러분은 아마 jdbc 테이블은 없을 껍니다. [InoS#root/]mysql mysql 위처럼 해봅시다. 그럼 mysql이라는 데이타 베이스에 접속하게 됩니다. Welcome to the mysql monitor. Commands ends with ; or \g. Type 'help' for help. mysql> 위처럼 나올 껍니다. 지금은 그냥 무작정, mysql> select * from user ; 라고 처봅시다. 구문의 끝은 ';' 입니다. 위의 문법은 user라는 테이블에서(from) 모든 (*) 컬럼을 select하라는 것입니다. 결과는 직접확인 하십시오. mysql> quit 를 침으로서 종료할 수 있씁니다. 이제 본격적으로 SQL 문법을 배워 봅시다. 우선 연습용으로 쓸 데이타 베이스를 만들어 봅시다. mysqladmin create [데이타 베이스 이름]... mysqladmin create NNR 이라고 한후 mysqlshow 를 치면 NNR이라는 데이타 베이스가 추가 된것을 볼 수있습니다. 그럼 [InoS#root/]mysql 성적 과 같이 쳐서 성적이라는 데이터 베이스를 만져 봅시다. 2. SQL 문법.. (SQL 문법은 아주 간단한 기초만 배울 것입니다. 책을로 내도 한권은 족히 넘을 분량이거든여.... 죄송하지만, 각자 책을 참고 하시길) 다음과 같은 것을 배우실 겁니다. 1)테이블 만들기. 2)insert, 3)select 4)update 우선 위의 4가지 정도만 공부하겠습니다. 들어 가기 전에 데이타 베이스와 테이블에 대한 얘기 먼저 하지요... 음. 설명하기 어려운데... 만약 대리점이라는 데이타 베이스가 있다고 한다면, 이 데이타 베이스 안에는 A 대리점 이라는 테이블, B 대리점 테이블, C 대리점 테이블 등이 있을 수 있습니다. 성적이라는 데이타 베이스가 있다면, 1 학년 성적 테이블, 2학년 성적 테이블... 등이 있을 수 있겠지여... 우리는 앞에서 성적이라는 데이타 베이스를 만들었습니다. 이제 성적 데이타 베이스에 접속을 해서, 테이블도 만들고, 자료도 입력 합시다. 2-1 CREATE [InoS#root/] mysql 성적 이라고 치면, 성적 데이타 베이스에 접속됩니다. 이제 테이블을 만들어 봅시다. create table을 써서 만듭니다. 대소문자는 안가립니다. CREATE TABLE syntax. CREATE TABLE table_name ( create_definition,... ) create_definition: column_name type NOT NULL [DEFAULT default_value] [ PRIMARY KEY ] or column_name type [NULL] [ PRIMARY KEY ] or PRIMARY KEY ( key_column_name,... ) or KEY [key_name] KEY( key_column_name,...) or INDEX [key_name] ( key_column_name,...) or UNIQUE [key_name] ( key_column_name,...) 문법은 위와 같습니다. Sungjuck이라는 테이블을 직접만들어 보져. 우선 mysql>이라는 프롬프트가 보이져? 그럼 mysql> create table Sungjuck(name char(20), number int , (엔터) -> math float, computer float) ; 모든 구문의 끝은 ;로 끝납니다. ;게 나오기 전까지는 모두 한 문장입니다. create 문장이 길었으므로, 여러줄에 친것 뿐입니다. mysql> create (엔터) -> table Sungjuck (엔터) -> (name char(20), number int ,math float, -> computer float) ; 과 같이 해도 똑 같습니다. 아무튼 이렇게 해서 Sungjuck이라는 테이블이 생겼습니다. create table 테이블 이름 ( 컬럼의 이름과 type등) ; 아주 간단한 문법입니다. 그럼 ----------------------------------- | name | number | math | computer | ----------------------------------- 위와 같은 컬럼을 가진 Sungjuck이라는 테이블이 생기게 되었습니다. (기쁘다.) 아직 테이블에는 레코드들이 없으므로, 이젠 테이블에 레코드를 입력해 봅시다. insert를 이용해서 합니다. 2-2 INSERT insert into 테이블 이름 values( 컬럼1, 컬럼2, ....) ; 이런 문법입니다. 직접 Sungjuck 테이블에 입력을 해봅시다. mysql> insert into Sungjuck values('허정수', 9744245, 90, 90) ; (스트링은 ''로 입력합니다, int나 float등은 그냥 쓰시면 됩니다.) 'mysql>'는 입력하는게 아닙니다. 프롬프트 입니다. 그럼 제대로 입력 됐는지 확인하고 싶으시겠져? select 를 이용해서 결과를 확인해 볼수 있씁니다. mysql> select * from Sungjuck; 1 rows in set (0.00 sec) +--------+---------+-------+----------+ | name | number | math | computer | +--------+---------+-------+----------+ | 허정수 | 9744245 | 90.00 | 90.00 | +--------+---------+-------+----------+ 흐흐, 신기하져? select 는 좀 있다가 배우기로 하고, insert를 이용해서 많은 친구들의 이름과, 학번, 성적등을 입력 해봅시다. 이쁜 학생한테는 점수 많이 주고, 평소 감정 있던 학생 들한테는 0점을 주면서, insert 문을 공부하져...... 얼마나 입력하셨습니까... 이젠 그만 입력하고, 지금까지, 입력한 것을 보져.... mysql> select * from Sungjuck ; 3 rows in set (0.00 sec) +--------+---------+-------+----------+ | name | number | math | computer | +--------+---------+-------+----------+ | 허정수 | 9744245 | 90.00 | 90.00 | | 황수환 | 9744253 | 85.00 | 95.00 | | 강봉춘 | 9744004 | 50.00 | 100.00 | +--------+---------+-------+----------+ 저는 3명을 입력했씁니다. 이제 입력한 것을 가지고, select 를 배워 봅시다. select는 대충 해석을 해봐도 아시겠지만, 선택하다... 이런 거져? DB에 질문을 하고, 그 결과값을 얻어 오는 것입니다. (다시 한번 말하지만, 저두 아직 배우는 단계고, 혼자 공부하느라 틀린 부분이 많을 겁니다. 발견하시면, 저에게 연락 주시길..... 연락주시면 후사합니다.(뽀뽀)). 2-3 SELECT mysql> select * from Sungjuck ; 이 것은 Sungjuck이라는 테이블에서, 모든(*, 와일드 카드져)를 가져와라..... 입니다. 그러니 결과가 위처럼 나왔겠져..... 그럼 name이라는 컬럼만 보고 싶다면, mysql> select name from Sungjuck; 결과는.... 3 rows in set (0.00 sec) +--------+ | name | +--------+ | 허정수 | | 황수환 | | 강봉춘 | +--------+ name과 math를 보고 싶다면, mysql> select name , math from Sungjuck ; 결과는 3 rows in set (0.00 sec) +--------+-------+ | name | math | +--------+-------+ | 허정수 | 90.00 | | 황수환 | 85.00 | | 강봉춘 | 50.00 | +--------+-------+ 으하~ 신기하다....~~~ ^^; select 에서는 많은 함수들을 제공합니다. 우선 세명의 math의 총점은 얼마인지 알아볼까여? mysql> select sum(math) from Sungjuck; 결과는 1 rows in set (0.13 sec) +-----------+ | sum(math) | +-----------+ | 225.00 | +-----------+ sum(컬럼이름) 하면, 그 컬럼의 합을 보여 줍니다. math의 평균을 내고 싶다면, mysql> select avg(math) from Sungjuck ; 결과는 1 rows in set (0.00 sec) +-----------+ | avg(math) | +-----------+ | 75.000000 | +-----------+ select에서 쓰이는 함수는 정말 많습니다. 아쉽지만, 이 함수들은 책을 참조하시던지.... 아니면 /usr/doc/mysql버전/ 에 있는 myslq-faq를 보시기 바랍니다. 이 문서는 mysql을 사용하는데 거의 모든 도움말을 제공합니다. 이제, 조건을 주어 select 하는 것을 배워 봅시다. 만약 학생이 몇 천명이 넘는데 select * from Sungjuck으로는 원하는 학생의 성적을 보기 힘들 것입니다. 따라서 허정수 학생의 성적을 보고 싶다면, 조건을 주어 mysql> select * from Sungjuck where name = '허정수' ; 결과는 1 rows in set (0.02 sec) +--------+---------+-------+----------+ | name | number | math | computer | +--------+---------+-------+----------+ | 허정수 | 9744245 | 90.00 | 90.00 | +--------+---------+-------+----------+ 쉽져? 해석을 하면 뭐... Sungjuck 테이블에서 name이 '허정수' 인 레코드의 모든 컬럼을 보워줘라..! 정도입니다. AND나 OR , 부등호도 됩니다. mysql> select * from Sungjuck where math > 70 ; math가 70보타 큰 학생의 레코드를 선택하라는 군여. 결과는 2 rows in set (0.05 sec) +--------+---------+-------+----------+ | name | number | math | computer | +--------+---------+-------+----------+ | 허정수 | 9744245 | 90.00 | 90.00 | | 황수환 | 9744253 | 85.00 | 95.00 | +--------+---------+-------+----------+ mysql> select * from Sungjuck where math > 80 && computer > 90 ; AND입니다. math > 80 그리고, computer > 90 인 학생... 결과는 1 rows in set (0.05 sec) +--------+---------+-------+----------+ | name | number | math | computer | +--------+---------+-------+----------+ | 황수환 | 9744253 | 85.00 | 95.00 | +--------+---------+-------+----------+ SORT도 가능합니다. 다음과 같이 소트를 합니다. mysql> select * from Sungjuck order by number asc ; 'order by 컬럼 이름 [acs or desc]' 이런 식입니다. acs는 오름 차순, desc는 내림 차순이져... 컬럼 이름을 가지고 asc또는 desc로 소트합니다. 결과 3 rows in set (0.01 sec) +--------+---------+-------+----------+ | name | number | math | computer | +--------+---------+-------+----------+ | 강봉춘 | 9744004 | 50.00 | 100.00 | | 허정수 | 9744245 | 90.00 | 90.00 | | 황수환 | 9744253 | 85.00 | 95.00 | +--------+---------+-------+----------+ 학번 순으로 소트를 했군여. 이번엔 성적순으로 소트합시다. mysql> select * from Sungjuck order by math desc ; 3 rows in set (0.01 sec) +--------+---------+-------+----------+ | name | number | math | computer | +--------+---------+-------+----------+ | 허정수 | 9744245 | 90.00 | 90.00 | | 황수환 | 9744253 | 85.00 | 95.00 | | 강봉춘 | 9744004 | 50.00 | 100.00 | +--------+---------+-------+----------+ math의 높은 순으로 소트했습니다. 이상 대충이라마, select 구문에 대해 알아 보았씁니다. 이젠 update에 대해 알아 봅시다. 2-4 UPDATE 컬럼의 값을 바꾸려고 가정합시다. 즉, 허정수의 수학 점수가, 100점이었는데, 위에서는 90점으로 되어 있습니다. 허정수의 성적을 100으로 바꿔 봅시다. mysql> update Sungjuck set math = 100 where name = '허정수' ; Query OK, 1 rows affected (0.00 sec) 그냥 읽기만 해도 이해가 되져? update 테이블 이름 set 컬럼 = 값 where 조건... 만약 조건을 안쓴다면, 모든 레코드의 값이 바뀌게 됩니다. 이상. MySQL 사용법과 간단한 SQL 문법에 대해 알아 봤씁니다. 아주 기초적인 내용만 알아봤으므로, 될 수있으면, 책을 찾아보시기 바랍니다. 혹시라도 질문이 있으면, 메일을 주시기 바랍니다. ------------ 숭실대학교 컴퓨터학부 97 학번 허정수 -------------- 『리눅스 학당-리눅스 강좌 / 연재 (go LINUX)』 592번 제 목:[강좌] JDBC와 MySQL을 이용한 웹과 DB 연동 3 올린이:wertyu (허정수 ) 98/08/02 22:31 읽음:1061 관련자료 없음 ----------------------------------------------------------------------------- JAVA, JDBC와 MySQL을 이용한 웹과 DB의 연동 3. (저도 아직 공부 중이라 틀린 부분이 많을 겁니다. 혹시 발견하신 분께서는 알려주십시오. 감사합니다.) 안녕하십니까.... InoS 허정수입니다...... 오늘은 InoS의 뜻부터 알고 갈까여? [InoS] - Input normal output Special 입니다..... 앞으로 제가 만들 벤처 기업의 이름이기도 하져.핫핫핫..... ^^; 오늘은 JDBC에 대해 배울 차례이군여..... 1) MySQL의 사용법과 SQL 문법 공부 2) JDBC <= 오늘.... 3) - i. JDBC Driver의 설치와 설정 - ii. JDBC API 이번 강좌에서는 JDBC에 대한 이론적인 면을 많이 공부할 것입니다. 실제 코딩을 하고, 애플릿도 만들고 하는 것은 마지막인,,, 다음 강좌에서 하기로 하져.... 오늘 강좌는 꼭 읽어야 하는 것은 아닙니다. 따라서, 읽다가 귀찮으시면, 다음 강좌로 넘어가셔도 좋습니다. 오늘 배우는 내용의 일부는 http://www.javasoft.com에서 다운 받은 JDBC Guide : Getting Started 에서 참조 했습니다. 1. JDBC란 무엇인가? JDBC는 전에도 말했다 시피 Java DataBase connectivity의 약자입니다. JDBC는 Java의 API의 한 종류입니다. java.sql.*이 JDBC API입니다. 이 JDBC를 이용해서 저번 강의에서 우리가 한 select * from Sungjuck; 같은 것을 데이타 베이스에 넘길 수 있습니다. 그러면, 이런 query가 JDBC를 통해서 데이터 베이스에 가고, 데이터 베이스는 결과(ResultSet)을 다시 java로 보내 줍니다. JDBC를 이용하면, 쉽게 Web과 DB를 연동할 수 있씁니다. 애플릿을 만들고, 그 애플릿에 JDBC만 추가 하면되지여..... 물론 CGI로도 할 수 있는 일이지만, JDBC를 이용하는 이유는? 답> JAVA의 모든 장점들을 그대로 이용할 수 있다. 문서에는 이렇게 나오는 군여.... 2. JDBC로 무엇을 할 수 있을까.... 위에서 말한 문서에 다음과 같이 나오는 군여 JDBC makes it possible to do three things: 1. establish a connection with a databese 2. send SQLstatement 3. process the results. 어렵지 않은 영어이므로 해석은 안하겠습니다. 다음의 간단한 예제를 봅시다. (자세한 설명은 다음 강좌에서 합시다.) Connection con = DriverManager.getConnection( "jdbc:odbc:wombat", "ID", "passwd") ; statement stmt = con.createStatement() ; ResultSet rs = stmt.executeQuery("select a, b, c from Table") ; while(rs.next()) { int x = getInt("a") ; String S = getString("b") ; float f = getFloat("c") ; } 저번 강의 까지 열심히 들으셨다면, 대충이나마 이해가 가실 껍니다. DataBase와 연결을 하고, query를 넘기기 위해 Statement를 만들고, 실제 Query를 넘기고, 결과를 받아서, 값을 얻고 있습니다. 자세한 설명은 다음 강좌에서 하도록 합니다. 3. JDBC versus ODBC.. java에서도 ODBC는 쓸 수 있씁니다. 하지만, JDBC를 더 많이 쓴 다는 군여. JDBC가 배우기도 쉽고, ODBC를 쓴다면, 접속하는 client마다 ODBC driver가 인스톨되어 있어야 된다고 합니다. 제가 ODBC는 잘 모르기때문에 계속 '~군여, ~합니다.'라는 말을 쓰는 군여..... 아무튼 pure Java solution 등을 생각해서라도, JDBC를 쓰는게 좋습니다. 자세한 내용은 http://www.javasoft.com/products/jdbc 에 가보시면 됩니다. 오늘은 짧게 끊났군여..... 다음에는 JAVA로 DB에 접속하기 위한 방법등을 배워 봅시다. 감사합니다. 혹시 질문이 있다면, 메일을 주십시오 『리눅스 학당-리눅스 강좌 / 연재 (go LINUX)』 593번 제 목:[강좌]JDBC와 MySQL을 이용한 웹과 DB 연동 4 올린이:wertyu (허정수 ) 98/08/02 22:32 읽음:1051 관련자료 없음 ----------------------------------------------------------------------------- JAVA, JDBC와 MySQL을 이용한 웹과 DB의 연동 4. (저도 아직 공부 중이라 틀린 부분이 많을 겁니다. 혹시 발견하신 분께서는 알려주십시오. 감사합니다.) 안녕하십니까.... InoS 허정수입니다...... 1) MySQL의 사용법과 SQL 문법 공부 2) JDBC 3) - i. JDBC Driver의 설치와 설정 <= 오늘. - ii. JDBC API 오늘은 JDBC Driver를 설치하고, 몇가지 설정과, 제대로 설치됐는지. 확인을 하는 시간을 가져보겠습니다. 참. 그전에 먼저 URL에 대해 공부를 먼저 해야 겠군여.... 1. URLs in General Use (JDBC Guide:Getting Started에서 발췌, 번역) URL에 대해 사람들이 가끔 혼동을 하기 때문에 먼저 URL에 대해 공부를 하고 넘어 갑니다. 뭐 필요없다고 생각하시는 분들께서는 넘어 가셔도 됩니다. URL(Uniform Resource Locator)는 그 Resource가 인터넷의 어디에 있는지 정보를 알려줍니다. 일반적으로 URL은 세 부분으로 나눠집니다. 1).Protocol used to access the information. 2).Host information 3).Path of what is to be accessed. 위와 같다. 각각에 대해 자세히 알아 보면... 1). Protocol used to access the information. ftp://javasoft.com/docs/JDK-1_apidocs.zip http://java.sun.com/products/JDK/1.1 file:/home/haroldw/docs/tutorial.html 위에서 ftp, http, file 등이 Protocol이 된다. 2). Host Information this part gives the information needed to find and access the host where the resource resides.(음 번역하면 말이 이상해서.). Host information이 '//'로 시작하면, 이것은 Internet application 임을 나타낸다(http 등). '/'로 시작되면, resource는 local file이라는 얘기다. Host information도 세 부분으로 나눠진다. * Domain name. * User login 과 Passwd. * Port number 예) http://java.sun.com http://java.sun.com:80/doc/ (':80'은 80번 포트에 접속됨을 나타낸다.) http://foo.com."happy"."1234"(ID와 passwd) 3). Path of what is to be accessed http://java.sun.com/products/JDK/1.0.2 위에서 products/JDK/1.0.2가 세 번째 파트이다. 즉, products/JDK라는 디렉터리의 1.0.2가 access된다는 것을 나타 낸다. 지금까지, 일반적인 URL에 대해 알아 보았씁니다. 그럼 이제, JDBC URL에 대하 알아 봅시다. 2. JDBC URL. JDBC URL을 왜 공부하냐구여? 일단, Java application이나 applet이, 데이타 베이스와 연결이 되어야 할텐데, 이 연결을 URL 형식을 통해서 연결이 됩니다. 이 부분 역시 안보고 넘어 가셔도 좋습니다. JDBC URL은 다음과 같은 형식입니다. jdbc:: 우선 시작은 jdbc로 시작합니다. 은, dirver나, 데이타 베이스 연결 메카니즘을 나타내는데, 우리는 그냥 여기에 mysql을 쓰면 된다고 알아두시면 좋져. 은, 어떤 데이타 베이스에 연결을 할 것인가를 나타냅니다. 저번시간에 우리는 '성적'이라는 데이타 베이스를 만들었져? 그럼 '성적'이라고 쓰시면 되겠네여..... URL의 예는 다음과 같습니다. jdbc:mysql://localhost:3306/성적 이렇게 하면, localhost의 3306번 포트를 통해, mysql이라는 데이타 베이스 서버의 성적이라는 데이타 베이스에 연결하겟다는 것이지여..... 포트 번호는 뭔지 아시지여? /etc/services 파일을 보시면, 각각의 서비스마다, 어떤 포트를 쓰는지가 나와있씁니다. telnet이 23번, ftp는 21번,http는 80번 이군여.... 이 포트 번호는 16비트를 쓰니깐 2의 16제곱만큼의 포트를 쓸 수 있겟군여.... 우리는 이중 3306번을 쓸 것입니다. 자세한 연결은 이따가 하구, 이젠, JDBC Driver를 설치해 봅시다. 3. JDBC Driver의 설치 MySQL이 준비되어 있다고 해서, 바로 JDBC를 통해서, 사용을 할 수 없습니다. 연결을 하기 위해서는 JDBC Driver가 필요하져..... 마우스나, 사운드 카드 등을 사용하기 위해서 각 드라이버가 필요한 것과 같은 이치 이겠져...... 각 DB서버마다 다른 드라이버를 쓰셔야 합니다. mSQL이라면, mSQL에 맞는 드라이버를 , 오라클이라면, 오라클에 맞는 드라이버를 구하셔아 합니다. MySQL은 jms라는 드라이버가 있군여. 이 드라이버는 http://www.javasoft.com/products/jdbc 에서 구하실 수 있습니다. 아니면, 제가 자료실에 등록을 하도록 하져..... 이제 여러분은 드라이버를 가지고 계실 겁니다. 압축이나 아카이브가 되어 있을 텐데, 원하는 디렉터리에 압축을 풀고, 자신의 CLASSPATH에 그 티렉터리를 추가하도록 하져. 저는 jdk 디렉터리에 foreign_classes라는 디렉터리를 만들고, 클래스 패스를 추가 했씁니다. 하지만, 이런 식으로 하는 방법은 약간의 문제가 있습니다. 바로 인터넷에서 접속했을 때인데, 이 때는 자신이 만든 class가 있는 하위 디렉터리에 이 드라이버를 까셔야 합니다. 왜냐면, appletviewer나 넷스케잎으로, 자신의 applet을 볼때는 CLASSPATH에서 클라스 들을 찾을 테지만, 인터넷으로 접속했을때는 CLASSPATH가 없져. . 음 이 문제는 다음에 다시 한번 언급을 하져. 아직 JDBC에 대해 안 갈쳐주고, 이런 말을 하자니, 따분하고, 어쩜 이해도 안가시겠군여...... 자~ 이젠, 설치도 다 되었으니, JDBC를 사용해볼까요. 우선 연결이 잘 되는지 확인해 봅시다. 3. DB와의 연결 확인과 설정..... 우선 MySQL에 패스워드를 겁시다. 꼭 필요한 작업입니다. 보안 및, JDBC로 연결을 할 때 말이져.... 프롬프트에서 mysql mysql이라고 칩시다. 그럼 mysql이라는 데이타 베이스에 연결되겠져. mysql> select * from user ; 라고 치면, 각 사용자의 이름과 패스워드, 각 권한 등이 보일 겁니다. 그런데 아직 패스워드는 없져? 패스워드를 겁시다. mysql> update user set Password = password('암호') where User = 'ID' ; update는 지난 시간에 배웠져? 암호는 원하는 것을 하시고, ID에는 자신의 ID를 입력합시다. 암호를 잊어 버리면, 영영 사용을 못하게 되니 조심합시다. 이제 앞으로는 MySQL에 관한 모든 명령은 -p 옵션을 붙여야 합니다. mysqlshow -p, mysql -p 성적, mysqladmin -p create 등등, -p를 붙여서 합시다. 이제, JDBC를 사용해서 MySQL과 연결을 해볼까여? 재미있을 껍니다. 우선 다음과 같은 소스 코드를 작성합니다. /**********************************************************************/ //연결이 잘되나 확인 하는 소스 코드 입니다. import java.sql.* ; public class test { public static void main(String [] argv) { Connection con ; try { //드라이버를 load한다. Class.forName("gwe.sql.gweMysqlDriver") ; } catch(ClassNotFoundException e){System.out.println(e.getMessage());} try { String url = "jdbc:mysql://localhost:3333/mysql"; //연결을 한다.ID는 자신의 것,Passwd도 마찬가지, con = DriverManager.getConnection(url,"ID","Passwd"); //연결이 안되면 catch로 넘어가므로 OK가 안나타난다. System.out.println("OK") ; } catch(SQLException e){System.out.println(e.getMessage());} } } /*********************************************************************/ 소스에 대한 설명은 다음 시간에 하도록 하겠씁니다. 오늘은 연결이 잘되는지 , 드라이버는 제대로 설치했는지를 확인하는 시간이니깐여..... 위의 소스를 test.java로 저장하고, 프롬프트에서 javac test.java를 치면 test.class가 생기겠져. 그럼 java test 라고 치시고, 어떤 결과가 나타나나, 기다립시다. 어떻습니까? OK가 나타났나여? OK가 나오면, 성공이고, Exception이 발생한다면, 실패입니다. 실패라고 해도 걱정은 마십시오, 세상에 어디 쉬운게 있겟습니까..... 저같은 경우엔, 연결을 하는데만, 한 일주일 정도 걸렸습니다. JDBC같은 경우는 아는 사람도 얼마 없고,MySQL 쓰는 사람도 거의 없고, 있는 자료라고는 예제 몇개와 e-mail address 몇개.. 이리 저리 외국사람한테 안되는 영어로 질문하고, 결국 성공했씁니다. 지금 실패했다고, 실망하지는 마십시오. '실패는 성공의 어무이'입니다. 그럼 이제 실패하신 분을 위한 특강이 이어 집니다. OK하신 분은 다음 강의로 넘어가셔도 좋습니다. 4. 성공에 한 발 더 다가가기...... 어떤 에러가 나셨나여? 에러 혹은 Exception이 나셨을 껍니다. 혹시 컴파일시 에러라면, 위의 소스 코드를 잘 쳐보시구여. java test 했는데, test.class를 찾을 수 없다구 하면, 클래스 패스를 제대로 설정하시지요... 저는 Exception만을 가지고 그 해결 방안을 설명하겠습니다. 다음과 같은 Exception이 발생할 수 있습니다. 1) Class Not Found 2) Connection refused 3) access denied 그래도 1)번의 Exception은 해결하기 쉽습니다. 2), 3)은 좀 골치아프져...... 1)번은 JDBC드라이버의 패스가 제대로 설정되어 있지 않기 때문입니다. 다시 한번 제대로 패스를 설정했는지 봅시다. 드라이버도 설치하기는 쉽지여. 그냥 압축만 풀면, 그게 설치가 다 된 겁니다. 따라서 1)번의 예외는 클래스 패스만 제대로 걸어 주면 해결 됩니다. 2)번 예외는 포트를 잘못쓰거나, MySQL이 셧다운 된 상태입니다. MySQL이 셧다운 된 상태라면, 다시 키면 됩니다. 이런 일은 별루 없을 꺼라 생각되네여. rpm으로 설치햇다면, 부팅시에 자동으로 뜨거든여... 바이너리로 설치하신 분이라면, mysql.server start라는 명령을 주어 다시 켜시기 바랍니다. 포트를 잘못지정한 경우에도 2)번의 예외가 발생합니다...... 존재하지도 않는 포트로 접속을 시도한 경우 이지여. 이때는 MySQL이 어떤 포트를 이용해서 JDBC와 연결을 하는지를 알아 야 합니다. 보통 3306아니면, 3333번입니다. 리눅스 동 자료실에서 MySQL을 받아 까셨다면, 3333번입니다. 버전이 틀려서 그런지 모라도, 3306을 쓰는 MySQL도 있더군여.... 저도 집에서는 3333을 쓰는데, 연구실에서는 3306번을 씁니다. 두 개의 버전이 틀려서 그런지, 아니면 다른 이유가 있는지, 저도 여기까지는 잘 모르겠군여.... 혹시 3306번도 아니고, 3333번도 아니다, 이러면, 좀 힘듭니다. netstat -a | more 로 확인해봅시다. tcp 0 0 *:2049 *:* LISTEN tcp 0 0 *:smtp *:* LISTEN tcp 0 0 *:www *:* LISTEN tcp 0 0 *:6000 *:* LISTEN tcp 0 0 *:3333 *:* LISTEN udp 0 0 *:syslog *:* 제 컴의 결과중 일부를 발췌한 겁니다. 3333번이 LISTEN하고 있군여. 3333번도 아니고, 3306번도 아니라면, 위처럼, 이름은 없고, 숫자로 되어 있는 걸 포트로 적어 봅시다. 그러데 아직까지 3333, 3306이외의 포트는 못봤습니다. 또, mSQL이나, PostgreSQL도 3333을 쓰는지, 아니면, 그런 것들은 다른 것을 쓰는지도 잘 모르겠군여..... 아무튼 우리에게 중요한 것은 3333이나, 3306입니다. 3) access denied는 보통 패스워드나, ID를 잘못ㅤ썼을때 발생합니다. 다시 한번 확인해 봅시다. 가끔 'ID@localhost access denied' 혹은 'ID@127.0.0.1 access denied'가 나타나는 경우도 있는데 이 때에는 mysql DB에서 user 테이블의 Host 컬럼에 localhost나 127.0.0.1을 추가 해봅시다. 이외의 예외는 어떤 예왼지와 함께, 저에게 메일을 주시기 바랍니다. 오늘은 JDBC Driver 설치까지 공부했씁니다. 다음시간에는 java applet등을 이용해서 MySQL에 질의를 하고, 결과 값을 얻어 오는 것을 해보져 감사합니다. ---------------- 숭실대학교 컴퓨터학부 97학번 허정수 ------------ 『리눅스 학당-리눅스 강좌 / 연재 (go LINUX)』 594번 제 목:[강좌]JDBC와 MySQL을 이용한 웹과 DB 연동 5 올린이:wertyu (허정수 ) 98/08/02 22:33 읽음:1213 관련자료 없음 ----------------------------------------------------------------------------- JAVA, JDBC와 MySQL을 이용한 웹과 DB의 연동 5. (저도 아직 공부 중이라 틀린 부분이 많을 겁니다. 혹시 발견하신 분께서는 알려주십시오. 감사합니다.) 안녕하십니까.... InoS 허정수입니다...... 1) MySQL의 사용법과 SQL 문법 공부 2) JDBC 3) - i. JDBC Driver의 설치와 설정 - ii. JDBC API <= 오늘...... 이제 이 강좌의 마지막에 들어 섰군여..... 많은 도움은 됐나여? 음... 저두 강좌를 처음 올려보는 거고, 또 아직 저두 잘 모르는 내용을 강좌로 하려니, 힘드는군여. 하지만, JDBC에 관한 자료는 국내에서 구하기 힘든 실정입니다. 책이 몇권있긴 하지만, 대부분 번역본이지여. 프로그래밍을 배우면서 항상 느끼는 건데, 우리나라가 너무 뒤쳐저 있고, 또, 새로운 기술을 대부분 외국에서 들어온다는 겁니다. 먼저 우리 나라에서 개발을 하고, 또 한국말로 된 책을 읽으려 세계인들이 한국말을 배우고, 유학을 오는 세상. 소프트웨어 대국을 만드는 게, 우리들의 소망은 아닐까여... 앞의 강좌들을 읽어 오면서, 드라이버도 제대로 설치하시고, 테스트도 해보셨겠져? 이 바로 앞의 강좌는 꼭 읽으시기 바랍니다. 안 읽고 넘어 오신 분은 뒤로 가시길.... 또 jdk 1.1 이상을 쓰셔야 합니다. 이전 버전은 JDBC API가 포함이 안되어 있습니다. 그럼 이제 시작합시다. 1. 준비 체조. 우선 공부를 위해, 데이타 베이스를 하나 만들져.... mysqladmin -p create [DB 이름] 저번 강좌에서 패스워드를 만들었으면, -p 옵션을 부치시기 바랍니다. 그럼 암호 묻는 화면이 나옵니다. 저는 그냥 test DB를 쓰기로 했씁니다. 그럼 mysql -p test 라고 프롬프트에서 치면, test DB를 사용할 수 있겠져... mysql> 위처럼 보이져? 그럼 테이블을 하나 만듭시다. 아무거나... 전 beeper table을 만들께여. mysql> create table beeper (name char(20), number char(20)) ; beeper 테이블을 만들었으니, 레코드를 추가합시다. 될 수 있는데로, 친구들의 이름과 삐삐를 많이 입력하세여. 연습도 하고, 앞으로 할 공부를 위해. mysql> insert into beeper values('허정수', '015-8409-1531') ; 위처럼 해서 insert 하는건 앞의 강좌에서 배웠습니다. 기억이 안나면 앞으로 다시 가시길... 이제 입력한 것을 볼까여? mysql> select * from beeper ; 3 rows in set (0.00 sec) +--------+---------------+ | name | number | +--------+---------------+ | 허정수 | 015-8409-1531 | | 장현성 | 015-8631-8867 | | 진청호 | 012-297-7975 | +--------+---------------+ 흠. 전 3명을 입력했군여. 장난 삐삐는 치지 맙시다. 이제 비로소 모든 준비가 됐군여. 2. JDBC API를 배우자. 이제 이 강좌의 가장 중요한 부분에 와있습니다. JDBC API를 배우기 위해 이 앞의 많은 강좌가 있었습니다. 자. 시작해 볼까여... java applet이나, application이 JDBC를 이용해 DB를 이용하기 위해서 뭐가 먼저 필요할까요? 설계를 해봅시다. 음. 1) 먼저 JDBC Driver를 load해야 하겠고, 2) Connection을 하고, 3) 질문을 할 Statement를 만들고, 4) 질문을 하고, 5) 결과값(ResultSet)을 받아 와서 6) 결과를 가공(Process)하면 될 것입니다. 이런 식으로 프로그램을 짜면 됩니다. 뭐 말로는 어렵지 않져? 실제로도 어렵지 않습니다. JDBC API정도만 몇개 알아 두면 쉽져.... 먼저 Driver를 load해 봅시다. 3. Driver의 load Driver를 load하기 위해서는 Class.forName()을 이용합니다. 예를 볼까여? java.sql.* ; public class test_driver { public static void main(String [] argv) { try { Class.forName("gwe.sql.gweMysqlDriver") ; } catch(ClassNotFoundException e){System.out.println(e.getMessage()) ;} } } 위의 코드를 저장하고, 실행해 봅시다. 물론 에러가 안 나야 제대로 된 겁니다. 위에서 말한 것 처럼 Class.forName()을 이용해서 load를 합니다. 그 안의 인자는 드라이버입니다. Class.forName()은 ClassNotFoundException을 throw합니다. 4. Connection 하자 이제 드라이버도 로드가 되니, 연결을 해야하겠지여..... 다음과 같은 소스를 볼까여? import java.sql.* ; public class test { public static void main(String [] argv) { Connection con ; try { Class.forName("gwe.sql.gweMysqlDriver") ; } catch(ClassNotFoundException e) {System.out.println(e.getMessage());} try { String url = "jdbc:mysql://localhost:3333/test"; // *중요* 연결을 한다. con = DriverManager.getConnection(url,"ID","PASSWORD"); System.out.println("OK") ; } catch(SQLException e){System.out.println(e.getMessage());} } } 전에 보여드렸던 소스랑 같은 것이지여? 이제 설명을 해봅시다. 연결은 DriverManager의 Class Method인 getConnection을 이용해서 합니다. 이것은 Connection을 리턴하져. 다음을 봅시다. java.sql.DriverManager interface 선언 public class DriverManager extends Object DriverManager 클라스는 JDBC 드라이버를 manage하는 서비스를 제공합니다. 보통 Connect를 하기 위해 많이 씁니다.. 수많은 Method가 있지만, 다음을 제일 많이 씁니다. public static synchronized Connection getConnection( String URL,String user , String passwd) throws SQLExcetion 이 함수는 주어진 URL과 user, passwd로 연결을 하게 된다. 리턴 값은 Connection 입니다. 위의 예제에서도 다음과 같이 했져? con = DriverManager.getConnection(url,"ID","PASSWORD"); 여기서 con은 Connection의 Instance였습니다. 이제 Connection interface에 대해 알아 봅시다. java.sql.Connection public interface Connection extends Object A Connection represents a session with a named database. Nomally, within a Connection SQL statements are executed and results are returned.(마땅히 해석을 하기 힘들군여). Connection interface안의 Method들은 다음과 같습니다. (리턴 값들을 잘 봐두세여) public abstract Statement createStatement() throws SQLException 이 메소드는 SQL query를 수행하기 위한 statement를 리턴한다. statement 를 이용해 query를 한다. public void close() throws SQLException Connection을 close 한다. pubic abstract DatabaseMetaData getMetaData() throws SQLException 위 이외에도 많은 메소들이 있지만, 많이 안쓰입니다. 관심있으신 분들께서는 직접 http://www.javasoft.com에 가시던지. 책을 찾아 보시기 바랍니다. JDBC API의 레퍼런스가 있는 책이 있더군여.... 아무튼 이렇게 해서, 연결을 하고, 아주 중요한 Connection 의 instance를 얻었습니다. 이제, query를 하기 위해, Statement를 만들어 봅시다. 5. query를 수행하기 위해 Statement를 만들자. 전에 select * from user ; 등을 이용해서 query를 했지여..... JDBC를 이용하는 것도 다 java applet이나 application에서 이런 것들을 수행하기 위해서 입니다. 이런 것을 java applet 등에서 하기 위해, Statement가 필요합니다. 다음 소스를 보도록 합시다. import java.sql.* ; public class test { public static void main(String [] argv) { Connection con ; Statement stmt ;//추가된 부분 try { Class.forName("gwe.sql.gweMysqlDriver") ; } catch(ClassNotFoundException e) {System.out.println(e.getMessage());} try { String url = "jdbc:mysql://localhost:3333/test"; con = DriverManager.getConnection(url,"ID","PASSWORD"); stmt = con.createStatement() ;//여기도 추가 되었군여. } catch(SQLException e){System.out.println(e.getMessage());} } } 이제 Statement interface에 대해 알아 봅시다. java.sql.Statement public interface Statement Statement의 instance는 SQL statement등을 (select, insert 등) 을 수행하고, 그 결과로, ResultSet을 얻는다. 역시 많은 메소드들이 있지만, 많이 쓰이는 다음과 같은 것들만 봅시다. (마찬가지로 return 값이 뭔지 잘 보십시오) public abstract ResultSet executeQuery(String sql) throws SQLException 보통, select를 수행할때 많이 쓰입니다. public abstract int executeUpdate(String sql) throws SQLException 이건, update나 insert, delete등, 레코드를 변경하는 SQL statement를 수행할때 쓰입니다. public abstract void close() throws SQLException 종료 이 정도만 알아놔도 뭐 쓸만 하겠군여.... 중요한건 리턴 타입이 뭔지를 잘 알아둬라는 것. 6. query를 하고 결과값(ResultSet)을 얻어 와서 출력을 해보자. 이 강좌의 마지막에 오셧군여..... 한번 query를 넘기고 결과를 얻어 와 보겠습니다. 먼저 Statement에서 executeQuery의 리턴 타입인 ResultSet에 대해 알아 봅시다. java.sql.ResultSet public interface ResultSet extends Object ResultSet은 Statement를 execute함으로써 얻어진 결과에 access 할 수 있도록 한다. 여러 행이 결과로 넘겨 졌을때는 next()를 이용해서 다음 레코드로 이동할 수 있다. 각 컬럼의 값은 index와 컬럼의 이름을 가지고 접근을 할 수있는데, index 를 가지고 접근을 하는 것이 더 일반적이다. 여기에도 많은 method들이 있지만, 다음과 같이 많이 쓰이는 것에 대해서만 알아 봅시다. (역시 리턴값을 잘 봐두세여) public abstract boolean next() throws SQLException 다음 레코드로 이동을 한다. 만약 레코드가 없으면, false를 리턴한다. while()을 이용해 모든, 레코드를 검색할 수 있다. public abstract String getString(int columnIndex) throws SQLException 인자는 컬럼 인덱스입니다. 그 레코드의 컬럼값을 String으로 리턴하져 자세한 것은 다음에 예에서 봅시다. public abstract byte getByte(int columnIndex) throws SQLException byte를 얻어 옵니다. public abstract int getInt(int columnIndex) throws SQLExceotion int를 얻어 옵니다. 이것들 말고도 많이 있습니다. 각 자료형 별로 getXXX()가 있씁니다. 또 인자에 따랏 getXXX(String columnName) 도 있는데, 컬럼 이름보다는 컬럼 index로 access하는게 더 좋으므로, 소개는 안합니다. 이 정도면, 다 했군여. 이젠 예제를 봅시다. 아까 우리가 만든 test DB의 beeper table ㅏ【 결과를 얻어 와서, 출력을 합니다. ================================================================= import java.sql.* ; public class test { public static void main(String [] argv) { Connection con ; Statement stmt ; ResultSet rs ; String RESULT = "\n" ; try { Class.forName("gwe.sql.gweMysqlDriver") ; } catch(ClassNotFoundException e) {System.out.println(e.getMessage());} try { String url = "jdbc:mysql://localhost:3333/test"; con = DriverManager.getConnection(url,"root","hjsksh"); stmt = con.createStatement() ; rs = stmt.executeQuery("select * from beeper" ) ; while(rs.next()) { RESULT += rs.getString(1) + " | " + rs.getString(2) ; RESULT += "\n" ; } System.out.println(RESULT) ; } catch(SQLException e){System.out.println(e.getMessage());} } } ================================================================== 얼마 길지 않은 소스이나, 아까 입력한 test DB에서 beeper table의 모든 내용을 잘 보여주는 군여. 그다지 어렵지는 안습니다. 혹시 어렵다면, 개인적으로 질문을 받을테니 메일을 주십시오. 이상 지금까지 5번의 강좌로, 짧게나마 JDBC에 대해 알아 봤습니다. java application만을 짜봤으나, applet으로 만들면, WEB과 DB를 연동하기도 쉽울 껍니다. 그리고 지금까지 한 내용은 정말 기초적인 내용입니다. 더 자세하게 하고 싶은 신 분께서는 SQL부터 JDBC API까지, 책을 보면서 새로 해야할 것입니다. 처음 나름대로 강좌를 준비해봤는데, 뿌듯하군여 ^^; 2일만에 강좌를 다 써서 혹시 오타도 만들지도 모르겟네여.... 지금까지 저의 강좌를 읽어 주셔서 감사합니다. 다음 겨울 방학때는 CORBA 에 대해 강좌를 할 예정입니다. 다음 겨울 방학을 기다려 주세여~~ ----------------------- 숭실대학교 컴퓨터학부 97학번 허정수 -------- 『리눅스 학당-리눅스 강좌 / 연재 (go LINUX)』 598번 제 목:[예제] 밑에 JDBC 강좌 예제.... 올린이:wertyu (허정수 ) 98/08/15 14:42 읽음:737 관련자료 없음 ----------------------------------------------------------------------------- 안녕하십니까.... InoS 허정수입니다. 벌써 조회수가 170을 넘어 섰군여 ^^; 감사, 감사.. 그런데 저의 강좌의 제목은 Web과 DB 의 연동이었는데,,, 저의 강좌에는 웹과 DB를 연동하는 예제가 하나도 없져? ^^; 그래서 오늘 예제를 한번 짜봤습니다. 간단한 예제로서, 친구들의 주소록을 웹에 담아 놓은 것입니다. 이름을 입력하면, 그 사람의 이름과, 전화 번호, 삐삐 번호, 주소가 출력됩니다. 먼저, DB를 만들고, 그 안에 Table을 만듭니다. mysqladmin -p create address_DB 암호를 걸어 놨기 때문에 -p를 붙였고, address_DB는 새로 만든 DB 이름입니다. 이제 Table을 만들어 봅시다. 프롬프트에서 mysql -p address_DB 이렇게 하면 address_DB 에 연결되겠져? create table person (name char(20), phone char(20), beeper char(20), address char(5)) ; 위처럼 하여 Table을 만듭니다. 이제, insert를 이용해서 각자 레코드를 입력합시다. 이제 소스를 봅시다. 다음의 소스를 address.java로 저장하고, javac address.java 로 컴팔을 합니다. 글구 address.html에 다음과 같이 저장합니다. 그후 appletviewer나 hotjava를 이용해서, address.html을 보면 됩니다. 넷스케잎을 사용하시는 분은 4.5이상의 버전을 이용해야합니다. 그 이전의 버전은 자바를 잘 지원하지 못하는 군여..... 익스플로러는 안써봐서(리눅스에서 못써봐서) 잘 모르겟습니다. 글구, 리눅스에서는 자바가 한글을 잘 지원 못하더군여..... 예제를 윈도그에서 돌리면, 멎진(?) 주소록 서버가 될겁니다. ========================================================= import java.sql.* ; import java.awt.* ; import java.awt.event.* ; import java.applet.* ; public class address extends Applet { Connection con ; ResultSet rs ; Statement stmt ; String driver = "gwe.sql.gweMysqlDriver" ; String url = "jdbc:mysql://localhost:3306/address_DB" ; TextField TF = new TextField(10) ; TextArea TA = new TextArea("Results are here" , 5, 50,0) ; Button BT = new Button("Query") ; public void init() { BT.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ query() ; } }) ; this.add(TF) ; this.add(BT) ; this.add(TA) ; connect() ; } public void connect() { try { Class.forName(driver) ; } catch(ClassNotFoundException e) {} try { con = DriverManager.getConnection(url, "TIS", "TIS") ; stmt = con.createStatement() ; } catch(SQLException e){} } public void query() { TA.setText("Results are here") ; String name = TF.getText() ; try { String QUERY = "select * from person where name = '" + name +"'" ; rs = stmt.executeQuery(QUERY) ; while(rs.next()) { TA.appendText("\n" + "NAME : " + rs.getString(1)+"\n") ; TA.appendText("Phone : " + rs.getString(2) + "\n") ; TA.appendText("Beeper : " + rs.getString(3) + "\n") ; TA.appendText("Address : " + rs.getString(4) + "\n") ; } } catch(SQLException e) {} } } ============================================================ 흠. 70줄 정도 바께 안되지만, 멎진 일을 하는군여...... 담에 또 좋은 강좌와 함께 여러분을 찾아가겠습니다. 감사합니다. [InoS] - Input normal output Special ----------- 숭실대학교 컴퓨터학부 97학번 허정수 -------