JAVA - JDBC

Luna·2022년 12월 26일
0

JAVA

목록 보기
16/32

Java에서 데이터 저장하기

  • Java에서 데이터를 저장하는 방식은 임시로 저장하는 방법과 영구적으로 저장하는 방법 두가지가 있다. 임시로 저장하는 방법은 변수나 상수에 저장을 하는 방법이고, 영구적으로 저장하는 방법은 로컬 저장과 원격 저장이 있다.
  • 로컬에 저장하는 방법은 파일로 저장하면 되고 원격으로 저장하려면 데이터베이스에 저장 하면 된다.
  • java 프로그램이 데이터베이스에 접근하려면 client가 server에 접근하기 위한 4가지가 필요하다.
    -> ip, port, id/pw, 데이터베이스 구조(ERD)

JDBC 프로그래밍

  • JDBC란?
    : 자바 언어로 다양한 종류의 관계형 데이터베이스에 접속하고 SQL문을 수행하여 처리하고자 할 때 사용되는 표준 SQL 인터페이스 API이다. 접속하려는 DBMS 서버에 따라 JDBC 드라이버가 필요하다.
  • DBMS와 통신하려면 JDBC 드라이버가 필요하다
    : 라이브러리 ~.jar 파일.

JDBC 구현하기

1. Connection - 접속

1-1. 드라이버 로딩

준비된 JDBC 드라이버 파일을 사용 할 수 있도록 메모리에 로딩해야 한다.

Class.forName("oracle.jdbc.driver.OracleDriver");

JDBC 드라이버를 메모리에 동적으로 로딩하기 위해서 Class.forName()을 이용한다. 메서드의 인자값으로는 JDBC 드라이버 파일 안에서 드라이버 인터페이스를 상속하고 있는 클래스 이름을 패키지 이름과 함께 정확하게 명시 해 주어야 한다.

Class.forName()에 의해 JDBC 드라이버 파일의 드라이버 인터페이스를 상속한 클래스가 동적으로 로딩될 때 자동으로 JDBC 드라이버 인스턴스가 생성되어 준비가 완료된다.

1-2. 드라이버 연결

JDBC의 드라이버 사용 준비가 완료되면 첫 번째 DB 작업으로 DB서버와의 연결 작업을 한다. 이 작업은 java.sql패키지의 DriverManager 클래스의 getConnection() 메서드를 이용한다.

Connection con = null;
con = DriverManager.getConnection
("jdbc:oracle:thin:@localhost:1521:xe", "java", "java");

DriverManager.getConnection()은 실제 자바 프로그램과 데이터베이스를 네트워크 상에서 연결해주는 메서드이며 연결에 성공하면 DB와 연결된 상태를 Connection 객체로 표현하여 반환한다.

2. PreparedStatement

위에서 만든 Connection으로 자바 프로그램과 DB사이에 연결이 되었다면 이 연결을 통해 자바프로그램은 DB쪽으로 SQL문을 전송하고, DB는 처리된 결과를 다시 자바프로그램 쪽으로 전달 해야 한다. 바로 이 역할을 하는 객체가 PreparedStatment이다.

PreparedStatement는 객체를 '?'가 포함된 SQL문으로 생성하고, 이후에 '?'자리만 바꿔가며 데이터베이스를 처리한다.

2-1. 객체 생성

PreparedStatement 의 객체생성은 Connection 객체가 제공하는 preparedStatement() 메서드를 사용하고 인자값이 필요하다. preparedStatement()는 말 그대로 '준비된 상태'이므로 준비 상태인 '?'가 들어간 String 타입의 SQL문이 인자값이 되어야 한다.

String sql = "select no, title, content, writer, writeDate, hit from board where no = ?";
pstmt = con.prepareStatement(sql);

2-2. SQL문 실행

PreparedStatement 객체를 이용해 DB서벌 SQL문을 전송하고 처리 결과를 받아 올 것이다. SQL문을 실행하기 위해 객체에서 제공되는 메서드는 다음과 같다.

ResultSet executeQuery(String sql)

executeQuery() 메서드가 반환하는 ResultSetselect한 결과값을 가지고 있다.

int executeUpdate(String sql)

-> executeUpdate() 메서드가 반환하는 숫자값은 SQL문 실행(insert, update, delete) 후 영향을 받은 레코드의 개수이다. ex) 1행이 등록/수정/삭제 되었습니다.

PreparedStatement 객체 SQL 문은 실행은 인자값이 필요하지 않다. 인자값을 넣음면 두 번 실행하는 꼴이 된다.

PreparedStatement pstmt = null;
ResultSet rs = pstmt.excuteQuery()
PreparedStatement pstmt = null;
int result  = pstmt.excuteUpdate()

2-3. ResultSet

ResultSetexecuteQuery() 메서드에서 실행된 SELECT문의 결과값을 가지고 있는 객체이다.

참조

0개의 댓글