Java 프로그래밍 언어와 광범위한 데이터베이스 간의 데이터베이스 독립적 연결을 위한 표준 Java API
JDBC 패키지 가져오기
: Java 프로그램에 import문을 추가하여 Java코드에서 필수 클래스를 가져온다.JDBC 드라이버 등록
: JVM이 원하는 드라이버 구현을 메모리에 로드하여 JDBC 요청을 수행할 수 있다.데이터베이스 URL 공식화
: 연결하려는 데이터베이스를 가리키는 적절한 형식의 주소를 생성한다.연결 개체 만들기
: DriverManager 개체의 getConnection() 메서드에 대한 호출을 코딩하여 실제 데이터베이스 연결을 설정한다.
DriverManager : 데이터 원본에 JDBC드라이버를 통해 연결하는 역할
Connection : 특정 데이터 원본과 연결된 커넥션을 나타내며 Statement객체를 생성할 때도 Connection객체를 사용하여 createStatement() 메소드를 호출하여 생성
(SQL 문장을 실행시키기 전에 우선 Connection 객체가 있어야 함)
Statement : Connection 객체에 의해 프로그램에 리턴되는 객체에 의해 구현되는 일종의 메소드 집합을 정의
PreparedStatement : Connection 객체의 prepareStatement() 메소드를 사용하여 객체 생성
(SQL문장이 미리 컴파일 되고 실행 시간 동안 인수 값을 위한 공간을 확보한다는 점에서 Statement와 다름.
각 인수에 대해 위치홀더(?)를 사용해 SQL 문장을 정의할 수 있게 함)
ResultSet : SELECT문을 사용한 질의 성공 시 ResultSet 반환
(SQL 질의에 의해 생성된 테이블을 담고 있으며 커서(cursor)로 특정 행에 대한 참조 조작)
CREATE TABLE TEST(
TNO NUMBER,
TNAME VARCHAR2(20),
TDATE DATE
);
테스트를 위해 간단하게 테이블을 생성합니다.
실행할 쿼리문 : INSER INTO TEST VALUES(100, '가가가가', SYSDATE);
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class TestRun {
public static void main(String[] args) {
int result = 0; // 결과(처리행 수)를 받아놓을 변수
Connection conn = null; // DB에 연결정보를 보관할 객체
Statement stmt = null;
String sql = "INSERT INTO TEST VALUES(1, '가가나', SYSDATE)";
// 1) Driver 등록
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
System.out.println("JDBC Driver 등록 성공");
// 2) Connection 객체 생성 : DB 연결 정보들 알려주기(url, 계정명, 비밀번호) - ip주소, port번호, xe(버전)
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "JDBC", "JDBC");
// 3) Statement 객체 생성
stmt = conn.createStatement();
// 4) SQL문에 실행할 쿼리문 담기 -> 5) 결과 받기
result = stmt.executeUpdate(sql); // 처리된 행의 수 반환. insert니까 executeUpdate
// 6) 트랜잭션 처리
if (result > 0) {
conn.commit();
}
else {
conn.rollback();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 7) 사용한 자원 반납 - 생성 역순
try {
stmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
SQL Developer에서 확인할 수 있다.
앞서 해본 예제는 쿼리문을 미리 작성해둔 것으로 삽입을 해보았다.
이번에는 삽입할 데이터를 직접 커맨드로 입력받는 방식의 예제이다.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
public class TestRun2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("입력받아서 DB에 INSERT하기");
System.out.print("TNO :");
String tno = sc.nextLine();
System.out.print("TNAME :");
String tname = sc.nextLine();
int result = 0; // 결과(처리행 수)를 받아놓을 변수
Connection conn = null; // DB에 연결정보를 보관할 객체
Statement stmt = null;
String sql = "INSERT INTO TEST VALUES("+tno+", '"+tname+"', SYSDATE)";
System.out.println("확인용 sql : "+sql);
// 1) Driver 등록
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
System.out.println("JDBC Driver 접속성공");
// 2) Connection 객체 생성 : DB 연결 정보들 알려주기(url, 계정명, 비밀번호) - ip주소, port번호, xe(버전)
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "JDBC", "JDBC");
// 3) Statement 객체 생성
stmt = conn.createStatement();
// 4) SQL문에 실행할 쿼리문 담기 -> 5) 결과 받기
result = stmt.executeUpdate(sql); // 처리된 행의 수 반환. insert니까 executeUpdate
// 6) 트랜잭션 처리
if (result > 0) {
conn.commit();
System.out.println("커밋");
}
else {
conn.rollback();
System.out.println("롤백");
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 7) 사용한 자원 반납 - 생성 역순
try {
stmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
INSERT 쿼리문을 작성할 때 주의할 점은 문자열을 넣을 때 꼭 ' 를 잘 넣어줘야 한다.