Database/SQL
[SQL] Java를 사용한 데이터베이스 응용프로그램의 개발 - JDBC
gangintheremark
2021. 12. 6. 06:04
728x90
JDBC
- JAVA 언어를 사용하여 응용프로그램을 개발하는 경우, 가장 널리 사용되는 표준적인 DBMS 인터페이스 방식
- DBMS에 접근하여 데이터를 사용하기 위한 Java API 제공
💡 기능
- DBMS 서버에 접속
- SQL 문을 전송
- 전달된 결과를 처리
💡 종류
🎀 Type 1: JDBC-ODBC 브리지와 ODBC 드라이버 사용
🎀 Type 2: Native-APi (클라이언트 라이브러리) + Java JDBC 드라이버
🎀 Type 3: 순수 Java JDBC 드라이버 + 서버 라이브러리
🎀 Type 4: 순수 Java JDBC 드라이버
- Type1, Type2는 드라이버 외 부가적인 라이브러리 사용
- Type3, Type4는 드라이버 외 부가적인 라이버러리 사용 X
- Type3은 여러 DBMS에 접근 가능
- Type4는 하나의 DBMS에만 접근 가능 (네트워크 프로토콜은 DBMS 별로 다름)
💡 구조
Connect
: 드라이버 등록, 데이터베이스 연결Query
: Statement 생성, 데이터베이스에Statement
전달Process Results
: 결과 집합을 전달받음, 결과를 읽음Close
: 결과집합 닫음,Statement
닫음, 연결 닫음
[Connect]
- 드라이버 인스턴스 로드
Class.forName(DriverName);
- 여러개의 드라이버 로드 가능
- 로드된 드라이버들은
DriverManager
가 관리 - DriverManager가 JDBC URL에 해당하는 JDBC 드라이버를 연결
- 데이터베이스 서버와 접속된
Connection 객체
를 돌려줌
Connection connection = DriverManager.getConnection(CONNECTION\_URL, DB\_ID, DB\_PASSWORD);
[Query]
- Connection 객체로부터
Statement 객체
를 생성
Statement statement = connection.createStatement();
- Statement 객체를 통해 SQL문 실행
executeQuery
메서드 :SELECT
문을 실행(검색),ResultSet 객체
로 반환executeUpdate
메서드 :INSERT
,UPDATE
,DELETE
, 또는DDL문
실행(갱신), 갱신된 레코드 개수 반환execute()
메서드 : 검색 또는 갱신 모두 사용
ResultSet rs = statement.executeQuery(
"select \* from STUDENT where DEPT = '컴퓨터' ");
또는
int rc = statement.executeUpdate(
"delete from STUDENT where SNO = 100");
[Process Results]
executeQuery
메서드의 실행결과는ResultSet객체
로 전달ResultSet
내의 레코드들은next
메서드를 이용하여 커서 이동- 레코드 내의 컬럼 값을 읽는 함수 :
getString()
,getInt()
...
ResultSet rs = statement.executeQuery(
"select \* from STUDENT where DEPT = '컴퓨터' ");
while(rs.next()) {
int no = rs.getInt("SNO");
String name = rs.getString("sname");
System.out.format("학번: %d 이름 : %s\\n" no, name);
}
[Close]
- 사용이 끝난
Statement
,ResultSet
,Connection
객체는 close를 호출하여 더이상 사용하지 않음을 알림.
rs.close();
statement.close();
connection.close();
PreparedStatement
- SQL문을 한번만 컴파일해서 여러번 사용 가능
- 인자를 사용하여 SQL 내의 값 변경 가능
- Statment는 실행 효율 및 보안 측면에서 좋지 않음
PreparedStatement pstmt = conn.prepareStatement(
"update STUDENT set DEPT = ? where SNO = ?" )
pstmt.setString(1, "IT"); // 첫 번째 물음표에는 IT
pstmt.setInt(2, 300); // 두 번째 물음표에는 300
psmt.executeUPdate();
트랜잭션의 저장
- Connection 객체는 디폴트로
AutoCommit
모드 → 각각의 SQL문이 하나의 트랜잭션으로 동작 - 여러 개의 SQL문을 묶어서 하나의 트랜잭션으로 구성하려면
AutoCommit
을 False로 해야함
con.setAutocommit(false);
728x90