JDBC (Java Database Connectivity) API는 Java 애플리케이션이 관계형 데이터베이스와 상호 작용하는 표준 방법을 제공합니다. SQL 문을 실행하고 데이터를 검색하며 데이터베이스 연결을 관리 할 수 있습니다. 다음은 프로세스의 고장입니다.
Class.forName("driverClassName");
여기서 driverClassName
은 데이터베이스 드라이버 클래스 (예 : com.mysql.cj.jdbc.Driver
for MySQL)의 자격을 갖춘 이름입니다.DriverManager.getConnection(url, username, password);
. url
데이터베이스 위치 (예 : jdbc:mysql://localhost:3306/mydatabase
)를 지정하고 username
데이터베이스 사용자 이름이며 password
데이터베이스 비밀번호입니다. 명세서 작성 : 연결을 설정 한 후 SQL 쿼리를 실행하기 위해 Statement
개체를 만듭니다. 세 가지 유형의 Statement
개체가 있습니다.
Statement
: 간단한 SQL 문.PreparedStatement
: 매개 변수화 된 SQL 문의 경우 SQL 주입 취약성을 방지하고 성능 향상.CallableStatement
: 저장된 절차를 실행합니다.executeQuery()
메소드를 SELECT
executeQuery ( ResultSet
반환), INSERT
, UPDATE
및 DELETE
에 대해 executeUpdate()
(영향을받는 행 수를 반환) 또는 일반 문의 경우 execute()
사용합니다.ResultSet
객체는 SELECT
쿼리의 결과를 보유합니다. next()
, getString()
, getInt()
등과 같은 메소드를 사용하여 ResultSet
반복하여 개별 데이터 값에 액세스 할 수 있습니다.finally
블록을 사용하여 데이터베이스 리소스를 릴리스하고 리소스 누출을 방지하는 모든 리소스 (연결, 문, 결과 세트)를 닫는 것이 중요합니다. 순서는 일반적으로 ResultSet
, Statement
, 그런 다음 Connection
.예제 (mysql) :
<code class="java">import java.sql.*; public class JDBCExample { public static void main(String[] args) { try { Class.forName("com.mysql.cj.jdbc.Driver"); Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password"); Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery("SELECT * FROM mytable"); while (resultSet.next()) { System.out.println(resultSet.getString("column1") ", " resultSet.getInt("column2")); } resultSet.close(); statement.close(); connection.close(); } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } } }</code>
JDBC는 데이터베이스 상호 작용 중에 다양한 예외를합니다. 효과적인 예외 처리는 강력한 응용 프로그램에 중요합니다. 몇 가지 일반적인 예외와 처리 방법은 다음과 같습니다.
SQLException
: 이것은 모든 JDBC 예외의 기본 클래스입니다. 종종 문제를 진단하는 데 도움이되는 세부 오류 메시지와 SQLState 코드를 제공합니다. 항상 SQLException
과 서브 클래스를 잡습니다.ClassNotFoundException
: JDBC 드라이버 클래스를 찾을 수 없을 때 발생했습니다. 드라이버 항아리가 클래스 경로에 있는지 확인하여 이것을 처리하십시오.SQLIntegrityConstraintViolationException
: 제약 조건 위반이 발생할 때 발생합니다 (예 : 중복 기본 키를 삽입하려고합니다).SQLTimeoutException
: 쿼리가 지정된 시간 초과보다 오래 걸릴 때 던졌습니다. Connection.setNetworkTimeout()
메소드를 사용하여 타임 아웃을 설정할 수 있습니다.DataTruncation
: 데이터가 삽입되는 데이터가 데이터베이스 열에 비해 너무 커질 때 던졌습니다.효과적인 취급 :
예외를 처리하려면 Try-Catch-Finally 블록을 사용하십시오. catch
블록에서 디버깅을 위해 예외 세부 정보 (메시지, SQLState, Error Code)를 기록하십시오. 네트워크 문제와 같은 과도 오류에 대한 작업 (적절한 백 오프 포함)을 재조정하는 것을 고려하십시오. 회복 불가능한 오류의 경우 실패를 우아하게 처리하고 사용자에게 알리십시오.
<code class="java">try { // JDBC code here } catch (SQLException e) { if (e instanceof SQLIntegrityConstraintViolationException) { // Handle duplicate key System.err.println("Duplicate key error: " e.getMessage()); } else if (e instanceof SQLTimeoutException) { // Handle timeout System.err.println("Query timed out: " e.getMessage()); } else { // Log other SQLExceptions e.printStackTrace(); } } catch (ClassNotFoundException e) { System.err.println("JDBC driver not found: " e.getMessage()); } finally { // Close resources here }</code>
JDBC 성능을 최적화하면 몇 가지 전략이 필요합니다.
PreparedStatement
사용 : 준비된 명령문은 성능을 크게 향상시킵니다. 특히 다양한 매개 변수로 여러 번 실행되는 쿼리의 경우 성능이 크게 향상됩니다. 데이터베이스에 의해 사전 컴파일되어 구문 분석 오버 헤드가 줄어 듭니다.INSERT
, UPDATE
또는 DELETE
작업의 경우 배치 업데이트 ( Statement.addBatch()
, Statement.executeBatch()
)를 사용하여 네트워크 라운드 트립을 줄입니다.SELECT *
피하고 효율적인 조인을 사용하십시오. 데이터베이스 도구를 사용하여 쿼리 실행 계획을 분석하여 병목 현상을 식별합니다.ResultSet.getFetchSize()
사용하여 한 번에 가져온 행 수를 제어하십시오. 데이터를 통해 앞뒤로 탐색 해야하는 경우 스크롤 가능한 결과 세트 사용을 고려하십시오.무단 액세스 및 데이터 유출을 방지하려면 데이터베이스 연결 보안이 중요합니다. 모범 사례는 다음과 같습니다.
PreparedStatement
)를 사용하십시오.이러한 모범 사례를 따르면 JDBC 데이터베이스 상호 작용의 보안을 크게 향상시킬 수 있습니다. 보안은 지속적인 프로세스이며 지속적인 모니터링 및 개선이 필요합니다.
위 내용은 Java의 JDBC API를 사용하여 데이터베이스와 상호 작용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!