Java 데이터베이스 연결

Java Database Connectivity
JDBC
개발자오라클 코퍼레이션
안정된 릴리스
JDBC 4.3 / 2017년 9월 21일 (2017-09-21)
운영 체제크로스 플랫폼
유형데이터 액세스 API
웹 사이트JDBC API 가이드

Java Database Connectivity(JDBC)는 프로그래밍 언어 Java용 Application Programming Interface(API; 응용 프로그램프로그래밍 인터페이스)로 클라이언트가 데이터베이스에 액세스하는 방법을 정의합니다.Java 데이터베이스 연결에 사용되는 Java 기반 데이터 액세스 기술입니다.Oracle Corporation의 Java Standard Edition 플랫폼의 일부입니다.데이터베이스의 데이터를 조회하고 업데이트하는 방법을 제공하며 관계형 데이터베이스를 지향합니다.JDBC와 ODBC 간 브릿지를 사용하면 Java Virtual Machine(JVM) 호스트 환경에서 ODBC에 액세스할 수 있는 모든 데이터 소스에 연결할 수 있습니다.

이력 및 구현

Sun Microsystems는 JDBC를 Java Development Kit(JDK) 1.1의 일부로 1997년 [1]2월 19일에 출시했습니다.이후 Java Platform Standard Edition(Java SE)의 일부가 되었습니다.

JDBC 클래스는 Java 패키지에 포함되어 있습니다. java.sql그리고.javax.sql.

버전 3.1 이후 JDBC는 Java Community Process에 따라 개발되었습니다.JSR 54는 JDBC 3.0(J2SE 1.4에 포함), JSR 114는 JDBC Rowset 추가, JSR 221은 JDBC 4.0(Java SE [2]6에 포함)의 사양입니다.

JDBC 4.1은 JSR 221의[3] 유지 보수릴리즈 1에 의해 지정되어 Java SE [4]7에 포함되어 있습니다.

JDBC 4.2는 JSR 221의[5] 유지 보수릴리즈 2에 의해 지정되어 Java SE [6]8에 포함되어 있습니다.

최신 버전인 JDBC 4.3은 JSR 221의[7] 유지 보수릴리즈 3에 의해 지정되어 Java SE [8]9에 포함되어 있습니다.

기능

JDBC('Java Database Connectivity')를 사용하면 여러 구현이 존재하며 동일한 애플리케이션에서 사용할 수 있습니다.API는 올바른 Java 패키지를 동적으로 로드하여 JDBC 드라이버 매니저에 등록하는 메커니즘을 제공합니다.드라이버 매니저는, JDBC 접속을 작성하기 위한 접속 팩토리로 사용됩니다.

JDBC 접속은 문의 작성 및 실행을 지원합니다.SQL의 CREATE, INSERT, UPDATE DELETE와 같은 업데이트 문일 수도 있고 SELECT와 같은 쿼리 문일 수도 있습니다.또한 저장 프로시저는 JDBC 연결을 통해 호출될 수 있습니다.JDBC는 다음 클래스 중 하나를 사용하는 문을 나타냅니다.

INSERT, UPDATE 및 DELETE와 같은 업데이트 문은 데이터베이스에서 영향을 받은 행 를 나타내는 업데이트 수를 반환합니다.이러한 문장은 다른 정보를 반환하지 않습니다.

query 문은 JDBC 행 결과 세트를 반환합니다.행 결과 세트는 결과 세트 위로 이동하는 데 사용됩니다.행의 개별 열은 이름 또는 열 번호로 검색됩니다.결과 세트에는 임의의 수의 행이 포함될 수 있습니다.행 결과 세트에는 열의 이름과 해당 유형을 설명하는 메타데이터가 있습니다.

에는 기본 JDBC API에 대한 확장이 있습니다.javax.sql.

JDBC 접속은 드라이버에서 직접 취득하는 것이 아니라 접속 풀을 통해 관리되는 경우가 많습니다.

Java가 함수로 변환할 수 있는 호스트 데이터베이스 유형
Oracle 데이터형 setXXX()방법들
문자 setString()
VARCHAR2 setString()
번호 setBigDecimal()
setBoolean()
setByte()
setShort()
setInt()
setLong()
setFloat()
setDouble()
정수 setInt()
흘러가다 setDouble()
닫히다 setClob()
블롭 setBlob()
날것의 setBytes()
롱로우 setBytes()
날짜. setDate()
setTime()
setTimestamp()


