-------------------------------------
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() 메소드 내에 콘솔, 데이터베이스 액션이 한꺼번에 같이 들어있는 코드는 권장하지 않는다.
-> 액션별로 클래스 분리 필요

 

 

 

 


 

블로그 이미지

알 수 없는 사용자

,