java jdbc connection tutorial with programming example
이 JDBC 연결 자습서에서는 예제와 함께 데이터베이스에 대한 기본 단계를 설명하고 다양한 데이터베이스에 대한 JDBC 연결 문자열을 제공합니다.
최고의 C ++ 인터뷰 질문
의 이전 자습서에서 JDBC 튜토리얼 시리즈 , 우리는 Java Database Connectivity (JDBC)의 구성 요소, 아키텍처 및 드라이버 유형을 배웠습니다.
이 튜토리얼에서는 JDBC를 사용하여 데이터베이스에 연결하는 단계에 대해 설명합니다. 이 튜토리얼은 JDBC 연결 및 데이터베이스 작업 수행 방법을 보여줍니다. JDBC API는 Java 프로그램과 데이터베이스 간의 인터페이스 역할을합니다.
이 튜토리얼이 끝나면 데이터베이스에 연결하고 DB 작업을 수행하는 Java 프로그램을 작성할 수 있습니다.
학습 내용 :
JDBC 연결 단계
JDBC와 연결하기위한 6 가지 기본 단계가 있습니다. 그들은 아래 이미지에 등록되어 있습니다.
# 1) 패키지 가져 오기
먼저 Java 프로그램에서 사용하려면 기존 패키지를 가져와야합니다. 가져 오기는 프로그램에서 JDBC API 클래스를 사용할 수 있는지 확인합니다. 그런 다음 패키지의 클래스와 하위 클래스를 사용할 수 있습니다.
JDBC 드라이버에 관계없이 Java 프로그램에 다음 import 문을 추가합니다.
import java.sql.*;
프로그램에서 사용할 기능에 따라 다른 클래스를 가져옵니다. 프로그램에서 사용할 데이터베이스에 적합한 Jar 파일을 다운로드하십시오.
참조 이전 튜토리얼 데이터베이스에 대한 Jar 파일을 다운로드하기위한 링크.
JDBC API 4.0은 주로 두 가지 중요한 패키지를 제공합니다.
- java.sql
- javax.sql
(i) java.sql 패키지
이 패키지는 SQL 쿼리 생성 및 실행과 같은 대부분의 JDBC 기능을 수행하는 클래스와 인터페이스를 제공합니다.
클래스 / 인터페이스 | 기술 |
---|---|
DriverManager | 일련의 JDBC 드라이버를 관리하기위한 기본 서비스를 제공합니다. |
얼룩 | Java 프로그램에서 SQL Blob 값을 나타냅니다. |
CallableStatement | SQL 저장 프로 시저를 실행하는 데 사용됩니다. |
CLOB | Java 프로그램에서 SQL Clob 값을 나타냅니다. |
연결 | 특정 데이터베이스와 연결 (세션)을 생성합니다. |
데이트 | 날짜 SQL 유형에 대한 지원을 제공합니다. |
운전사 | 드라이버 관리자를 사용하여 드라이버 인스턴스를 생성합니다. |
ParameterMetaData | PreparedStatement 객체에서 각 매개 변수의 유형 및 속성에 대한 정보를 가져 오는 데 사용할 수있는 객체입니다. |
PreparedStatement | Java 프로그램에서 매개 변수화 된 쿼리를 생성하고 실행하는 데 사용됩니다. |
ResultSet | 행 단위로 결과에 액세스하는 데 사용됩니다. |
ResultSetMetaData | ResultSet 객체에있는 열의 유형 및 속성에 대한 정보를 가져 오는 데 사용됩니다. |
RowId | SQL ROWID 값을 나타냅니다. |
세이브 포인트 | 트랜잭션의 저장 점을 나타냅니다. |
SQLData | SQL UDT (사용자 정의 유형)를 Java 프로그램의 클래스에 매핑하는 데 사용됩니다. |
SQLXML | SQL XML 유형을 나타냅니다. |
성명서 | 정적 SQL 문을 실행하는 데 사용됩니다. |
DriverPropertyInfo | 연결을위한 드라이버 속성을 제공합니다. |
SQLException | 데이터베이스 오류에 대한 정보를 제공합니다. |
SQLTimeoutException | 명령문에 지정된 제한 시간이 만료되었을 때 throw되는 SQLException의 하위 클래스입니다. |
SQLWarning | 데이터베이스 액세스 경고에 대한 정보를 제공하는 예외입니다. |
구조 | SQL 구조화 유형에 대한 Java 프로그램의 표준 매핑입니다. |
(ii) javax.sql 패키지
JDBC 확장 API이며 Java 프로그램에서 서버 측 데이터 액세스 및 처리를 제공합니다.
클래스 / 인터페이스 | 기술 |
---|---|
ConnectionEvent | 연결 관련 이벤트 발생에 대한 정보를 제공합니다. |
CommonDataSource | DataSource, XADataSource 및 ConnectionPoolDataSource간에 공통적 인 메소드를 정의하는 인터페이스입니다. |
ConnectionPoolDataSource | PooledConnection 객체를위한 팩토리입니다. |
데이터 소스 | 객체가 나타내는 물리적 DataSource에 대한 연결을위한 팩토리입니다. |
PooledConnection | Connection Pool 관리에 사용됩니다. |
RowSet | Java Bean 구성 요소 모델 용 JDBC API에 대한 지원을 제공합니다. |
RowSetMetadata | RowSet 개체의 열에 대한 정보가 있습니다. |
ConnectionEventListener | PooledConnection 객체 이벤트를 등록하는 데 사용됩니다. |
RowSetEvent | Rowset 객체에 이벤트가 발생할 때 생성됩니다. |
StatementEvent | 생성 된 PooledConnection에 등록 된 모든 StatementEventListeners로 전송됩니다. |
# 2) 드라이버로드
먼저 데이터베이스에 연결하기 전에 프로그램에서 드라이버를로드 / 등록해야합니다. 프로그램에서 데이터베이스 당 한 번만 등록하면됩니다.
다음 두 가지 방법으로 드라이버를로드 할 수 있습니다.
- Class.forName ()
- DriverManager.registerDriver ()
(i) Class.forName ()
이러한 방식으로 드라이버의 클래스 파일은 런타임에 메모리로로드됩니다. 암시 적으로 드라이버를로드합니다. 로드하는 동안 드라이버는 JDBC에 자동으로 등록됩니다.
DB 이름 | JDBC 드라이버 이름 |
---|---|
Sybase | com.sybase.jdbcSybDriver |
MySQL | com.mysql.jdbc.Driver |
신탁 | oracle.jdbc.driver.OracleDriver |
마이크로 소프트 SQL 서버 | com.microsoft.sqlserver.jdbc.SQLServerDriver |
MS 액세스 | net.ucanaccess.jdbc.UcanaccessDriver |
PostgreSQL | org.postgresql.Driver |
IBM DB2 | com.ibm.db2.jdbc.net.DB2Driver |
TeraData | com.teradata.jdbc.TeraDriver |
노트 : forName () 메서드는 JDK 호환 가상 머신에만 유효합니다.
(ii) DriverManager.registerDriver ()
DriverManager는 java.sql 패키지에서 사용할 수있는 내장 클래스입니다. 연결하려는 Java 애플리케이션과 데이터베이스 간의 중개자 역할을합니다. 데이터베이스에 연결하기 전에 DriverManager에 드라이버를 등록해야합니다. DriverManager의 주요 기능은 Database의 드라이버 클래스를로드하고 DB와의 연결을 생성하는 것입니다.
Public static void registerDriver (드라이버) –이 방법은 드라이버 관리자에 드라이버를 등록합니다. 드라이버가 이미 등록되어 있으면 아무런 조치도 취하지 않습니다.
- 던질 것이다 SQLException 데이터베이스 오류가 발생하는 경우.
- 던질 것이다 NullPointerException 드라이버가 null 인 경우.
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()) DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver())
이와 같이 드라이버를 매개 변수로 전달하여 데이터베이스에 대한 드라이버를 등록 할 수 있습니다.
# 3) 연결 설정
드라이버를로드 한 후 다음 단계는 연결을 만들고 설정하는 것입니다. 필요한 경우 패키지를 가져오고 드라이버를로드하고 등록한 다음 데이터베이스 연결을 설정할 수 있습니다.
DriverManager 클래스에는 getConnection 메소드가 있으며이 메소드를 사용하여 Database와의 연결을 가져옵니다. getConnection () 메소드를 호출하려면 3 개의 매개 변수를 전달해야합니다. 3 개의 매개 변수는 문자열 데이터 유형 URL, 사용자 이름 및 데이터베이스에 액세스하기위한 비밀번호입니다.
getConnection () 메서드는 오버로드 된 메서드입니다. 두 가지 방법은 다음과 같습니다.
- getConnection (URL, 사용자 이름, 암호); – 3 개의 매개 변수 URL, 사용자 이름, 비밀번호가 있습니다.
- getConnection (URL); – 하나의 매개 변수 만 있습니다. URL에는 사용자 이름과 비밀번호도 있습니다.
다음 표에는 다양한 데이터베이스에 대한 JDBC 연결 문자열이 나열되어 있습니다.
데이터 베이스 | 연결 문자열 / DB URL |
---|---|
Sybase | jdbc : Sybase : Tds : HOSTNAME : PORT / DATABASE_NAME |
MySQL | jdbc : mysql : // HOST_NAME : PORT / DATABASE_NAME |
신탁 | jdbc : oracle : thin : @HOST_NAME : PORT : SERVICE_NAME |
마이크로 소프트 SQL 서버 | jdbc : sqlserver : // HOST_NAME : PORT; DatabaseName = |
MS 액세스 | jdbc : ucanaccess : // DATABASE_PATH |
PostgreSQL | jdbc : postgresql : // HOST_NAME : PORT / DATABASE_NAME |
IBM DB2 | jdbc : db2 : // HOSTNAME : PORT / DATABASE_NAME |
TeraData | jdbc : teradata : // HOSTNAME / database =, tmode = ANSI, charset = UTF8 |
예:
Connection con = DriverManager.getConnection(jdbc:oracle:thin:@localhost:1521:xe,System,Pass123@)
이 예에서는
- 얇은 드라이버 유형을 나타냅니다.
- localhost Oracle 데이터베이스가 실행되는 곳입니다.
- 1521 년 DB에 연결할 포트 번호입니다.
- 차량 – SID
- 체계 – Oracle 데이터베이스에 연결할 사용자 이름입니다.
- Pass123 @ – 비밀번호
# 4) 문 생성 및 실행
연결이 설정되면 연결된 데이터베이스와 상호 작용할 수 있습니다. 먼저 SQL 쿼리를 수행하기위한 문을 생성 한 다음 문을 실행해야합니다.
(i) 문 생성
이제 연결된 데이터베이스로 쿼리를 실행하는 문 개체를 생성합니다. 우리는 createStatement 메소드를 사용합니다. 연결 클래스를 사용하여 쿼리를 만듭니다.
java.sql 패키지에는 3 개의 명령문 인터페이스가 있습니다. 아래에 설명되어 있습니다.
a) 진술
이 인터페이스는 매개 변수없이 간단한 SQL 문을 구현하는 데 사용됩니다. ResultSet 객체를 반환합니다.
Statement statemnt1 = conn.createStatement();
b) PreparedStatement
이 PreparedStatement 인터페이스는 Statement 인터페이스를 확장합니다. 따라서 Statement 인터페이스보다 더 많은 기능이 있습니다. 매개 변수화되고 사전 컴파일 된 SQL 문을 구현하는 데 사용됩니다. 쿼리를 한 번만 컴파일하므로 응용 프로그램의 성능이 향상됩니다.
이 인터페이스를 새 매개 변수로 쉽게 재사용 할 수 있습니다. IN 매개 변수를 지원합니다. 매개 변수없이이 문을 사용할 수도 있습니다.
String select_query = “Select * from states where state_id = 1”; PreparedStatement prpstmt = conn.prepareStatement(select_query);
c) CallableStatement
CallableStatement 인터페이스는 PreparedStatement 인터페이스를 확장합니다. 따라서 PreparedStatement 인터페이스보다 더 많은 기능이 있습니다. 데이터베이스에서 프로 시저 또는 함수를 호출하는 매개 변수화 된 SQL 문을 구현하는 데 사용됩니다. 저장 프로시 저는 클래스의 메서드 또는 함수처럼 작동합니다. IN 및 OUT 매개 변수를 지원합니다.
CallableStatement 인스턴스는 Connection 개체의 prepareCall 메서드를 호출하여 생성됩니다.
CallableStatementcallStmt = con.prepareCall('{call procedures(?,?)}');
(ii) 쿼리 실행
Statement 인터페이스에서 쿼리를 실행하기위한 4 가지 중요한 방법이 있습니다. 아래에 설명되어 있습니다.
- ResultSet executeQuery (문자열 SQL)
- int executeUpdate (문자열 SQL)
- 부울 실행 (문자열 SQL)
- int () executeBatch ()
a) ResultSet executeQuery (String sql)
Statement 인터페이스의 executeQuery () 메소드는 SQL 쿼리를 실행하고 DB에서 값을 검색하는 데 사용됩니다. ResultSet 객체를 반환합니다. 일반적으로 SELECT 쿼리에이 방법을 사용합니다.
b) executeUpdate (문자열 SQL)
executeUpdate () 메서드는 INSERT, UPDATE, DELETE (DML 문) 또는 아무것도 반환하지 않는 DDL 문과 같은 값 지정 쿼리를 실행하는 데 사용됩니다. 대부분 삽입 및 업데이트에이 방법을 사용합니다.
c) 실행 (문자열 SQL)
execute () 메서드는 SQL 쿼리를 실행하는 데 사용됩니다. 그것은 반환 진실 SELECT 쿼리를 실행하는 경우. 그리고 그릇된 INSERT 또는 UPDATE 쿼리를 실행하는 경우.
d) executeBatch ()
이 메서드는 데이터베이스에 대한 SQL 쿼리 일괄 처리를 실행하는 데 사용되며 모든 쿼리가 성공적으로 실행되면 업데이트 수의 배열을 반환합니다. 이 방법을 사용하여 대량의 레코드를 삽입 / 업데이트합니다.
# 5) 결과 검색
executeQuery () 메서드를 사용하여 쿼리를 실행하면 결과가 ResultSet 객체에 저장됩니다. 리턴 된 ResultSet 오브젝트는 테이블에 일치하는 레코드가없는 경우에도 널이 아닙니다. ResultSet 오브젝트는 데이터베이스에서 검색된 데이터에 액세스하는 데 사용됩니다.
ResultSet rs 1= statemnt1.executeQuery(QUERY));
SELECT 쿼리에 executeQuery () 메서드를 사용할 수 있습니다. 누군가 삽입 / 업데이트 쿼리를 실행하려고하면 ''메시지와 함께 SQLExecption이 발생합니다. 업데이트에 executeQuery 메소드를 사용할 수 없습니다. ”.
ResultSet 개체는 결과 집합의 현재 행을 가리 킵니다. ResultSet 객체의 데이터를 반복하려면 while 루프에서 next () 메서드를 호출합니다. 읽을 레코드가 더 이상 없으면 FALSE를 반환합니다.
ResultSet를 사용하여 DB의 데이터를 업데이트 할 수도 있습니다. getInt (), getString (), getDate ()와 같은 getter 메소드를 사용하여 ResultSet에서 데이터를 가져올 수 있습니다. Getter 메서드를 사용하여 값을 가져 오려면 열 인덱스 또는 열 이름을 매개 변수로 전달해야합니다.
다음 튜토리얼에서 ResultSet에 대해 더 많이 알게 될 것입니다.
# 6) 연결 닫기
마지막으로 DB에서 데이터 조작을 마쳤습니다. 이제 JDBC 연결을 닫을 수 있습니다. 리소스를 사용한 후 닫았는지 확인해야합니다. 제대로 닫지 않으면 연결이 끊어 질 수 있습니다.
연결 개체를 닫으면 Statement 및 ResultSet 개체가 자동으로 닫힙니다.
conn.close();
Java 7부터는 try-catch 블록을 사용하여 JDBC 연결을 자동으로 닫을 수 있습니다. JDBC 연결은 try 블록의 괄호 안에 열려 있어야합니다. try 블록 내에서 우리가하는 것처럼 데이터베이스 연결을 정상적으로 수행 할 수 있습니다.
허용 기준이있는 사용자 스토리 예
실행이 try 블록을 종료하면 자동으로 연결이 종료됩니다. 이 경우 Java 프로그램에서 conn.close 메소드를 호출하여 연결을 종료 할 필요가 없습니다.
try(Connection conn = DriverManager.getConnection(url, user, password)) { //database connection and operation }
Java JDBC 연결 예
이 예제에서는 Java 프로그램에서 JDBC를 사용하여 데이터베이스에 연결하는 6 가지 기본 단계를 구현하는 방법을 보여줍니다.
테이블 생성
그 전에 먼저 하나의 테이블을 만들고 여기에 항목을 추가하십시오.
아래는 테이블을 생성하는 SQL 쿼리입니다.
create table employee_details (empNum number(10), lastName varchar(50), firstName varchar(50), email varchar(255) , deptNum number(10), salary number(10));
Oracle DB에 'employee_details'테이블을 생성했습니다.
테이블에 데이터 삽입
다음 쿼리를 사용하여 'employee_details'테이블에 데이터를 삽입합니다.
insert into employee_details values (1001, 'Luther', 'Martin', 'ml@gmail.com', 1, 13000); insert into employee_details values (1002, 'Murray', 'Keith', 'km@gmail.com', 2, 25000); insert into employee_details values (1003, 'Branson', 'John', 'jb@gmail.com', 3, 15000); insert into employee_details values (1004, 'Martin', 'Richard', 'rm@gmail.com', 4, 16000); insert into employee_details values (1005, 'Hickman', 'David', 'dh@gmail.com', 5, 17000);
자바 프로그램
JDBC jar 파일을 다운로드하고 Java 프로젝트로 가져옵니다.
package com.STH.JDBC; // import sql package to use it in our program import java.sql.*; public class Sample_JDBC_Program { public static void main(String() args) throws ClassNotFoundException, SQLException { // store the SQL statement in a string String QUERY = 'select * from employee_details'; //register the oracle driver with DriverManager Class.forName('oracle.jdbc.driver.OracleDriver'); //Here we have used Java 8 so opening the connection in try statement try(Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE')) { Statement statemnt1 = conn.createStatement(); //Created statement and execute it ResultSet rs1 = statemnt1.executeQuery(QUERY); { //Get the values of the record using while loop while(rs1.next()) { int empNum = rs1.getInt('empNum'); String lastName = rs1.getString('lastName'); String firstName = rs1.getString('firstName'); String email = rs1.getString('email'); String deptNum = rs1.getString('deptNum'); String salary = rs1.getString('salary'); //store the values which are retrieved using ResultSet and print it System.out.println(empNum + ',' +lastName+ ',' +firstName+ ',' +email +','+deptNum +',' +salary); } } } catch (SQLException e) { //If exception occurs catch it and exit the program e.printStackTrace(); } } }
산출:
주목해야 할 핵심 사항 :
- 먼저 JDBC 연결을 위해 Java 프로그램에서 사용할 패키지를 가져와야합니다. 따라서 패키지에서 클래스, 하위 클래스 및 인터페이스를 사용할 수 있습니다.
- 연결을 설정하기 전에 DriverManager에 드라이버를 등록하거나로드해야합니다.
- 드라이버를 등록한 후 연결을 설정하고 작업을 수행 할 수 있습니다.
- 명령문 인터페이스를 사용하여 SQL 쿼리를 생성하고 실행할 수 있습니다. 간단한 SQL 쿼리의 경우 Statement 인터페이스를 사용할 수 있습니다. 삽입 / 업데이트 / 삭제를 위해 PreparedStatement 인터페이스를 사용할 수 있습니다.
- 명령문 실행 후 결과는 ResultSet 객체에 저장됩니다. 둘 이상의 레코드에 대해 next () 메소드를 사용하여 ResultSet 객체에서 결과를 얻습니다.
- 데이터베이스 작업이 끝나면 연결을 닫아야합니다. 다른 사람들이 리소스를 사용할 수 있도록합니다.
자주 묻는 질문
Q # 1) Java에서 DB에 연결하는 기본 단계는 무엇입니까?
대답: Java에서 DB에 연결하는 6 가지 기본 단계가 있습니다.
그들은:
- 가져 오기 패키지
- 드라이버로드
- 연결 설정
- 문 생성 및 실행
- 결과 검색
- 연결 닫기
Q # 2) JDBC에서 BLOB와 CLOB 데이터 유형의 차이점은 무엇입니까?
대답:
얼룩 바이너리 유형의 데이터를 보유하는 데 사용됩니다. 저장소 크기는 데이터베이스에 따라 다를 수 있습니다. 예: 이미지, 음성, 비디오.
CLOB 데이터의 문자 유형을 보유하는 데 사용됩니다. CLOB와 마찬가지로 저장 공간은 DB에 따라 다를 수 있습니다. 예: 파일.
Q # 3) DB와의 연결을 위해 DriverManager 클래스 중 어떤 방법을 사용하나요?
대답: DriverManager 클래스에는 DB와의 연결을 설정하는 데 사용되는 getConnection () 메서드가 있습니다.
Q # 4) Class.forName ()과 DriverManager.registerDriver ()의 차이점은 무엇입니까?
대답: Class.forName () - 먼저 드라이버를 메모리에로드 한 다음 드라이버 관리자에 적절한 드라이버를 등록합니다. 그런 다음 JDBC 연결을 수행하기 위해 드라이버의 개체를 만듭니다. 드라이버를 명시 적으로로드합니다.
DriverManager.registerDriver () – 암시 적으로 드라이버를 등록합니다.
Q # 5) 연결 누수 란 무엇인가요?
대답: 이 상황은 연결이 열려 있고 닫지 않은 경우에 발생합니다. 연결을 열고 연결을 닫지 않는 코드 블록이있는 경우 해당 코드 블록이 실행될 때마다 연결 풀에서 연결이 누출됩니다.
사용 가능한 모든 연결이 유출되면 연결을 사용할 수 없으며 응용 프로그램이 중단됩니다. 연결을 여는 것이 얼마나 중요한지 연결을 닫는 것이 중요합니다.
Q # 6) 연결 종료는 필수인가요?
대답: 7 미만의 Java 버전을 사용하는 경우 수동으로 연결을 종료해야합니다.
Java 7 이상의 버전에서는 try 블록의 괄호 안에있는 JDBC 연결 코드를 열어 자동으로 연결을 닫을 수 있습니다. 프로그램이 try 블록을 종료하면 자동으로 연결이 종료됩니다.
결론
이 자습서에서는 JDBC 연결을 설정하는 방법에 대해 설명했습니다. 이제 Java 프로그램에서 JDBC를 사용하여 DB 작업을 수행 할 수 있습니다. 데이터베이스와 연결하기위한 6 가지 기본 단계를 살펴 보았습니다. 사용하려면 Java 프로그램에서 패키지를 가져와야합니다.
드라이버를 등록하면 연결을 설정할 수 있습니다. Statement 인터페이스를 사용하여 SQL 문을 생성 및 실행하고 ResultSet 객체에서 결과를 검색 할 수 있습니다. 마지막 단계로 연결을 종료해야합니다.
추천 도서
- Java JDBC 자습서 : JDBC 란 무엇입니까 (Java 데이터베이스 연결)
- 예제가 포함 된 Java 인터페이스 및 추상 클래스 자습서
- 예제를 사용한 Java JDBC 트랜잭션 관리
- JDBC DriverManager, JDBC PreparedStatement 및 문
- JDBC ResultSet : Java ResultSet을 사용하여 데이터를 검색하는 방법
- 초보자를위한 JAVA 튜토리얼 : 100 개 이상의 실습 Java 비디오 튜토리얼
- Java 프로그래밍 언어 소개-비디오 자습서
- Selenium 데이터베이스 테스트 (WebDriver 및 JDBC API 사용)