JAVA_JDBC (Java DataBase Connection)

JW__1.7·2022년 9월 14일
0

JAVA 공부일지

목록 보기
30/30

JDBC (Java DataBase Connection)

  • 사용할 클래스

    • OracleDriver : 오라클(DB벤더)에서 제공한다. ojdbc6.jar
      C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib

      • 경로 : C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib에서 ojdbc6.jar를 복사해서
      • 클래스 : oracle.jdbc.OracleDriver
      • 프로젝트의 Build Path - class path에 ojdbc6.jar 라이브러리를 등록해야 한다.
    • 이후 클래스는 모두 자바에서 제공

    • 공통 패키지 : java.sql 제공

    • DriverManager : DB접속(connection) 생성

      • url : DB주소 (로컬에 설치한 DB - localhost 또는 127.0.0.1)
      • user : 사용자 (스키마)
      • password : 비밀번호
    • Connection : DB접속

    • PreparedStatement : 쿼리문 실행

    • ResultSet : SELECT문 실행 결과


SQL Injection

  • 특정 쿼리문을 삽입하여 원하는 정보를 탈취하는 방법
  • 로그인 상황
    • SELECT * FROM 회원 WHERE 아이디 = 변수1 AND 비밀번호 = 변수2
    • "SELECT * FROM 회원 WHERE 아이디 =" + id + " AND 비밀번호 = '" + pw + "'"
    • 변수
      • id : min
      • pw : ' OR 1=1 --'
    • 쿼리에 변수 값 대입
      • SELECT * FROM 회원 WHERE 아이디 = 'min' AND 비밀번호 = " OR 1=1 --'

SQL Injection 방지

  • PreparedStatement를 사용하면 된다.

PreparedStatement 로그인 상황

  • "SELECT * FROM 회원 WHERE 아이디 = ? AND 비밀번호 = ?"
  • 변수
    • id : min
    • pw : ' OR 1=1 --'
  • SELECT * FROM 회원 WHERE 아이디 = 'min' AND 비밀번호 = ' OR 1=1 --'

INSERT, UPDATE, DELETE

  • JDBC 코드가 동일하다. (실행이 executeUpdate() 메소드)
  • Auto Commit이기 때문에 코드로 commit을 할 필요가 없다.

SELECT

  • 실행이 executeQuery() 메소드를 이용
  • 실행 결과는 ResultSet 객체이다.
  • ResultSet 객체는 테이블을 행(Row) 단위로 스캔하고 가져올 수 있는 객체이다.
  • next() 메소드를 이용해서 행(Row) 단위로 스캔한다.

DTO

  • DTO (Data Transfer Object), 데이터 전송 객체
  • DB로 전송할 데이터는 하나로 모아서 처리, 클래스를 이용해 객체로 만들어서 전달하는 형태

DAO

  • DAO (Data Access Object), 데이터베이스 접근 객체
  • 쿼리문을 실행하는 모든 메소드를 처리하는 클래스, Singleton 패턴으로 하나의 객체만 존재할 수 있도록 처리
  • DB저장소를 처리하는 영역으로 레파지토리(Repository) 패키지로 처리

Properties 파일

  • 각종 설정(DB 설정)을 저장하는 텍스트 파일
  • 확장자가 *.properties
  • 프로퍼티 = 값 형식으로 내용을 채워준다.
  • 최근에는 Properties 파일 대신 YAML(.yaml, .yml) 파일을 자주 사용
  • 민감한 정보들은 Properties 파일에 작성하고 gitignore로 github에 올리지 않아야 한다.

db.properties

  • 민감 정보는 별도의 파일로 보관하고 gitignore를 통해서 github에 안올려야 한다.
  • DB접속정보를 db.properties 파일에 보관

gitignore 사용순서

  1. .gitignore 파일에 db.properties 작성 후 저장 (로컬레파지토리 변경)
  2. push (원격레파지토리 변경)
  3. db.properties 파일 생성
  • url = 주소
  • user = 사용자
  • password = 비밀번호

0개의 댓글