yoni

[39][JDBC] Eclipse Java project와 MySQL Driver 연동, Movie 테이블, String, StringBuffer, StringBuilder의 특징 본문

java of educational by contents

[39][JDBC] Eclipse Java project와 MySQL Driver 연동, Movie 테이블, String, StringBuffer, StringBuilder의 특징

yoni-1117 2018. 12. 15. 17:39

[01] Eclipse Java project와 MySQL Driver 연동


1. 이클립스 Java project에서의 MySQL 드라이버 연동

1) 환경 설정 페이지로 이동합니다.
   


2) [Libraries] 탭을 누릅니다.
   [Add External JARs...] 버튼을 클릭합니다.
   


3) jar library 파일을 추가합니다.
   


4) 등록된 jar library 파일을 확인합니다.
   
  
  
  
[02] 문자열 처리

1. String, StringBuffer, StringBuilder의 특징

1) String
   - 단순한 하나의 문자열을 저장하는 기능을 합니다.
   - 문자열 변경시 객체 생성이 계속 발생해 속도가 느립니다.
   - 문자열 비교시 new를 이용하여 생성된 객체는 '==' 연산자로 값 비교가 안됨으로
     equals() 메소드를 사용합니다.

2) StringBuffer: 문자열 변경시 메모리 연산이 진행되어 하나의 객체로 처리됨으로
   속도가 빠릅니다. 

[실행 화면]

1) java
2) java
3) 3254818
4) 3254818
5) 3254818
6) java
7) java가 아닙니다.
8) java
--------------------------
9) 0
10) 3254818
11) -1819859227
12) -610096846
javajspspring
--------------------------
13) 2018699554
14) 2018699554
15) 2018699554
16) 2018699554
javajspspring
--------------------------
17) 366712642
18) 366712642
19) 366712642
20) 366712642
javajspspring 
 
▷ jdbc.StringTest.java
-----------------------------------------------------------------------------------
package jdbc;
 
public class StringTest {
 
  public static void main(String[] args) {
    String str1 = "java";
    String str2 = new String("java");
    String str3 = new String("왕눈이");
    String str4 = new String("아로미");
    String str5 = new String("투투");
    
    System.out.println("1) " + str1);
    System.out.println("2) " + str2);
    
    System.out.println("3) " + str1.hashCode());
    System.out.println("4) " + str2.hashCode());
    System.out.println("5) " + "java".hashCode());
    
    if (str1 == "java") {
      System.out.println("6) java");
    }
    
    // new를 이용하면 객체를 생성하면 '==' 연산자로 값 비교를 못하게 막혀 있음
    if (str2 == "java") { 
      System.out.println("7) java");
    } else {
      System.out.println("7) java가 아닙니다.");
    }
    
    if (str2.equals("java")) {
      System.out.println("8) java");
    }
    
    System.out.println("--------------------------");
    String dev = "";
    System.out.println("9) " + dev.hashCode());
    
    dev = dev + "java";
    System.out.println("10) " + dev.hashCode());
    
    dev = dev + "jsp";
    System.out.println("11) " + dev.hashCode());
 
    dev = dev + "spring";
    System.out.println("12) " + dev.hashCode());
    System.out.println(dev);
    System.out.println("--------------------------");
    
    StringBuffer sb = new StringBuffer();
    sb.append("");
    System.out.println("13) " + sb.hashCode());
    sb.append("java");
    System.out.println("14) " + sb.hashCode());
    sb.append("jsp");
    System.out.println("15) " + sb.hashCode());
    sb.append("spring");
    System.out.println("16) " + sb.hashCode());
    System.out.println(sb.toString());
    System.out.println("--------------------------");
    
    StringBuilder builder = new StringBuilder();
    builder.append("");
    System.out.println("17) " + sb.hashCode());
    builder.append("java");
    System.out.println("18) " + sb.hashCode());
    builder.append("jsp");
    System.out.println("19) " + sb.hashCode());
    builder.append("spring");
    System.out.println("20) " + sb.hashCode());
    System.out.println(sb.toString());
    
  }
 
}
 
 
 
