IT자료실/Java

Java (java.sql 패키지-1)

Ramda 2022. 4. 21. 00:03

java.sql 패키지

  • DNMS : 데이터를 안전하고 효과적으로 관리하기 위해 사용 (ex.Oracle, MySQL)
  • SQL : DBMS가 읽고 처리할 수 있는 독립적인 언어

SQL 종류

  • DDL (데이터가 저장되는 공간 = 테이블)
    • CREATE : 테이블 생성
    • ALTER : 테이블 수정
    • DROP : 테이블 삭제
  • DML
    • INSERT : 데이터 등록
    • UPDATE : 데이터 수정
    • DELETE : 데이터 삭제
    • JOIN : 데이터 결합
  • DQL
    • SELETE : 데이터 검색
  • DLC
    • GRANT : 권한 부여
    • REVOKE : 권한 취소
  • 테이블은 클래스와 컬럼은 변수와 비슷한 성질

DDL

  • 데이터가 저장 되는 공간을 정의하는 언어
  • 데이터 등록 구조
    • 칼럼이름 데이터타입(데이터크기) 제약조건
  • 데이터 터입
    • 문자 타입 : VARCHAR(숫자) (숫자는 글자 제한)
    • 숫자 타입 : NUMBER
    • 날짜 타입 : DATE
  • 제약조건
    • 해당 칼럼이 중복을 허용하는지, NULL 상태를 허용하는지 등 설정
    • PRIMARY KEY : 해당 칼럼에 반드시 값 입력, 중복 허용 하지 않음
    • NOT NULL : 해당 칼럼에 반드시 값 입력
  • 칼럼과 칼럼은 콤마로 구분되며 마지막 칼럼 뒤에 콤마를 찍으면 오류이다.

DML

  • 데이터 등록 구조
    • INSERT INTO 테이블이름(컬럼목록) VALUES(값목록);
  • INSERT 구문 주의사항
    • 칼럼목록과 값 목록 개수 일치
    • 칼럼목록과 값 목록 타입 일치
  • 숫자 데이터는 아무 표시 없이 설정, 문자 데이터는 반드시 ''로 감싸야 한다.
  • 데이터 수정 구조
    • UPDATE 테이블이름 SET 칼럼이름 = 수정값, 칼럼이름 = 수정값;
  • 특정 칼람만 변경하기 위해서는 WHERE 조건을 추가하여 원하는 칼럼 자료를 기입한다.
  • 데이터 삭제 구조
    • DELETE 테이블 이름 WHERE 칼럼이름 = 수정값

DQL

  • 데이터 검색 구조
    • SELETE 컬럼이름 FROM 테이블이름 WHERE 제약조건
  • 모두를 선택하려면 SELETE * FROM 테이블이름 을 입력한다
  • 오름차순/ 내림차순 정리
    • 뒤에 ASC(오름차순), DESC(내림차순) 를 붙인다

JDBC(Java Datebase Connectivity)

  • 자바에서 관계형 데이터베이스를 연동하기 위해 제공하는 표준 API
  • JDBC를 이용하면 DBMS에 종속되지 않는 프로그램을 개발할 수 있다.
  • 대부분 클래스가 아닌 인터페이스를 이용하여 개발하도록 되어 있다.
  • JDBC API가 제공하는 인터페이스를 implements한 클래스가 JDBC 드라이버이다.
  • JDBC API를 이용하면 데이터베이스가 변경되어도 JDBC 드라이버만 변경되면 프로그램 수정없이
    데이터베이스를 교체할 수 있다.(다형성의 원리와 똑같다)JDBC프로그램 절차 (5단계)

1단계 : 드라이버 객체 생성 및 등록

  • SQL 언어를 사용하는 폴더를 자바와 연결한다.
  • registerDriver() 메서드가 SQLException을 발생시키므로 try ~ catch문을 사용하여 예외시켜준다.
try {

            DriverManager.registerDriver(new 드라이버 이름);
            } catch (SQLException e) {
            e.printStackTrace();
        }

2단계 : Connection 연결

  • 드라이버 객체 로딩 한 후 SQL 데이터베이스와 커넥션을 연결
            String jdbcUrl = "JDBC URL 입력";
            Connection con = DriverManager.getConnection(jdbcUrl, "ID", "Password");

            if(conn != null) {
                System.out.println("SQL 연결 성공 : " + conn.toString());
            }
  • JDBC의 궁극적인 목표는 SQL을 Database로 보내는 것
  • Connection은 두 곳을 연결하는 '길' 같은 의미이다.

3단계 : PreparedStatement 생성

  • SQL과 Database로 연결하는 Connection이 생겼다면,
    데이터를 전송하는 역할을 하는 PreparedStatement가 필요하다.
            String sql = "insert into 테이블이름 values(?, ?, ?, ?)";
            PreparedStatement sta = con.prepareStatement(sql);

            if(stmt != null) {
                System.out.println("Statement 객체 : " + 
                stmt.toString());
            }
  • PreparedStatement 객체에 INSERT 명령어가 설정되어 있다.
  • 자료가 PreparedStatment에 의해 옮겨지는 상태이다.

4단계 : SQL 전송

  • SQL 파라미터 값을 설정할 때는 반드시 칼럼 데이터 타입을 확인
    (설정되지 않은 파라미터가 있다면 SQLException이 발생)
  • SQL을 DB에 전송할 때는 executeUpdate() 메서드를 활용
    (INSERT, UPDATE, DELETE문 실행 시 사용)
            sta.set데이터타입(1, 값);
            sta.set데이터타입(2, 값);
            sta.set데이터타입(3, 값);
            sta.set데이터타입(4, 값);

            int count = sta.executeUpdate();
            System.out.println(count + "건 데이터 처리 성공");

5단계 : 연결 해제

  • JDBC 프로그램이 종료되면 DB에 사용했던 모든 객체의 연결을 close 한다.
  • 연결 해제 작업은 예외가 발생하도 실행하는 finally 블록에 작성한다.
finally {
            try {
                sta.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }

            try {
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

최종코드

  • 위 5단계를 따라 가면 최종코드 형태가 나온다.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class 클래스이름 {
public static void main(String[] args) {

    try {

        DriverManager.registerDriver(new 드라이버 이름());

        String jdbcUrl = "JDBC URL 입력";
        Connection con = DriverManager.getConnection(jdbcUrl, "ID", "Password");

        String sql = "insert into 테이블이름 values(?, ?, ?, ?)";
        PreparedStatement sta = con.prepareStatement(sql);

        sta.set데이터타입(1, 값);
        sta.set데이터타입(2, 값);
        sta.set데이터타입(3, 값);
        sta.set데이터타입(4, 값);

        int count = sta.executeUpdate();
        System.out.println(count + "건 데이터 처리 성공!");
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {

        try {
            sta.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }

        try {
            con.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
}

'IT자료실 > Java' 카테고리의 다른 글

Java (Thread)  (0) 2022.04.26
Java (java.sql 패키지-2)  (0) 2022.04.22
Java (java.io 패키지)  (0) 2022.04.20
Java (인터페이스, 클래스 동시 상속 예제)  (0) 2022.04.19
Java (추상클래스, 템플릿 메서드 예제)  (0) 2022.04.16