Java 응용 프로그램에 데이터베이스 연결이 필요한 경우,DriverManager.getConnection()메서드는 JDBC 접속 작성에 사용됩니다.사용하는 URL 은, 특정의 데이타베이스와 JDBC 드라이버에 의해서 다릅니다.항상 "jdbc:" 프로토콜로 시작하지만 나머지는 특정 공급업체에 따라 다릅니다.

연결 접속하다 = 드라이버 매니저.get Connection(get Connection)(      "jdbc: somejdbcvendor: 일부 jdbc 벤더에서 필요한 기타 데이터",      "myLogin",      "my Password"); 해라 {      /* 여기서 접속을 사용합니다*/ } 마침내. {     //접속이 끝나면 연결을 닫는 것이 중요합니다.     해라 {          접속하다.가까운.();     } 또 만나 (던질 수 있다 e) { /* 원래 예외 전파 로그로 남기는 것이 아니라 */          로거.경고하다("JDBC 연결을 닫을 수 없습니다.",e);     } } 

Java SE 7부터는 Java의 try-with-resources 문을 사용하여 위의 코드를 단순화할 수 있습니다.

해라 (연결 접속하다 = 드라이버 매니저.get Connection(get Connection)(      "jdbc: somejdbcvendor: 일부 jdbc 벤더에서 필요한 기타 데이터",      "myLogin",      "my Password")) {      /* 여기서 접속을 사용합니다*/ }  // VM이 연결 닫기를 처리합니다. 

연결이 확립되면 문을 만들 수 있습니다.

해라 (진술 스탑 = 접속하다.create 스테이트먼트()) {     스탑.execute Update(업데이트 실행)("MyTable(이름)에 값 삽입('my name')); } 

Connections, Statements 및 ResultSets는 소켓이나 파일 기술자 등의 운영 체제 리소스를 묶는 경우가 많습니다.원격 데이터베이스 서버에 대한 Connections의 경우 현재 열려 있는 ResultSet의 커서 추가 리소스가 서버에 묶여 있습니다.하는 것이 불가결하다close()JDBC 오브젝트가 제 역할을 다하면 바로 사용할 수 있습니다.가비지 수집에 의존해서는 안 됩니다.위의 리소스 시도 구성은 이를 회피하는 코드 패턴입니다.

데이터베이스 쿼리 메커니즘을 사용하여 데이터베이스에서 데이터를 검색한다.다음 예제에서는 문을 만들고 쿼리를 실행하는 방법을 보여 줍니다.

해라 (진술 스탑 = 접속하다.create 스테이트먼트();     결과 세트 rs = 스탑.executeQuery("내 테이블에서 선택 *") ) {     하는 동안에 (rs.다음 분.()) {         인트 컬럼 수 = rs.get Meta Data(메타 데이터)().get Column Count(컬럼 카운트)();         위해서 (인트 i = 1; i <=> 컬럼 수; i++) {            // 열 번호는 1부터 시작합니다.            // 또한 결과 세트에 반환할 메서드가 많이 있습니다.            // 컬럼을 특정 유형으로 지정합니다.Sun 문서를 참조하십시오.            // 유효한 변환 목록을 표시합니다.            시스템..나가..인쇄( '칼럼" + i + " = " + rs.get Object(개체)(i));         }     } } 

의 예PreparedStatement쿼리, 사용conn첫 번째 예시의 클래스입니다.

해라 (준비 스테이트먼트 ps =     접속하다.준비문("오메가 i에서 i.*, j.*, Zappa j WHERE i.name = ?AND j.num =?") ) {     // 준비 중인 SQL 문에서 각 물음표는 자리 표시자입니다.     // "set" 메서드 호출을 통해 제공하는 값으로 대체해야 합니다.     // 다음 2개의 메서드콜이 2개의 플레이스 홀더를 대체합니다.첫 번째 메서드콜은     // 문자열 값으로 대체되고 두 번째 값은 정수 값으로 대체됩니다.     ps.setString(1, '불쌍한 요릭");     ps.setInt(2, 8008);      // ResultSet rs는 SQL 문의 실행 결과를 전달합니다.     // rs.next(), 내부 행 포인터 또는 커서를 호출할 때마다     // 결과 다음 행으로 이동합니다.커서는 처음에     // 첫 번째 행 앞에 배치됩니다.     해라 (결과 세트 rs = ps.executeQuery()) {         하는 동안에 (rs.다음 분.()) {             인트 컬럼 수 = rs.get Meta Data(메타 데이터)().get Column Count(컬럼 카운트)();             위해서 (인트 i = 1; i <=> 컬럼 수; i++) {                 // 열 번호는 1부터 시작합니다.                 // 또한 결과 세트에 반환할 메서드가 많이 있습니다.                 // 컬럼을 특정 유형으로 지정합니다.Sun 문서를 참조하십시오.                 // 유효한 변환 목록을 표시합니다.                 시스템..나가..인쇄('칼럼" + i + " = " + rs.get Object(개체)(i));             } // 대상         } // 동안     } // 시험해 보다 } // 시험해 보다 

데이터베이스 조작에 실패하면 JDBC는 다음 명령을 실행합니다.SQLException이러한 에러로부터 회복하려면 , 가능한 한 상세하게 기록하는 것 이외에는, 통상, 할 수 있는 일이 거의 없습니다.SQLException을 응용 프로그램도메인 예외(체크되지 않은 예외)로 변환하는 것이 좋습니다.이 예외는 최종적으로 트랜잭션롤백과 사용자에게 통지됩니다.

데이터베이스 트랜잭션의 예:

부울 auto Commit Default(자동 커밋 디폴트 = 접속하다.getAutoCommit(자동 커밋)(); 해라 {     접속하다.setAutoCommit(자동 커밋)(거짓의);      /* 여기서 conn에 대한 스테이트먼트를 트랜잭션 방식으로 실행 */      접속하다.저지르다(); } 또 만나 (던질 수 있다 e) {     해라 { 접속하다.롤백(); } 또 만나 (던질 수 있다 e) { 로거.경고하다("트랜잭션을 롤백할 수 없습니다.", e); }     던지다 e; } 마침내. {     해라 { 접속하다.setAutoCommit(자동 커밋)(auto Commit Default(자동 커밋 디폴트); } 또 만나 (던질 수 있다 e) { 로거.경고하다("AutoCommit 설정을 복원할 수 없습니다.",e); } } 

예를 들어CallableStatement(데이터베이스내의 스토어드 프로시저를 호출하려면 , 「JDBC API Guide 」를 참조해 주세요.

수입품 java.sql.연결; 수입품 java.sql.드라이버 매니저; 수입품 java.sql.진술;  일반의 학급 mydb1 {    정적인 스트링 URL = "jdbc:mydb://localhost/mydb";     일반의 정적인 무효 주된(스트링[] args) {       해라 {         학급.이름("com.bc.jdbc.드라이버");          연결 접속하다 = 드라이버 매니저.get Connection(get Connection)(URL, "루트", "루트");         진술 스탑 = 접속하다.create 스테이트먼트();                스트링 sql = "emp1 값에 삽입('pctb5361', 'kiril', 'john', 9686668)";         스탑.execute Update(업데이트 실행)(sql);                     시스템..나가..인쇄("테이블에 레코드를 삽입했습니다..");       } 또 만나 (예외. e) {         e.print Stack Trace(프린트 스택 트레이스)();       }    } } 


JDBC 드라이버

JDBC 드라이버는 Java 프로그램의 요청을 DBMS가 인식할 수 있는 프로토콜로 변환하는 클라이언트 측 어댑터(서버가 아닌 클라이언트 머신에 설치됨)입니다.

종류들

상용 드라이버와 무료 드라이버를 통해 대부분의 릴레이셔널 데이터베이스 서버에 접속할 수 있습니다.이러한 드라이버는, 다음의 몇개의 타입으로 분류됩니다.

  • 로컬에서 사용 가능한 ODBC 드라이버의 네이티브 코드를 호출하는 유형 1(참고:JDBC 4.2에서는 JDBC-ODBC 브릿지가 삭제되어[9] 있습니다).
  • 클라이언트 측에서 데이터베이스 벤더 네이티브 라이브러리를 호출하는 유형 2.이 코드는 네트워크를 통해 데이터베이스와 통신합니다.
  • 타입 3은 서버측 미들웨어와 통신하는 순수 자바 드라이버로 데이터베이스와 통신합니다.
  • 타입 4, 데이터베이스 네이티브 프로토콜을 사용하는 순수 자바 드라이버.

, 내부 JDBC 드라이버라고 불리는 타입도 주의해 주세요.Java 대응 SQL 데이터베이스에 JRE가 내장된 드라이버입니다.Java 저장 프로시저에 사용됩니다.이것은 위의 분류 체계에는 맞지 않지만 (데이터베이스 자체가 Java에 구현되어 있는지 여부에 따라) 타입 2 또는 타입 4 드라이버와 비슷할 수 있습니다.예를 들어 Oracle RDBMS와 함께 제공되는 KPRB(Kernel Program Bundled) 드라이버를[10] 들 수 있습니다.jdbc:default:connection은 이러한 연결을 비교적 표준적인 방법으로 제공합니다(적어도 Oracle 데이터베이스와 Apache Derby는 이를 지원합니다).그러나 내부 JDBC 드라이버의 경우 JDBC 클라이언트는 실제로 액세스되는 데이터베이스의 일부로 실행되므로 네트워크 프로토콜을 통해가 아니라 데이터에 직접 액세스할 수 있습니다.

원천

  • Oracle일부 JDBC 드라이버벤더 목록을 제공합니다.
  • Simba Technologies는 커스텀/독자적인 관계형 데이터 소스용 커스텀 JDBC 드라이버를 구축하기 위한 SDK를 출하하고 있습니다.
  • CData 소프트웨어는 다양한 응용 프로그램, 데이터베이스 및 웹 API용 유형 4 [11]JDBC 드라이버를 제공합니다.
  • 응용 프로그램, 데이터베이스 및 웹[12] 서비스용 RSSBus Type 4 JDBC 드라이버
  • DataDirect Technologies는 타입[13] 5라고 광고하는 모든 주요 데이터베이스에 대해 타입 4의 고속 JDBC 드라이버의 포괄적인 스위트를 제공합니다.
  • IDS 소프트웨어는 모든 주요 데이터베이스에 동시에 액세스하기 위한 타입 3 JDBC 드라이버를 제공합니다.지원되는 기능에는 결과 세트 캐싱, SSL 암호화, 커스텀 데이터 소스, dbShield 등이 있습니다.
  • JDBaccess는 MySQL Oracle용 Java 퍼시스텐스 라이브러리이며 JDBC 위의 사용하기 쉬운 API에서 주요 데이터베이스 액세스 작업을 정의합니다.
  • JNetDirect는 Sun J2EE 인증을 받은 고성능 JDBC 드라이버 스위트를 제공합니다.
  • JDBCR4는 Scott KlementIBM [14]iRPG에서 JDBC에 액세스할 수 있도록 만든 서비스 프로그램입니다.
  • HSQLDB는 JDBC 드라이버를 갖춘 RDBMS로 BSD 라이선스로 사용할 수 있습니다.
  • Schema Crawler는[15] JDBC를 활용하여 데이터베이스 메타데이터를 Plain Old Java Object(POJO; 플레인오래된 Java 객체)로 사용할 수 있는 오픈소스 API입니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "Sun Ships JDK 1.1 -- Javabeans Included". www.sun.com. Sun Microsystems. 1997-02-19. Archived from the original on 2008-02-10. Retrieved 2010-02-15. February 19, 1997 - The JDK 1.1 [...] is now available [...]. This release of the JDK includes: [...] Robust new features including JDBC for database connectivity
  2. ^ JDBC API 사양 버전: 4.0.
  3. ^ "The Java Community Process(SM) Program - communityprocess - mrel". jcp.org. Retrieved 22 March 2018.
  4. ^ "JDBC 4.1". docs.oracle.com. Retrieved 22 March 2018.
  5. ^ "The Java Community Process(SM) Program - communityprocess - mrel". jcp.org. Retrieved 22 March 2018.
  6. ^ "JDBC 4.2". docs.oracle.com. Retrieved 22 March 2018.
  7. ^ "The Java Community Process(SM) Program - communityprocess - mrel". jcp.org. Retrieved 22 March 2018.
  8. ^ "java.sql (Java SE 9 & JDK 9)". docs.oracle.com. Retrieved 22 March 2018.
  9. ^ "Java JDBC API". docs.oracle.com. Retrieved 22 March 2018.
  10. ^ Greenwald, Rick; Stackowiak, Robert; Stern, Jonathan (1999). Oracle Essentials: Oracle Database 10g. Essentials Series (3 ed.). Sebastopol, California: O'Reilly Media, Inc. (published 2004). p. 318. ISBN 9780596005856. Retrieved 2016-11-03. The in-database JDBC driver (JDBC KPRB)[:] Java code uses the JDBC KPRB (Kernel Program Bundled) version to access SQL on the same server.
  11. ^ "JDBC Drivers - CData Software". CData Software. Retrieved 22 March 2018.
  12. ^ "JDBC Drivers - CData Software". CData Software. Retrieved 22 March 2018.
  13. ^ "New Type 5 JDBC Driver — DataDirect Connect".
  14. ^ "Access External Databases from RPG with JDBCR4 Meat of the Matter". 28 June 2012. Retrieved 12 April 2016.
  15. ^ Sualeh Fatehi. "SchemaCrawler". SourceForge.

외부 링크