-----------------------------------------------------------------------------------
 
 
 
 

[03] MySQL과 JAVA연동(PreparedStatement)

1. 데이터베이스 연동  JAVA code


1) 데이터베이스 연결 Driver
    MySQL: String jdbc = "org.gjt.mm.mysql.Driver";
    Oracle: String jdbc = "oracle.jdbc.driver.OracleDriver"

2) 데이터베이스 연결 정보
    MySQL: String url = "jdbc:mysql://localhost:3306/web?useUnicode=true&characterEncoding=euckr";
    Oracle:  String url = "jdbc:oracle:thin:@localhost:1521:XE";

3) 계정과 패스워드
    MySQL: String user = "root";
               String pass = "1234";

    Oracle:  String user = "system";
               String pass = "1234";
 
4) Class.forName("org.gjt.mm.mysql.Driver")
   - memory로 클래스 소스를 로딩함, 객체는 생성하지 않음.
   - 다양한 데이터베이스를 실행시에 연결하기위해 드라이버 클래스를
     선택적으로 적용할 수 있도록 지원하는 기능입니다.(동적 라이브러리 로딩)
     참고적으로 객체를 만들려면 newInstance() 메소드를 이용하나 JDBC에서는
     개발자가 선언하지 않습니다.   

5) con = DriverManager.getConnection(url, user, pass);
    - con은 인터페이스임으로 객체를 생성할 수 없으나, Connection interface를
      구현한 클래스로부터 생성된 객체를 할당받을 수 있습니다. 이런 클래스는
      vendor(제조사)에서 구현하여 jar library 행태로 제공합니다.
 
 
2. DBMS 개발시 반복적으로 사용되는 공통 소스
-----------------------------------------------------------------------------------

    Connection con = null;              // DBMS 연결
    PreparedStatement pstmt = null; // SQL 실행
    ResultSet rs = null;                   // SELECT 결과를 저장
    StringBuffer sql = null;              // SQL 문장
    int count = 0;                         // 처리된 레코드 갯수
 
    String className = "org.gjt.mm.mysql.Driver"; // MySQL 연결 Drvier 
    String url = "jdbc:mysql://localhost:3306/javadb?useUnicode=true&characterEncoding=euckr"; 
    String user = "root"; 
    String password = "1234";
 
    try{
      Class.forName(className); // memory로 클래스를 로딩함, 객체는 생성하지 않음.
      con = DriverManager.getConnection(url, user, password ); // MySQL 연결

      sql = new StringBuffer();
      sql.append("");


 
      pstmt = con.prepareStatement(sql.toString()); // SQL 실행 객체 생성
      count = pstmt.executeUpdate(); // INSERT, UPDATE, DELETE
      // rs = pstmt.executeQuery();    // SELECT 
 
      if (count == 1){
        System.out.println("처리 성공");
      }else{
        System.out.println("처리 실패");
      }    
    }catch(Exception e){
      e.printStackTrace();
    }finally{
      try{
        if (rs != null){ rs.close(); }
      }catch(Exception e){ }
 
      try{
        if (pstmt != null){ pstmt.close(); }
      }catch(Exception e){ }
 
      try{
        if (con != null){ con.close(); }
      }catch(Exception e){ }
    }
 
 
-----------------------------------------------------------------------------------
    
   

3. SQL
  
1) SQL을 먼저 개발하고 테스트가 끝난후 JAVA 개발을 시작합니다.
   이때 작성된 SQL을 복사하여 JAVA에서 붙여서 사용합니다. 따라서
   JAVA class에서 테스트가 되지 않은 SQL을 입력하여 사용하지 않습니다.
   
2) 설계 및 SQL 작성
- 논리적 모델링 속성: 영화번호, 제목, 평점, 출연, 등록 날짜
- 물리적 모델링 컬럼: movieno, title, good, name, rdate
- 목록
 movieno title           good name        rdate
 ------- ---------- ---- ------ ---------------------
       1 스타트랙(2016) 10.0 크리스 파인 2017-07-28 14:57:35.0
       2 월터(2013)       10.0 벤 스틸러   2017-07-28 14:57:36.0
       3 암살(2015)       10.0 전지현       2017-07-28 14:57:37.0

 
