Java DataBase Connectivity
📌 1. 개요
JDBC는 웹 환경이건 아니건 어떤 환경에서건 자바언어를 사용하는 경우에 DBMS 종류에 상관없이 데이터베이스에 접근할 수 있는 독립적인 프로그래밍 API이다.
📌 2. 특징
- 벤더에서 제공해준 클래스 파일 (드라이버 Driver) 가 필요하다.
압축파일(jar)로 제공한다. (압축풀면 안됨)
RDBMS의 버전마다 다르다.
C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib
실습 > ojdbc6_g.jar

- java.sql 패키지 사용 ==> 무조건 import 해야함
- 비런타임 계열이기 때문에 무조건 예외처리 (try~catch, throws)가 필수이다.
📌 3. DB연동 순서 ★
① 이클립스에서 프로젝트 생성
② 오라클 드라이버( ojdbc6_g.jar ) 를 현재 생성한 이클립스 프로젝트에 알려줘야 된다.
==> 빌드패스 ( build path) 라고 부른다.





==> 오라클과 연동할 수 있는 환경설정 완료됨 !
③ 클래스 작성
④ 오라클 DB 연동하기 위한 4가지 정보를 문자열로 저장한다.

String driver="oracle.jdbc.driver.OracleDriver";
ㅡ> ojdbc6_g.jar 파일들 중에서 가장 핵심되는 클래스명을 지정한다.
String url="jdbc:oracle:thin:@localhost:1521:xe";
ㅡ> 관리자에서 show parameter db_name; 명령어로 서비스명(DB명) 확인한다.
ㅡ> 오라클 접속정보를 저장한다.
String userid="SCOTT";
ㅡ> 계정명
String passwd="TIGER";
ㅡ> 비밀번호
⑤ 드라이버 로딩 (OracleDriver 클래스 객체 생성 = OracleDriver 클래스를 메모리에 로딩하는 작업)
==> new 사용 안하고 Class.forName (문자열);
Class.forName( driver );
try {
Class.forName(driver);
} catch(ClassNotFoundException e) {
System.out.println(e.getMessage());
// e.printStackTrace();
}
⑥ Connection 맺기
자바코드와 오라클 데이터베이스를 연결하는 것을 의미한다.
연결은 java.sql 패키지의 Connection을 사용한다.
DriverManager 클래스를 이용해서 Connection을 구한다.
==> java.sql.Connection ( new 불가! 왜? Connection은 인터페이스 )
Connection con = DriverManager.getConnection(url, userid, passwd); // 다형성
// 다형성
// 인터페이스명 변수 = 하위클래스;
// 예외처리 추가한 코드
Connection con = null;
try{
con = DriverManager.getConnection(url, userid, passwd);
}catch(SQLException e) {
}
⑥ SQL 문 작성
==> 주의할 점은 마지막에 ; 사용안됨
deptno 테이블의 데이터를 검색하기 위한 SQL 문
String sql = "select deptno as no, dname, loc from dept";
⑦ PreparedStatement 생성
요청할 SQL 문을 전송 담당하는 객체
==> java.sql.PreparedStatement ( new 불가! 왜? PreparedStatement은 인터페이스 )
==> try~catch 필수
==> Connection을 사용해서 PreparedStatement을 생성한다.
==> Connection의 preparedStatement() 메서드를 이용해서 PreparedStatement를 생성할 수 있다.
try{
PreparedStatement pstmt = con.prepareStatement(sql);
}catch()
⑧ SQL문 전송하기
- select 문 전송
==> SELECT 요청은 executeQuery 메서드를 사용한다.
ResultSet rs = pstmt.executeQuery(); // try~catch 필수
테이블 결과를 자바의 객체로 표현한 것이 ResultSet 객체이다.
ResultSet 객체는 포인터를 이용해서 원하는 데이터를 얻을 수 있다.
먼저 포인터를 이용해 레코드를 선택하고
나중에 포인터가 가리키는 레코드의 컬럼을 지정해서 데이터를 얻는다.
레코드를 선택하는 메서드는 next() 메서드
컬럼은 데이터형에 따라서 getInt("컬럼명|별칭|위치값")
getString("컬럼명|별칭|위치값")
ㅡ> 결과가 테이블로 반환된다.
ㅡ> ResultSet 이 실제 select한 결과값을 참조한다.
while(rs.next()){ // 행 선택
// 컬럼 선택 : rs.getInt(컬럼헤더값|순서), rs.getString(컬럼헤더값|순서)
...
} - DML (insert/delete/update) 문 전송
==> DML 요청은 executeUpdate 메서드를 사용한다.
ㅡ> 결과가 정수로 반환 ( 정수값: DML 적용된 레코드 갯수 )
ResultSet rs = pstmt.executeQuery(); // try~catch 필수
int num = pstmt.executeUpdate(); // try~catch 필수
결과값인 ResultSet에서 데이터를 얻는 방법
while( rs.next()){
int deptno = rs.getInt("deptno");
String dname = rs.getString("dname");
String loc = rs.getString("loc");
System.out.println( deptno +“ ” + dname + " " +loc );
}
- 결과값의 레코드가 여러 개 있을 수 있기 때문에 while 문을 사용
- next() 메서드는 레코드가 있는 경우에는 true 값을, 없으면 false 값을 리턴
⑨ 사용했던 API ( Connection, PreparedStatement, ResultSet ) close
- 역순으로 close ㅡ> close() 메서드 사용
- finally 문 처리
=> try~catch 문 필수
- null 오류가 나면 안되기 때문에 if절 입력
if( rs !=null) rs.close(); // ResultSet을 사용한 경우
if( stmt !=null) stmt.close();
if( con !=null) con.close();
출력문
SELECT
package jdbcStudy;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class SelectTest {
public static void main(String[] args) {
// 1. 오라클 데이터베이스 연동을 위한 4가지 정보를 문자열에 저장
String driver="oracle.jdbc.driver.OracleDriver";
String url="jdbc:oracle:thin:@localhost:1521:xe";
String userid="SCOTT";
String passwd="TIGER";
//2. 드라이버 로딩
try {
Class.forName(driver);
} catch(ClassNotFoundException e) {
//System.out.println(e.getMessage());
e.printStackTrace();
}
//3. Connection ( 오라클과 자바 연결 )
Connection con = null; // finally 쓰기 위해 블록 밖에서 작성
PreparedStatement pstmt = null;
ResultSet rs = null;
try{
con = DriverManager.getConnection(url, userid, passwd);
String sql = "select deptno as no, dname, loc from dept";
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery();
while(rs.next()) {
int deptno = rs.getInt("no"); // getInt(1) 가능
String dname = rs.getString("dname");
String loc = rs.getString("loc");
System.out.println(deptno+"\t"+dname+"\t"+loc);
}
}catch(SQLException e) {
e.printStackTrace();
}finally {
try {
//역순
if(rs != null)rs.close();
if(pstmt != null)pstmt.close();
if(con != null)con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}//end main
}
INSERT
package jdbcStudy;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class InsertTest {
public static void main(String[] args) {
// 1. 오라클 데이터베이스 연동을 위한 4가지 정보를 문자열에 저장
String driver="oracle.jdbc.driver.OracleDriver";
String url="jdbc:oracle:thin:@localhost:1521:xe";
String userid="SCOTT";
String passwd="TIGER";
//2. 드라이버 로딩
try {
Class.forName(driver);
} catch(ClassNotFoundException e) {
//System.out.println(e.getMessage());
e.printStackTrace();
}
//3. Connection ( 오라클과 자바 연결 )
Connection con = null; // finally 쓰기 위해 블록 밖에서 작성
PreparedStatement pstmt = null;
try{
con = DriverManager.getConnection(url, userid, passwd);
String sql = "insert into dept ( deptno, dname, loc) "
+ " values( ?, ?, ? )"; // ?는 바인딩 변수로서 나중에 값을 설정한다.
pstmt = con.prepareStatement(sql); // ★
// ? 대신에 값 설정하기
/*
* pstmt.setXXX(?의위치, 값)
*
*/
pstmt.setInt(1, 12); // 첫번째 물음표는 deptno라서 정수 : Int
pstmt.setString(2, "개발");
pstmt.setString(3, "서울");
int num = pstmt.executeUpdate();
System.out.println("레코드 생성 갯수:" + num);
}catch(SQLException e) {
e.printStackTrace();
}finally {
try {
//역순
if(pstmt != null)pstmt.close();
if(con != null)con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}//end main
}
UPDATE
package jdbcStudy;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class UpdateTest {
public static void main(String[] args) {
// 1. 오라클 데이터베이스 연동을 위한 4가지 정보를 문자열에 저장
String driver="oracle.jdbc.driver.OracleDriver";
String url="jdbc:oracle:thin:@localhost:1521:xe";
String userid="SCOTT";
String passwd="TIGER";
//2. 드라이버 로딩
try {
Class.forName(driver);
} catch(ClassNotFoundException e) {
//System.out.println(e.getMessage());
e.printStackTrace();
}
//3. Connection ( 오라클과 자바 연결 )
Connection con = null; // finally 쓰기 위해 블록 밖에서 작성
PreparedStatement pstmt = null;
try{
con = DriverManager.getConnection(url, userid, passwd);
String sql = "update dept set dname=?, loc=? where deptno=?";
// ?는 바인딩 변수로서 나중에 값을 설정한다.
pstmt = con.prepareStatement(sql);
// ? 대신에 값 설정하기
/*
* pstmt.setXXX(?의위치, 값)
*
*/
pstmt.setInt(3, 12); // deptno 값은 중복되지 않도록 확인할것.
pstmt.setString(1, "개발부");
pstmt.setString(2, "서울시");
int num = pstmt.executeUpdate();
System.out.println("레코드 수정 갯수:" + num);
}catch(SQLException e) {
e.printStackTrace();
}finally {
try {
//역순
if(pstmt != null)pstmt.close();
if(con != null)con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}//end main
}
DELETE
package jdbcStudy;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DeleteTest {
public static void main(String[] args) {
// 1. 오라클 데이터베이스 연동을 위한 4가지 정보를 문자열에 저장
String driver="oracle.jdbc.driver.OracleDriver";
String url="jdbc:oracle:thin:@localhost:1521:xe";
String userid="SCOTT";
String passwd="TIGER";
//2. 드라이버 로딩
try {
Class.forName(driver);
} catch(ClassNotFoundException e) {
//System.out.println(e.getMessage());
e.printStackTrace();
}
//3. Connection ( 오라클과 자바 연결 )
Connection con = null; // finally 쓰기 위해 블록 밖에서 작성
PreparedStatement pstmt = null;
try{
con = DriverManager.getConnection(url, userid, passwd);
String sql = "delete from dept where deptno=?";
// ?는 바인딩 변수로서 나중에 값을 설정한다.
pstmt = con.prepareStatement(sql);
// ? 대신에 값 설정하기
/*
* pstmt.setXXX(?의위치, 값)
*
*/
pstmt.setInt(1, 12); // deptno 값은 중복되지 않도록 확인할것.
int num = pstmt.executeUpdate();
System.out.println("레코드 삭제 갯수:" + num);
}catch(SQLException e) {
e.printStackTrace();
}finally {
try {
//역순
if(pstmt != null)pstmt.close();
if(con != null)con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}//end main
}
- JDBC의 DML 작업은 자동커밋된다.
- 자동커밋을 트랜잭션 이슈 때문에 비활성화 가능
- 명시적으로 커밋하도록 변경 가능

'DB > MyBatis' 카테고리의 다른 글
Mybatis - 조건문 (0) | 2023.08.07 |
---|---|
Mybatis - Dynamic SQL (0) | 2023.08.07 |
Mybatis - 환경설정 및 SELECT 예제 (0) | 2023.08.04 |
트랜잭션(Transaction) 처리 (0) | 2023.08.03 |
DAO(Data Access Object) Pattern (0) | 2023.08.02 |
Java DataBase Connectivity
📌 1. 개요
JDBC는 웹 환경이건 아니건 어떤 환경에서건 자바언어를 사용하는 경우에 DBMS 종류에 상관없이 데이터베이스에 접근할 수 있는 독립적인 프로그래밍 API이다.
📌 2. 특징
- 벤더에서 제공해준 클래스 파일 (드라이버 Driver) 가 필요하다.
압축파일(jar)로 제공한다. (압축풀면 안됨)
RDBMS의 버전마다 다르다.
C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib
실습 > ojdbc6_g.jar

- java.sql 패키지 사용 ==> 무조건 import 해야함
- 비런타임 계열이기 때문에 무조건 예외처리 (try~catch, throws)가 필수이다.
📌 3. DB연동 순서 ★
① 이클립스에서 프로젝트 생성
② 오라클 드라이버( ojdbc6_g.jar ) 를 현재 생성한 이클립스 프로젝트에 알려줘야 된다.
==> 빌드패스 ( build path) 라고 부른다.





==> 오라클과 연동할 수 있는 환경설정 완료됨 !
③ 클래스 작성
④ 오라클 DB 연동하기 위한 4가지 정보를 문자열로 저장한다.

String driver="oracle.jdbc.driver.OracleDriver";
ㅡ> ojdbc6_g.jar 파일들 중에서 가장 핵심되는 클래스명을 지정한다.
String url="jdbc:oracle:thin:@localhost:1521:xe";
ㅡ> 관리자에서 show parameter db_name; 명령어로 서비스명(DB명) 확인한다.
ㅡ> 오라클 접속정보를 저장한다.
String userid="SCOTT";
ㅡ> 계정명
String passwd="TIGER";
ㅡ> 비밀번호
⑤ 드라이버 로딩 (OracleDriver 클래스 객체 생성 = OracleDriver 클래스를 메모리에 로딩하는 작업)
==> new 사용 안하고 Class.forName (문자열);
Class.forName( driver );
try {
Class.forName(driver);
} catch(ClassNotFoundException e) {
System.out.println(e.getMessage());
// e.printStackTrace();
}
⑥ Connection 맺기
자바코드와 오라클 데이터베이스를 연결하는 것을 의미한다.
연결은 java.sql 패키지의 Connection을 사용한다.
DriverManager 클래스를 이용해서 Connection을 구한다.
==> java.sql.Connection ( new 불가! 왜? Connection은 인터페이스 )
Connection con = DriverManager.getConnection(url, userid, passwd); // 다형성
// 다형성
// 인터페이스명 변수 = 하위클래스;
// 예외처리 추가한 코드
Connection con = null;
try{
con = DriverManager.getConnection(url, userid, passwd);
}catch(SQLException e) {
}
⑥ SQL 문 작성
==> 주의할 점은 마지막에 ; 사용안됨
deptno 테이블의 데이터를 검색하기 위한 SQL 문
String sql = "select deptno as no, dname, loc from dept";
⑦ PreparedStatement 생성
요청할 SQL 문을 전송 담당하는 객체
==> java.sql.PreparedStatement ( new 불가! 왜? PreparedStatement은 인터페이스 )
==> try~catch 필수
==> Connection을 사용해서 PreparedStatement을 생성한다.
==> Connection의 preparedStatement() 메서드를 이용해서 PreparedStatement를 생성할 수 있다.
try{
PreparedStatement pstmt = con.prepareStatement(sql);
}catch()
⑧ SQL문 전송하기
- select 문 전송
==> SELECT 요청은 executeQuery 메서드를 사용한다.
ResultSet rs = pstmt.executeQuery(); // try~catch 필수
테이블 결과를 자바의 객체로 표현한 것이 ResultSet 객체이다.
ResultSet 객체는 포인터를 이용해서 원하는 데이터를 얻을 수 있다.
먼저 포인터를 이용해 레코드를 선택하고
나중에 포인터가 가리키는 레코드의 컬럼을 지정해서 데이터를 얻는다.
레코드를 선택하는 메서드는 next() 메서드
컬럼은 데이터형에 따라서 getInt("컬럼명|별칭|위치값")
getString("컬럼명|별칭|위치값")
ㅡ> 결과가 테이블로 반환된다.
ㅡ> ResultSet 이 실제 select한 결과값을 참조한다.
while(rs.next()){ // 행 선택
// 컬럼 선택 : rs.getInt(컬럼헤더값|순서), rs.getString(컬럼헤더값|순서)
...
} - DML (insert/delete/update) 문 전송
==> DML 요청은 executeUpdate 메서드를 사용한다.
ㅡ> 결과가 정수로 반환 ( 정수값: DML 적용된 레코드 갯수 )
ResultSet rs = pstmt.executeQuery(); // try~catch 필수
int num = pstmt.executeUpdate(); // try~catch 필수
결과값인 ResultSet에서 데이터를 얻는 방법
while( rs.next()){
int deptno = rs.getInt("deptno");
String dname = rs.getString("dname");
String loc = rs.getString("loc");
System.out.println( deptno +“ ” + dname + " " +loc );
}
- 결과값의 레코드가 여러 개 있을 수 있기 때문에 while 문을 사용
- next() 메서드는 레코드가 있는 경우에는 true 값을, 없으면 false 값을 리턴
⑨ 사용했던 API ( Connection, PreparedStatement, ResultSet ) close
- 역순으로 close ㅡ> close() 메서드 사용
- finally 문 처리
=> try~catch 문 필수
- null 오류가 나면 안되기 때문에 if절 입력
if( rs !=null) rs.close(); // ResultSet을 사용한 경우
if( stmt !=null) stmt.close();
if( con !=null) con.close();
출력문
SELECT
package jdbcStudy;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class SelectTest {
public static void main(String[] args) {
// 1. 오라클 데이터베이스 연동을 위한 4가지 정보를 문자열에 저장
String driver="oracle.jdbc.driver.OracleDriver";
String url="jdbc:oracle:thin:@localhost:1521:xe";
String userid="SCOTT";
String passwd="TIGER";
//2. 드라이버 로딩
try {
Class.forName(driver);
} catch(ClassNotFoundException e) {
//System.out.println(e.getMessage());
e.printStackTrace();
}
//3. Connection ( 오라클과 자바 연결 )
Connection con = null; // finally 쓰기 위해 블록 밖에서 작성
PreparedStatement pstmt = null;
ResultSet rs = null;
try{
con = DriverManager.getConnection(url, userid, passwd);
String sql = "select deptno as no, dname, loc from dept";
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery();
while(rs.next()) {
int deptno = rs.getInt("no"); // getInt(1) 가능
String dname = rs.getString("dname");
String loc = rs.getString("loc");
System.out.println(deptno+"\t"+dname+"\t"+loc);
}
}catch(SQLException e) {
e.printStackTrace();
}finally {
try {
//역순
if(rs != null)rs.close();
if(pstmt != null)pstmt.close();
if(con != null)con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}//end main
}
INSERT
package jdbcStudy;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class InsertTest {
public static void main(String[] args) {
// 1. 오라클 데이터베이스 연동을 위한 4가지 정보를 문자열에 저장
String driver="oracle.jdbc.driver.OracleDriver";
String url="jdbc:oracle:thin:@localhost:1521:xe";
String userid="SCOTT";
String passwd="TIGER";
//2. 드라이버 로딩
try {
Class.forName(driver);
} catch(ClassNotFoundException e) {
//System.out.println(e.getMessage());
e.printStackTrace();
}
//3. Connection ( 오라클과 자바 연결 )
Connection con = null; // finally 쓰기 위해 블록 밖에서 작성
PreparedStatement pstmt = null;
try{
con = DriverManager.getConnection(url, userid, passwd);
String sql = "insert into dept ( deptno, dname, loc) "
+ " values( ?, ?, ? )"; // ?는 바인딩 변수로서 나중에 값을 설정한다.
pstmt = con.prepareStatement(sql); // ★
// ? 대신에 값 설정하기
/*
* pstmt.setXXX(?의위치, 값)
*
*/
pstmt.setInt(1, 12); // 첫번째 물음표는 deptno라서 정수 : Int
pstmt.setString(2, "개발");
pstmt.setString(3, "서울");
int num = pstmt.executeUpdate();
System.out.println("레코드 생성 갯수:" + num);
}catch(SQLException e) {
e.printStackTrace();
}finally {
try {
//역순
if(pstmt != null)pstmt.close();
if(con != null)con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}//end main
}
UPDATE
package jdbcStudy;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class UpdateTest {
public static void main(String[] args) {
// 1. 오라클 데이터베이스 연동을 위한 4가지 정보를 문자열에 저장
String driver="oracle.jdbc.driver.OracleDriver";
String url="jdbc:oracle:thin:@localhost:1521:xe";
String userid="SCOTT";
String passwd="TIGER";
//2. 드라이버 로딩
try {
Class.forName(driver);
} catch(ClassNotFoundException e) {
//System.out.println(e.getMessage());
e.printStackTrace();
}
//3. Connection ( 오라클과 자바 연결 )
Connection con = null; // finally 쓰기 위해 블록 밖에서 작성
PreparedStatement pstmt = null;
try{
con = DriverManager.getConnection(url, userid, passwd);
String sql = "update dept set dname=?, loc=? where deptno=?";
// ?는 바인딩 변수로서 나중에 값을 설정한다.
pstmt = con.prepareStatement(sql);
// ? 대신에 값 설정하기
/*
* pstmt.setXXX(?의위치, 값)
*
*/
pstmt.setInt(3, 12); // deptno 값은 중복되지 않도록 확인할것.
pstmt.setString(1, "개발부");
pstmt.setString(2, "서울시");
int num = pstmt.executeUpdate();
System.out.println("레코드 수정 갯수:" + num);
}catch(SQLException e) {
e.printStackTrace();
}finally {
try {
//역순
if(pstmt != null)pstmt.close();
if(con != null)con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}//end main
}
DELETE
package jdbcStudy;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DeleteTest {
public static void main(String[] args) {
// 1. 오라클 데이터베이스 연동을 위한 4가지 정보를 문자열에 저장
String driver="oracle.jdbc.driver.OracleDriver";
String url="jdbc:oracle:thin:@localhost:1521:xe";
String userid="SCOTT";
String passwd="TIGER";
//2. 드라이버 로딩
try {
Class.forName(driver);
} catch(ClassNotFoundException e) {
//System.out.println(e.getMessage());
e.printStackTrace();
}
//3. Connection ( 오라클과 자바 연결 )
Connection con = null; // finally 쓰기 위해 블록 밖에서 작성
PreparedStatement pstmt = null;
try{
con = DriverManager.getConnection(url, userid, passwd);
String sql = "delete from dept where deptno=?";
// ?는 바인딩 변수로서 나중에 값을 설정한다.
pstmt = con.prepareStatement(sql);
// ? 대신에 값 설정하기
/*
* pstmt.setXXX(?의위치, 값)
*
*/
pstmt.setInt(1, 12); // deptno 값은 중복되지 않도록 확인할것.
int num = pstmt.executeUpdate();
System.out.println("레코드 삭제 갯수:" + num);
}catch(SQLException e) {
e.printStackTrace();
}finally {
try {
//역순
if(pstmt != null)pstmt.close();
if(con != null)con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}//end main
}
- JDBC의 DML 작업은 자동커밋된다.
- 자동커밋을 트랜잭션 이슈 때문에 비활성화 가능
- 명시적으로 커밋하도록 변경 가능

'DB > MyBatis' 카테고리의 다른 글
Mybatis - 조건문 (0) | 2023.08.07 |
---|---|
Mybatis - Dynamic SQL (0) | 2023.08.07 |
Mybatis - 환경설정 및 SELECT 예제 (0) | 2023.08.04 |
트랜잭션(Transaction) 처리 (0) | 2023.08.03 |
DAO(Data Access Object) Pattern (0) | 2023.08.02 |