-------------------------------------
JDBC Connection
1. 데이터베이스 연결 객체 생성 과정
- Import JDBC Packages
import java.sql.*; // for standard JDBC programs
- Register JDBC Driver
Class.forName("oracle.jdbc.driver.OracleDriver");
- Database URL Formulation
MySQL
com.mysql.jdbc.Driver
jdbc:mysql://hostname/databaseName
ORACLE
oracle.jdbc.driver.OracleDriver
jdbc:oracle:thin:username/password@hostname:port Number:databaseName
- Create Connection Object
DriverManager.getConnection(String url)
DriverManager.getConnection(String url, Properties prop)
DriverManager.getConnection(String url, String user, String password)
- Closing JDBC connections
conn.close();
---------------------------------------------
JDBC Connection TEST
//Sample03.java
package com.test;
import java.sql.*;
import java.util.Properties;
public class Sample03 {
public static void main(String[] args) {
Connection conn = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
//방법1
String url = "jdbc:oracle:thin:@211.63.89.XX:1521:xe";
String user = "아이디";
String password = "패스워드";
conn = DriverManager.getConnection(url, user, password);
//방법2
/*
String url = "jdbc:oracle:thin:아이디/패스워드@211.63.89.XX:1521:xe";
conn = DriverManager.getConnection(url);
*/
//방법3
/*
String url = "jdbc:oracle:thin:@211.63.89.XX:1521:xe";
Properties info = new Properties();
info.put("user", "아이디");
info.put("password", "패스워드");
conn = DriverManager.getConnection(url, info);
*/
if (conn != null) {
System.out.println("오라클 연결 성공!");
}
conn.close();
}catch(ClassNotFoundException | SQLException e){
e.printStackTrace()
}finally{
try {
if (conn != null) {
conn.close();
}
}catch(Exception e){
e.printStackTrace();
}
}
}
}
-----------------------------------------------
List -> 순서 있는 자료 저장. 값 중복 허용.
Set -> 순서 없는 자료 저장. 값 중복 허용하지 않음.
Map -> 키, 값의 쌍으로 자료 저장. 키는 중복 허용하지 않음. 값은 중복 허용.
-----------------------------------------------
회원관리 JDBC 프로그램 작성1
- JDBC 프로그램 작성은 아래 순서를 따른다.
기능 구현 분석 > 화면 구성 > 데이터베이스(샘플 쿼리) 준비 > 클래스 구성 분석 > 액션 코드 작성 > 테스트
1. 기능 구현
- 이름, 전화번호를 입력 받아서 데이터베이스에 저장
- 번호, 이름, 전화번호를 콘솔에 출력
2. 화면 구성
이름 전화번호(x exit)?park 010-111-2222
1개 행 이(가) 삽입되었습니다.
이름 전화번호(x exit)?x
-----------------------
전체 회원수 : 2명
-----------------------
번호 이름 전화번호
1 kim 010-123-1234
2 park 010-111-2222
-----------------------
3. 데이터베이스 준비
--테이블 생성
CREATE TABLE memberList (
mid NUMBER --회원 고유 번호 지정. PK 지정(필수). 시퀀스 지정(선택).
,name NVARCHAR2(20) --한글 입력 가능. 20자 이내
,phone VARCHAR2(20) --20자 이내.
);
--제약 조건 추가
ALTER TABLE 테이블이름
ADD CONSTRAINT 제약이름 제약종류(제약대상);
ALTER TABLE 테이블이름
DROP CONSTRAINT 제약이름;
--mid 컬럼에 PK 제약 지정
ALTER TABLE memberList
ADD CONSTRAINT memberList_mid_pk PRIMARY KEY(mid);
--시퀀스 객체 사용시
CREATE SEQUENCE memberListSeq;
--입력 쿼리를 이용한 샘플 데이터 입력.
INSERT INTO memberList (mid, name, phone)
VALUES (memberListSeq.nextval, 'hong', '010-123-1234');
INSERT INTO memberList (mid, name, phone)
VALUES (memberListSeq.nextval, 'park', '010-234-2345');
COMMIT;
--권장하지 않는 표현. 컬럼 리스트에서 * 사용하지 않는다.
SELECT * FROM memberList;
--전체 명단 출력 쿼리 (프로그램에서 사용 예정)
--권장하는 표현
SELECT mid, name, phone FROM memberList ORDER BY mid;
--인원수 출력 쿼리 (프로그램에서 사용 예정)
--함수 사용시 반드시 별칭 사용.
SELECT COUNT(*) AS "count" FROM memberList;
4. 프로그램 준비
//JDBC04.java -> main() 메소드. 화면 구성 및 데이터베이스 액션 처리.
5. 소스 코드
//소스 코드 작성 순서
1. 데이터베이스 연결 과정 작성 -> 테스트
2. 출력 액션 과정 작성 -> 테스트
3. 입력 액션 과정 작성 -> 테스트
//JDBC04.java -> 1단계 (데이터베이스 연결 과정 작성)
package com.test;
//1. 패키지 등록
import java.util.*;
import java.sql.*;
public class JDBC04 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Connection conn = null;
Statement stmt = null;
try {
//2. JDBC 드라이버 등록
Class.forName("oracle.jdbc.driver.OracleDriver");
//3. 커넥션 객체 준비
conn = DriverManager.getConnection("jdbc:oracle:thin:username/password@IP주소:1521:xe");
//커넥션 테스트
if (conn != null) {
System.out.println("연결 성공!");
}
//---입력 액션 추가
//4. 쿼리 준비 및 실행
//5. 결과 분석 및 출력
//---출력 액션 추가
//6. 마무리
}catch(Exception e) {
System.out.println(e.toString());
}finally{
//6. 마무리
try {
if (conn!=null) {
conn.close();
}
}catch(Exception e){
}
}
sc.close();
}
}
//JDBC04.java -> 2단계 (입력 액션 과정 작성)
package com.test;
//1. 패키지 등록
import java.util.*;
import java.sql.*;
public class JDBC04 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Connection conn = null;
Statement stmt = null;
try {
//2. JDBC 드라이버 등록
Class.forName("oracle.jdbc.driver.OracleDriver");
//3. 커넥션 객체 준비
conn = DriverManager.getConnection("jdbc:oracle:thin:minjong/test123@211.63.89.85:1521:xe");
//커넥션 테스트
/*
if (conn != null) {
System.out.println("연결 성공!");
}
*/
//이 문장은 do ~ while 문 밖에 위치시킬 것.
stmt = conn.createStatement();
do {
//---입력 액션 추가
System.out.print("이름 전화번호(x exit)?");
String name = sc.next();
if (name.equalsIgnoreCase("x")) {
break;
}
String phone = sc.next();
//4. 입력 쿼리 준비 및 실행
String sql = String.format("INSERT INTO memberList (mid, name, phone) VALUES (memberListSeq.nextval, '%s', '%s')"
, name, phone);
//executeUpdate() 메소드는 INSERT, UPDATE, DELETE 쿼리 전용
int count = stmt.executeUpdate(sql);
//COMMIT 액션은 자동 실행 된다.
System.out.printf("%d개 행이 삽입되었습니다.%n", count);
}while(true);
//5. 출력 쿼리 준비 및 실행
//---출력 액션 추가
}catch(Exception e) {
System.out.println(e.toString());
}finally{
//6. 마무리
try {
if (conn!=null) {
conn.close();
}
}catch(Exception e){
}
}
sc.close();
}
}
//JDBC04.java -> 3단계 (출력 액션 과정 작성)
package com.test;
//1. 패키지 등록
import java.util.*;
import java.sql.*;
public class JDBC04 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Connection conn = null;
Statement stmt = null;
try {
//2. JDBC 드라이버 등록
Class.forName("oracle.jdbc.driver.OracleDriver");
//3. 커넥션 객체 준비
conn = DriverManager.getConnection("jdbc:oracle:thin:minjong/test123@211.63.89.85:1521:xe");
//커넥션 테스트
/*
if (conn != null) {
System.out.println("연결 성공!");
}
*/
//이 문장은 do ~ while 문 밖에 위치시킬 것.
stmt = conn.createStatement();
do {
//---입력 액션 추가
System.out.print("이름 전화번호(x exit)?");
String name = sc.next();
if (name.equalsIgnoreCase("x")) {
break;
}
String phone = sc.next();
//4. 입력 쿼리 준비 및 실행
String sql = String.format("INSERT INTO memberList (mid, name, phone) VALUES (memberListSeq.nextval, '%s', '%s')"
, name, phone);
//executeUpdate() 메소드는 INSERT, UPDATE, DELETE 쿼리 전용
int count = stmt.executeUpdate(sql);
//COMMIT 액션은 자동 실행 된다.
System.out.printf("%d개 행이 삽입되었습니다.%n", count);
}while(true);
//5. 출력 쿼리 준비 및 실행
//---출력 액션 추가
//출력 메시지 문자열 누적을 위한 객체 준비
StringBuilder sb = new StringBuilder();
//주의. 문장 끝에 ;(semicolon) 없다.
String sql2 = String.format("SELECT COUNT(*) AS \"count\" FROM memberList"); //인원수
//executeQuery() 메소드는 SELECT 쿼리 전용
ResultSet rs2 = stmt.executeQuery(sql2);
//next() 메소드는 ROW 단위 접근
//결과 집합(ResultSet)에서 순차적으로 ROW를 접근하고
//더 이상 접근할 ROW가 없으면 false를 반환한다.
while(rs2.next()) {
//getXXX("컬럼명") 메소드는 COLUMN 단위 접근
//getXXX() 메소드에서 XXX 부분은 자료형 종류 지정
//예를 들어, String 자료형인 경우는 getString()
//String count = rs2.getString("count");
int count = rs2.getInt("count");
//문자열 메시지 누적
sb.append(String.format("전체 회원수 : %s명%n", count));
}
rs2.close();
//주의. 문장 끝에 ;(semicolon) 없다.
String sql3 = "SELECT mid, name, phone FROM memberList ORDER BY mid"; //명단 출력
ResultSet rs3 = stmt.executeQuery(sql3);
while(rs3.next()) {
//String mid = rs3.getString("mid");
int mid = rs3.getInt("mid");
String name = rs3.getString("name");
String phone = rs3.getString("phone");
sb.append(String.format("%s %s %s %n"
, mid, name, phone));
}
rs3.close();
//결과 출력
System.out.println(sb.toString());
}catch(Exception e) {
System.out.println(e.toString());
}finally{
//6. 마무리
try {
if (stmt!=null) {
stmt.close();
}
}catch(Exception e){
}
try {
if (conn!=null) {
conn.close();
}
}catch(Exception e){
}
}
sc.close();
}
}
------------------------------------------------
main() 메소드 내에 콘솔, 데이터베이스 액션이 한꺼번에 같이 들어있는 코드는 권장하지 않는다.
-> 액션별로 클래스 분리 필요
'JDBC' 카테고리의 다른 글
6일차_성적관리_최종버전 (0) | 2015.06.21 |
---|---|
5일차_성적관리 (0) | 2015.06.21 |
4일차_성적관리 (0) | 2015.06.21 |
3일차_회원관리 JDBC 프로그램2, Statement 객체 종류별 액션 처리 (0) | 2015.06.21 |
1일차_JDBC 환경설정, Sample Code (0) | 2015.06.21 |