3. SQL 작성
- CRUD 패턴 이용

  . C: Create, INSERT SQL, 등록 예) 글 등록, 상품 등록, 설문조사 등록, 회원 가입...
  . R: Read, SELECT SQL, 조회, 목록, 검색, 많은 레코드의 페이지 분할 예) 글 목록...
  . U: Update, UPDATE SQL 예) 글 수정, 주문 상품 갯수 수정, 예약 날짜 수정
  . D: Delete, DELETE SQL 예) 글 삭제, 상품 주문 취소, 예약 취소...
 
▷ /src/jdbc/movie.sql
-----------------------------------------------------------------------------------
-- 논리적 모델링 속성: 영화번호, 제목, 평점, 출연, 등록 날짜
-- 물리적 모델링 컬럼: movieno, title, good, name, rdate
 
CREATE TABLE movie(
  movieno INT                 NOT NULL AUTO_INCREMENT, -- 영화 번호
  title        VARCHAR(100) NOT NULL, -- 영화 제목(연도)
  good      FLOAT             NOT NULL, -- 평점
  name      VARCHAR(30)  NOT NULL, -- 출연
  rdate      DATETIME       NOT NULL, -- 등록 날짜
  PRIMARY KEY(movieno)
);
 
1) 등록
INSERT INTO movie(title, good, name, rdate)
VALUES('배틀스타 갤럭티카(미드, 2003)', 10.0, '매리 맥도넬', now());
 
INSERT INTO movie(title, good, name, rdate)
VALUES('인터스텔라(영화, 2014)', 10.0, '앤헤서웨이', now());
 
INSERT INTO movie(title, good, name, rdate)
VALUES('레미제라블(영화, 2012)', 10.0, '휴잭맨', now());
 
 
2) 목록
SELECT * FROM movie;
 
SELECT movieno, title, good, name, rdate
FROM movie
ORDER BY title ASC;
 
 movieno title               good name   rdate
 ------- ------------------- ---- ------ ---------------------
       3 레미제라블(영화, 2012)     10.0 휴잭맨    2018-08-28 16:50:33.0
       1 배틀스타 갤럭티카(미드, 2016) 10.0 매리 맥도넬 2018-08-28 16:44:41.0
       2 인터스텔라(영화, 2014)     10.0 앤헤서웨이  2018-08-28 16:48:44.0
 
SELECT movieno, title, good, name, rdate
FROM movie
ORDER BY movieno DESC;
 
 movieno title               good name   rdate
 ------- ------------------- ---- ------ ---------------------
       3 레미제라블(영화, 2012)     10.0 휴잭맨    2018-08-28 16:50:33.0
       2 인터스텔라(영화, 2014)     10.0 앤헤서웨이  2018-08-28 16:48:44.0
       1 배틀스타 갤럭티카(미드, 2016) 10.0 매리 맥도넬 2018-08-28 16:44:41.0
 
3) 조회
SELECT movieno, title, good, name, rdate
FROM movie
WHERE movieno = 1;
 
 movieno title               good name   rdate
 ------- ------------------- ---- ------ ---------------------
       1 배틀스타 갤럭티카(미드, 2016) 10.0 매리 맥도넬 2018-08-28 16:44:41.0
       
4) 수정
UPDATE movie
SET title= '배틀스타 갤럭티카(미드, 2004)', good=9.9, name='제이미 밤버'
WHERE movieno = 1;
 
SELECT movieno, title, good, name, rdate
FROM movie
WHERE movieno = 1;
 
 movieno title               good name   rdate
 ------- ------------------- ---- ------ ---------------------
       1 배틀스타 갤럭티카(미드, 2004)  9.9 제이미 밤버 2018-08-28 16:44:41.0
       
5) 삭제
SELECT * FROM movie;
 
DELETE FROM movie
WHERE movieno=3;
 
        
-----------------------------------------------------------------------------------
  
  


Comments