PLOD

[JSP] JDBC 본문

개발 공부/Spring framework

[JSP] JDBC

훌룽이 2023. 3. 1. 12:05

DBMS 란

데이터 저장소로 가장 쉽게 생각할 수 있는 것이 파일이다. 그런데 파일은 누군가가 삭제 하거나 외부의 물리적 충격, 또는 컴퓨터의 버그로 인해 손상된다면 파일에 저장된 데이터를 사용할 수 없다. 따라서 안전하고 효과적으로 데이터를 저장하고 관리할 수 있는 무언가가 필요한데, 그게 바로 데이터베이스 관리시스템 (Database Management System, DBMS) 이다

 

JDBC 란

데이터베이스 연동은 모든 프로그램 언어가 제공해야 하는 필수 기능 중 하나다. 자바에서 데이터 베이스 연동을 지원하는 패키지는 java.sql 이며 이를 JDBC API 라고 한다.  JDBC(Java DataBase Connectivity)는 자바 프로그램에서 관계형 데이터베이스를 연동하기 위해 제공하는 표준 API이다 JDBC가 특정 데이터베이스에 종속되지 않는 데이터베이스 연동을 지원 할 수 있는 배경에는 JDBC  API가 인터페이스를 기반으로 다형성을 이용하기 때문이다. 개발자는 JDBC API (java.sql)가 제공하는 인터페이스를 이용하여 데이터베이스 연동 프로 그램 (application)을 개발한다. 따라서 JDBC API의 인터페이스가 수정되지 않는다면 데이터베이스 연동 프로그램도 수정할 이유는 없다.

 

JDBC API가 제공하는 인터페이스를 구현(implements)한 클래스를 JDBC 드라이버라고 한다. JDBC 드라이버는 jar 형태의 압축 파일로 제공되며, DBMS를 제공하는 회사의 홈페이지에서 다운로드할 수 있다. JDBC 드라이버는 특정 데이터베이스에 종속적인 코드들로 구성되어 있다. 따라서 JDBC 드라이버부터 데이터베이스까지는 DBMS에 종속적인 영역인 것이다.

 

결론은 우리가 JDBC API를 이용하여 데이터베이스 연동을 처리하면 데이터베이스가 변경 되더라도 JDBC 드라이버만 교체하면 프로그램의 수정 없이 데이터베이스를 변경할 수 있다.

 

 

DBMS는 보통 oracleDB나 mariaDB를 많이 사용하지만 무료이고 사용 방법과 설치 방법이 간단한 H2를 사용해서 JDBC를 구현해 보려고 한다.

h2w.bat 파일을 실행하면 H2 콘솔이 실행되고 '연결' 버튼을 통해 연결 할 수 있다.데이터베이스와 연결을 해제한 후에 다시 커넥션을 연결할 때는 JDBC URL을 다음과 같이 수정하도록 한다.

 

jdbc:h2:tcp://localhost/~/test

 

 

DBMS 관련 질의문들은 tistroy DB | SQL 부분에 잘 설명해놓았다. 원하는 테이블을 SQL 명령어를 입력하여 만들어보도록 하자. 

 

JDBC 프로그램

JDBC 프로그램에서 가장 기본이면서 중요한 작업은 데이터베이스 연결이다. JDBC 프로그램의 최종 목표는 자바 프로램에서 작성한 SQL 구문을 데이터베이스에 전송하여 데이터베이스가 해당 SQL을 처리하도록 하는 것이기 떄문이다.

 

 

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

JDBC 프로그램에서 가장 먼저 하는 작업은 드라이버 객체를 등록하는 것이다 드라이버 객체를 등록할 때는 java.sql.DriverManager 클래스와 registerDriver() 메소드를 사용한다. 

 

public class InsertUserTest {
public static void main(String[] args) {
	try {
// JDBC 1단계: 드라이버 객체 로딩
		DriverManager.registerDriver(new org.h2.Driver());
	} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

 

2단계: 커넥션 연결

드라이버 객체 로딩에 성공했으면 이제 H2 데이터베이스와 커넥션 (Connection)을 연결한다. select,insert,update,delete SQL 질의어를 String 자료형을 통해 담는다

public static void main(String[] args) {
// JDBC 관련 변수
	Connection conn = null;
	try {
	// JDBC 1단계: 드라이버 객체 로딩
	DriverManager.registerDriver(new org.h2.Driver());
	// JDBC 2단계: 커넥션 연결
	String jdbcUrl = "jdbc:h2:tcp://localhost/~/test";
	conn = DriverManager.getConnection(jdbcUrl, "", "");	// 첫번쨰 ""에 아이디 두번쨰 ""에 비밀번호 삽입
	if(conn != null) {
	}
	System.out.println("H2 연결 성공: " + conn.toString());
	} catch (SQLException e) {
			e.printStackTrace();
		} 
	} 
}

 

3단계: PreparedStatement 생성

Connection이 서울과 부산을 연결하는 고속도로에 해당한다면 이제 이 고속도로를 통해 사 람(SQL)을 부산으로 보내줄 자동차가 필요한데, 이 자동차가 바로 PreparedStatement.

