JDBC :: Oracle :: 데이터 삽입

김병철·2022년 9월 15일
0

JDBC

목록 보기
1/1

JDBC

Java Data Base Connectivity

Java 프로그래밍 언어와 광범위한 데이터베이스 간의 데이터베이스 독립적 연결을 위한 표준 Java API

JDBC 연결

  1. JDBC 패키지 가져오기
    : Java 프로그램에 import문을 추가하여 Java코드에서 필수 클래스를 가져온다.

  2. JDBC 드라이버 등록
    : JVM이 원하는 드라이버 구현을 메모리에 로드하여 JDBC 요청을 수행할 수 있다.

  3. 데이터베이스 URL 공식화
    : 연결하려는 데이터베이스를 가리키는 적절한 형식의 주소를 생성한다.

  4. 연결 개체 만들기
    : DriverManager 개체의 getConnection() 메서드에 대한 호출을 코딩하여 실제 데이터베이스 연결을 설정한다.

JDBC 사용 객체

  • DriverManager : 데이터 원본에 JDBC드라이버를 통해 연결하는 역할

    • Class.forName() 메소드를 통해 생성되며 반드시 예외처리를 해야 함
    • Connection 객체 생성 시에도 직접 객체 생성이 불가능
    • DriverManager 클래스의 getConnection() 메소드를 사용하여 객체 생성
  • Connection : 특정 데이터 원본과 연결된 커넥션을 나타내며 Statement객체를 생성할 때도 Connection객체를 사용하여 createStatement() 메소드를 호출하여 생성
    (SQL 문장을 실행시키기 전에 우선 Connection 객체가 있어야 함)

  • Statement : Connection 객체에 의해 프로그램에 리턴되는 객체에 의해 구현되는 일종의 메소드 집합을 정의

    • Connection 클래스의 createStatement() 메소드를 호출하여 얻어지며 생성된 Statement객체로 질의문장을 String객체에 담아 인자로 전달하여 executeQuery() 메소드를 호출하여 SQL 질의 수행
  • PreparedStatement : Connection 객체의 prepareStatement() 메소드를 사용하여 객체 생성
    (SQL문장이 미리 컴파일 되고 실행 시간 동안 인수 값을 위한 공간을 확보한다는 점에서 Statement와 다름.
    각 인수에 대해 위치홀더(?)를 사용해 SQL 문장을 정의할 수 있게 함)

  • ResultSet : SELECT문을 사용한 질의 성공 시 ResultSet 반환
    (SQL 질의에 의해 생성된 테이블을 담고 있으며 커서(cursor)로 특정 행에 대한 참조 조작)

# Oracle 테이블 생성

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 쿼리문을 작성할 때 주의할 점은 문자열을 넣을 때 꼭 ' 를 잘 넣어줘야 한다.

# References

profile
keep going on~

0개의 댓글