	Connection conn = null;
P	reparedStatement stmt = null;
	try {	
	// JDBC 1단계: 드라이버 객체 로딩
	DriverManager.registerDriver(new org.h2.Driver());
	// JDBC 2단계: 커넥션 연결
	String jdbcUrl = "jdbc:h2:tcp://localhost/~/test";
	conn = DriverManager.getConnection(jdbcUrl, "", "");				// 첫번쨰 ""에 아이디 두번쨰 ""에 비밀번호 삽입
	// JDBC 3단계: Statement 생성
	String sql = "insert into users values(?, ?, ?, ?)";
	stmt = conn.prepareStatement(sql);
	if(stmt != null) {
	System.out.println("Statement 객체:"+ stmt.toString());
	}
	} catch (SQLException e) {
	e.printStackTrace();
}

4단계: SQL 전송

고속도로(Connection)와 자동차(PreparedStatement)를 만들었으니 이제 이 자동차를 이용하여 SQL 데이터베이스에 전송하면 된다. 그런데 문제는 아직 SQL이 완성되지 않았다는 것이다. SQL 데이터베이스에 전송하기 위해서는 다음과 같이 SQL에 있는 파라미터 (?)에 사용자가 입력한 값들을 채워야 한다.

// JDBC 4단계: SQL 전송
// ? 값 설정
stmt.setString(1, "ssamz");
stmt.setString(2, "ssamz123");
stmt.setString(3, "쌤즈");
stmt.setString(4, "ADMIN");
// SQL 전송
int count=stmt.executeUpdate();
System.out.println(count+"건 데이터 처리 성공 !");

SQL에 있는 파라미터(?)는 자동으로 SQL이 실행되는 순서대로 번호가 부여된다. 따라서 이 번호를 이용하여 각 파라미터에 적절한 값들을 설정할 수 있다.

파라미터에 값을 설정할 때는 반드시 컬럼의 데이터 타입을 확인해야 한다. 그래서 문자 타입은 setString(), 숫자 타입은 setInt(), 날짜 타입은 setDate() 메소드를 이용하여 타입에 맞게 데이터를 설정해야 한다. 만약 설정되지 않은 파라미터가 있다면 SQLException이 발생한다.

파라미터 값이 설정된 후에는 SQL 데이터베이스에 전송해야 하는데, 이때 Prepared StatementexecuteUpdate() 메소드를 사용한다. executeUpdate() 메소드는 INSERT, UPDATE, DELETE문을 실행할 때 사용하는 메소드다.

5단계: 연결 해제

JDBC 프로그램이 종료되면 데이터베이스 연동에 사용했던 모든 객체들의 연결을 종료(close)해야 한다. 특히 Connection의 경우는 데이터베이스로부터 생성할 수 있는 Connection의 수가 제한되어 있기 때문에 프로그램이 종료되기 직전에 반드시 데이터베이스와의 연결을 종료해야 한다.다음은 연결 해제까지 추가된 전체 소스다. 다음 소스를 작성할 때 주의할 점은 방금 실행했던 InsertUserTest.java로 인해 아이디가 'ssamz'인 회원 정보가 이미 USERS 테이블에 등록되어 있다는 것이다. 따라서 InsertUserTest.java 프로그램을 다시 실행하기 위해서는 아이디를 변경해야 한다.일반적으로 연결 해제 작업은 예외 발생과 무관하게 실행되는 finally 블록에 작성한다.

// JDBC 4단계: SQL 전송
// ? 값 설정
stmt.setString(1, "ssamz2");
stmt.setString(2, "ssamz123");
stmt.setString(3, "쌤즈");
stmt.setString(4, "ADMIN");
// SQL 전송
int count=stmt.executeUpdate();
    System.out.println(count+"건 데이터 처리 성공 !");
    } catch (SQLException e) {
    e.printStackTrace();
    } 
	finally {
	// JDBC 5단계: 연결 해제
        try {
        	stmt.close();
        	} catch (SQLException e){ 
        	e.printStackTrace();
        }
        try{
        	conn.close();
        	} catch (SQLException e) {
        e.printStackTrace();
	}

H2 설치)

 

www.h2database.com  

 

H2 Database Engine (redirect)

H2 Database Engine Welcome to H2, the free SQL database. The main feature of H2 are: It is free to use for everybody, source code is included Written in Java, but also available as native executable JDBC and (partial) ODBC API Embedded and client/server mo

www.h2database.com

 

'개발 공부 > Spring framework' 카테고리의 다른 글

[spring] spring MVC- (1.Model)  (0) 2023.03.23
[JSP] JSP , JSTL  (0) 2023.03.09
[JSP] XML과 Annotation  (0) 2023.02.28
[JSP] HTTP와 Servlet  (0) 2023.02.26
[Intellij] 단축키 모음  (0) 2022.08.09
Comments