ΠΊΠ°ΠΊΠΎΠΉ класс ΠΈΠ»ΠΈ интСрфСйс ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° databasemetadata

Какой класс ΠΈΠ»ΠΈ интСрфСйс ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° databasemetadata

JDBC основан Π½Π° ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ соСдинСниС с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ описанному URL. ΠŸΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ рСгистрируСт сСбя Π² систСмС ΠΈ Π² дальнСйшСм автоматичСски вызываСтся, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ URL, содСрТащий ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ», Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ этот Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚.

Π’ Ρ‡Π΅ΠΌ Π·Π°ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ прСимущСства использования JDBC?

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°ΠΌΠΈ JDBC ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚:

Π§Ρ‚ΠΎ ΠΈΠ· сСбя прСдставляСт JDBC URL?

JDBC URL состоит ΠΈΠ·:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ JDBC URL для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ MySQL Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Β«TestΒ» располоТСнной ΠΏΠΎ адрСсу localhost ΠΈ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰Π΅ΠΉ соСдинСний ΠΏΠΎ ΠΏΠΎΡ€Ρ‚Ρƒ 3306: jdbc:mysql://localhost:3306/Test

Из ΠΊΠ°ΠΊΠΈΡ… частСй стоит JDBC?

JDBC состоит ΠΈΠ· Π΄Π²ΡƒΡ… частСй:

JDBC ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π²Ρ‹Π·ΠΎΠ²Ρ‹ уровня API Π² Β«Ρ€ΠΎΠ΄Π½Ρ‹Π΅Β» ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ‚ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ сСрвСра Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ….

ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅ основныС классы ΠΈ интСрфСйсы JDBC.

ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅ основныС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² JDBC. Как ΠΎΠ½ΠΈ связаны с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Java?

JDBC TypeJava Object Type
CHARString
VARCHARString
LONGVARCHARString
NUMERICjava.math.BigDecimal
DECIMALjava.math.BigDecimal
BITBoolean
TINYINTInteger
SMALLINTInteger
INTEGERInteger
BIGINTLong
REALFloat
FLOATDouble
DOUBLEDouble
BINARYbyte[]
VARBINARYbyte[]
LONGVARBINARYbyte[]
DATEjava.sql.Date
TIMEjava.sql.Time
TIMESTAMPjava.sql.Timestamp
CLOBClob
BLOBBlob
ARRAYArray
STRUCTStruct
REFRef
DISTINCTсопоставлСниС Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°
JAVA_OBJECTΠ±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс Java

ΠžΠΏΠΈΡˆΠΈΡ‚Π΅ основныС этапы Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ использовании JDBC.

Как Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ JDBC?

Π Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ нСсколькими способами:

Class.forName(Β«ΠΏΠΎΠ»Π½ΠΎΠ΅ имя класса Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°Β») ;

Как ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ соСдинСниС с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…?

Π’ качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ:

КакиС ΡƒΡ€ΠΎΠ²Π½ΠΈ изоляции Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² JDBC?

Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ изолированности Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ β€” Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅Π΅ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π² Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ нСсогласованныС Π΄Π°Π½Π½Ρ‹Π΅, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ изолированности ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ. Π‘ΠΎΠ»Π΅Π΅ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изолированности ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ ΠΏΡ€ΠΈ этом ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ½ΠΈΠΆΠ°Ρ‚ΡŒΡΡ количСство ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ выполняСмых Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изолированности позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ большС ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, Π½ΠΎ сниТаСт Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ….

Π’ΠΎ врСмя использования Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, для обСспСчСния цСлостности Π΄Π°Π½Π½Ρ‹Ρ…, Π‘Π£Π‘Π” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ доступ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ, ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ Π² Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. Π’Π°ΠΊΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ:

«грязноС» Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ (dirty read) β€” Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½Ρ‹Ρ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠ΅ΠΉ, которая впослСдствии Π½Π΅ подтвСрдится (откатится);

Π½Π΅ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰Π΅Π΅ΡΡ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ (non-repeatable read) β€” ΠΏΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Ρ€Π°Π½Π΅Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½Ρ‹ΠΌΠΈ;

Ρ„Π°Π½Ρ‚ΠΎΠΌΠ½ΠΎΠ΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ (phantom reads) β€” ситуация, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΎΠ΄Π½Π° ΠΈ Ρ‚Π° ΠΆΠ΅ Π²Ρ‹Π±ΠΎΡ€ΠΊΠ° Π΄Π°Π΅Ρ‚ Ρ€Π°Π·Π½Ρ‹Π΅ мноТСства строк.

Π£Ρ€ΠΎΠ²Π½ΠΈ изоляции Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² Π²ΠΈΠ΄Π΅ констант интСрфСйса java.sql.Connection :

TRANSACTION_NONE – Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ;

TRANSACTION_READ_UNCOMMITTED – позволяСт транзакциям Π²ΠΈΠ΄Π΅Ρ‚ΡŒ нСсохранСнныС измСнСния Π΄Π°Π½Π½Ρ‹Ρ…: Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ грязноС, Π½Π΅ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‰Π΅Π΅ΡΡ ΠΈ Ρ„Π°Π½Ρ‚ΠΎΠΌΠ½ΠΎΠ΅ чтСния;

TRANSACTION_READ_COMMITTED – любоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, сдСланноС Π² Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Π½Π΅ Π²ΠΈΠ΄Π½ΠΎ Π²Π½Π΅ Π½Π΅Ρ‘, ΠΏΠΎΠΊΠ° ΠΎΠ½Π° Π½Π΅ сохранСна: ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ грязноС Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, Π½ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π½Π΅ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‰Π΅Π΅ΡΡ ΠΈ Ρ„Π°Π½Ρ‚ΠΎΠΌΠ½ΠΎΠ΅;

TRANSACTION_REPEATABLE_READ – Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ грязноС ΠΈ Π½Π΅ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‰Π΅Π΅ΡΡ, Ρ„Π°Π½Ρ‚ΠΎΠΌΠ½ΠΎΠ΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ;

TRANSACTION_SERIALIZABLE – грязноС, Π½Π΅ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‰Π΅Π΅ΡΡ ΠΈ Ρ„Π°Π½Ρ‚ΠΎΠΌΠ½ΠΎΠ΅ чтСния Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Ρ‹.

NB! Π‘Π΅Ρ€Π²Π΅Ρ€ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ всС ΡƒΡ€ΠΎΠ²Π½ΠΈ изоляции. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ java.sql.DatabaseMetaData прСдоставляСт ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± уровнях изолированности Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π΄Π°Π½Π½ΠΎΠΉ Π‘Π£Π‘Π”.

ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ‡Π΅Π³ΠΎ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ запросы ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…?

Для выполнСния запросов ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² Java ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚Ρ€ΠΈ интСрфСйса:

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹-носитСли интСрфСйсов ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° java.sql.Connection :

Π§Π΅ΠΌ отличаСтся Statement ΠΎΡ‚ PreparedStatement?

ΠŸΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π‘Π£Π‘Π” Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ запрос, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ ΠΈ создаСт Β«ΠΏΠ»Π°Π½Β» (query plan) Π΅Π³ΠΎ выполнСния. Если ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ запрос выполняСтся нСсколько Ρ€Π°Π·, Ρ‚ΠΎ Π‘Π£Π‘Π” Π² состоянии ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ»Π°Π½ Π΅Π³ΠΎ выполнСния ΠΈ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ этапов Ρ€Π°Π·Π±ΠΎΡ€ΠΊΠΈ ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ. Благодаря этому запрос выполняСтся быстрСС.

Буммируя: PreparedStatement Π²Ρ‹Π³ΠΎΠ΄Π½ΠΎ отличаСтся ΠΎΡ‚ Statement Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ использовании с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ»ΠΈ нСсколькими Π½Π°Π±ΠΎΡ€Π°ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ прСимущСства Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΏΡ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΈ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ запроса, помогая ΠΏΡ€ΠΈ этом ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ SQL Injection.

Как осущСствляСтся запрос ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ²?

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ запросов осущСствляСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ интСрфСйс java.sql.Statement :

Как Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ…Ρ€Π°Π½ΠΈΠΌΡƒΡŽ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ?

Π’Ρ‹Π±ΠΎΡ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° зависит ΠΎΡ‚ характСристик Ρ…Ρ€Π°Π½ΠΈΠΌΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹:

Если нСизвСстно, ΠΊΠ°ΠΊ Π±Ρ‹Π»Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° хранимая ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°, для получСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ…Ρ€Π°Π½ΠΈΠΌΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠΌΠ΅Π½ ΠΈ Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²) ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ java.sql.DatabaseMetaData ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ структурС источника Π΄Π°Π½Π½Ρ‹Ρ….

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹Π·ΠΎΠ²Π° Ρ…Ρ€Π°Π½ΠΈΠΌΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ с Π²Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ:

Как Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ соСдинСниС с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…?

Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΠΎΠΉ закрываСтся Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° close() Ρƒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° java.sql.Connection ΠΈΠ»ΠΈ посрСдством использования ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° try-with-resources ΠΏΡ€ΠΈ создании Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, появившСгося Π² Java 7.

NB! ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ всС запросы созданныС этим соСдинСниСм.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠœΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… Π‘Π°Π·Ρ‹ Π”Π°Π½Π½Ρ‹Ρ… Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JDBC

Π£Π·Π½Π°ΠΉΡ‚Π΅, ΠΊΠ°ΠΊ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ JDBC ΠΈ интСрфСйса DatabaseMetaData.

1. ΠžΠ±Π·ΠΎΡ€

JDBC прСдоставляСт API Java для чтСния фактичСских Π΄Π°Π½Π½Ρ‹Ρ…, хранящихся Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‚ΠΎΡ‚ ΠΆΠ΅ API Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для чтСния ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. ΠœΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†, ΠΈΠΌΠ΅Π½Π° столбцов ΠΈ Ρ‚ΠΈΠΏΡ‹ столбцов.

2. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ DatabaseMetaData

DatabaseMetaData – это интСрфСйс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдоставляСт Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для получСния ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚Π° информация ΠΏΠΎΠ»Π΅Π·Π½Π° для создания инструмСнтов Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ структуру Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π»ΠΈ базовая Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ Π½Π΅Ρ‚.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ для извлСчСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…. ПозТС ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π»ΠΈ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

3. ΠœΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ ΠΈΠΌΠ΅Π½Π° всСх ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†:

Π”Π°Π»Π΅Π΅, Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π½Π°ΠΉΡ‚ΠΈ систСмныС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, всС, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, это Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π½Π° ” Π‘Π˜Π‘Π’Π•ΠœΠΠΠ― Π’ΠΠ‘Π›Π˜Π¦Π β€œ:

НаконСц, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ всС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ прСдставлСния, ΠΌΡ‹ просто ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ Ρ‚ΠΈΠΏ Π½Π° β€œ VIEW β€œ.

4. ΠœΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ столбцов

ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ столбцы ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚ΠΎΡ‚ ΠΆΠ΅ DatabaseMetaData object . Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим это Π² дСйствии:

Помимо ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… столбцов, ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ·Π½Π°Ρ‚ΡŒ столбцы ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹:

Аналогично, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ описаниС столбцов внСшнСго ΠΊΠ»ΡŽΡ‡Π° вмСстС со столбцами ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ссылаСтся данная Ρ‚Π°Π±Π»ΠΈΡ†Π°. Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ рассмотрим, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ доступных ΠΈΠΌΠ΅Π½Π°Ρ… схСм.

5. Имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ схСм

ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΡƒΡ‡Π΅Ρ‚Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±Ρ‹Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…:

Аналогично, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ getSchemas() для получСния ΠΈΠΌΠ΅Π½ доступных схСм Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…:

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ рассмотрим, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΏΠΎΠ»Π΅Π·Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

6. ΠœΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° Π£Ρ€ΠΎΠ²Π½Π΅ Π‘Π°Π·Ρ‹ Π”Π°Π½Π½Ρ‹Ρ…

НапримСр, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ имя ΠΈ Π²Π΅Ρ€ΡΠΈΡŽ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, имя Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° JDBC, Π½ΠΎΠΌΠ΅Ρ€ вСрсии Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° JDBC ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ посмотрим Π½Π° Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π°:

Π—Π½Π°Π½ΠΈΠ΅ этой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, особСнно ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с нСсколькими ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°ΠΌΠΈ ΠΈ вСрсиями Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…. НапримСр, Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ вСрсии ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ опрСдСлСнная функция ΠΈΠ»ΠΈ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ ошибка, ΠΈΠ·-Π·Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΎΠ±Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡƒΡ‚ΡŒ.

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ посмотрим, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ·Π½Π°Ρ‚ΡŒ, отсутствуСт Π»ΠΈ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ поддСрТиваСтся опрСдСлСнная функция.

7. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. НапримСр, H2 Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΎΠ»Π½Ρ‹Π΅ внСшниС соСдинСния, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ MySQL ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚.

Π˜Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ Π½Π°ΠΌΠΈ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΠ»ΠΈ Π½Π΅Ρ‚? Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ²:

8. Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΡƒΠ·Π½Π°Π»ΠΈ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ интСрфСйс DatabaseMetaData для извлСчСния ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π§Ρ‚Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…

JDBC Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π΄Π²Π° интСрфСйса (DatabaseMetaData, ResultSetMetaData) для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ MetaData ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ сСрвСру Π‘Π”, самой Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌΡƒ Π½Π°Π±ΠΎΡ€Ρƒ, ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌΠΎΠΌΡƒ ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ DatabaseMetaData

ΠœΠ΅Ρ‚ΠΎΠ΄ getMetaData Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Connection Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ DatabaseMetaData.

DatabaseMetaData Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² состав ΠΏΠ°ΠΊΠ΅Ρ‚Π° java.sql.* ΠΈ содСрТит ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ SQL, Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ свСдСния, относящиСся ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ Connection, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ относятся нСпосрСдствСнно ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΡŽ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… Π½Π°Π±ΠΎΡ€ΠΎΠ².

Π’ΠΈΠΏΡ‹ всСх столбцов Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π‘Π” ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° getColumns класса DatabaseMetaData :

ΠœΠ΅Ρ‚ΠΎΠ΄Ρƒ getColumns Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°: Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ схСмы, Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ столбца. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅ ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ :

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΊΠ°ΠΊ null. Π­Ρ‚ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄Π°Π»Ρ‘Π½ ΠΈΠ· поиска. НС всС Ρ‚ΠΈΠΏΡ‹ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ имя ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΠΊΠ°ΠΊ null. Π‘ΠΈΠΌΠ²ΠΎΠ» «%» ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ для шаблона ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π’Π‘Π• ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ для Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

Π¨Π°Π±Π»ΠΎΠ½ columnPattern опрСдСляСт синтаксис, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΌΡƒ Π² выраТСниях SQL ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° LIKE для ΠΏΠΎΠ΄Π±ΠΎΡ€Π° ΠΈΠΌΡ‘Π½. Π’ частности, символ подчСркивания «_» соотвСтствуСт Π»ΡŽΠ±ΠΎΠΌΡƒ символу строки, Π° символ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π° «%» соотвСтствуСт Π»ΡŽΠ±ΠΎΠΌΡƒ количСству ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… символов Π² строкС. НапримСр, использованиС шаблона ‘j_b’ позволяСт ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ строки Β«jobΒ» ΠΈ Β«jabΒ», Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ шаблон j%b даст Π»ΡŽΠ±ΡƒΡŽ Ρ†Π΅Π»Π΅Π²ΡƒΡŽ строку, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΡƒΡŽΡΡ с Β«jΒ» ΠΈ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΡƒΡŽΡΡ Π½Π° Β«bΒ», с Π»ΡŽΠ±Ρ‹ΠΌ количСством «Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ноль» символом ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования DatabaseMetaData :

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ DatabaseMetaData

ΠœΠ΅Ρ‚ΠΎΠ΄ΠžΠΏΠΈΡΠ°Π½ΠΈΠ΅
getDatabaseProductName()НазваниС сСрвСра Π±Π°Π·Ρ‹
getDatabaseProductVersion()ВСрсия сСрвСра
getDriverName()Имя Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°
getDriverVersion()ВСрсия Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°
getUserName()ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ
getTableTypes()Π’ΠΈΠΏΡ‹ Ρ‚Π°Π±Π»ΠΈΡ†
getNumericFunctions()ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
getStringFunctions()Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
getSystemFunctions()БистСмныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
getTimeDateFunctions()Π”Π°Ρ‚Π°/ВрСмя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
getExtraNameCharacters()Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ для ΠΈΠΌΡ‘Π½, ΠΊΡ€ΠΎΠΌΠ΅ стандартных
getSchemaTerm()Π’Π΅Ρ€ΠΌΠΈΠ½ для «ΡΡ…Π΅ΠΌΠ°»
getProcedureTerm()Π’Π΅Ρ€ΠΌΠΈΠ½ для «ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°»
getCatalogTerm()Π’Π΅Ρ€ΠΌΠΈΠ½ для «ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³»
getMaxColumnNameLength()Макс. длина имСни колонки
getMaxProcedureNameLength()Макс. Π΄Π»ΠΈΠ½Π° ΠΈΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹
getMaxTableNameLength()Макс. Π΄Π»ΠΈΠ½Π° ΠΈΠΌΠ΅Π½ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹
getMaxColumnsInSelect()Макс. кол-во колонок в SELECT
getMaxStatementLength()Макс. Π΄Π»ΠΈΠ½Π° SQL запроса
getMaxColumnsInTable()МаксимальноС кол-во колонок в TABLE
getMaxConnections()МаксимальноС ΠΊΠΎΠ»-Π²ΠΎ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… соСдинСний с Π±Π°Π·ΠΎΠΉ

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ResultSetMetaData

ΠœΠ΅Ρ‚ΠΎΠ΄ getMetaData Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Π½Π°Π±ΠΎΡ€Π° Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… класса ResultSet Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ResultSetMetaData.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ получСния ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ запроса :

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Π½Π°Π±ΠΎΡ€Π° обСспСчиваСтся ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ экзСмпляра ResultSetMetaData с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° getMetaData(). ΠŸΡ€ΠΈ динамичСском доступС ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°Ρ‚ΡŒ, сколько ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌ Π½Π°Π±ΠΎΡ€Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°Ρ… ΠΈ ΠΈΡ… ΠΈΠΌΠ΅Π½Π°Ρ… для Π²Ρ‹Π²ΠΎΠ΄Π°.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

JDBC: DatabaseMetaData

Π§Π΅Ρ€Π΅Π· интСрфСйс java.sql.DatabaseMetaData Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈΡΡŒ. НапримСр, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ столбцы Π΅ΡΡ‚ΡŒ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π»ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Ρ‚. Π΄.

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ экзСмпляра DatabaseMetaData

Π’Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ DatabaseMetaData ΠΈΠ· соСдинСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ² этот экзСмпляр DatabaseMetaData, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ для Π½Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для получСния ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

НазваниС ΠΈ вСрсия ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΈ Π²Π΅Ρ€ΡΠΈΡŽ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Если Π²Ρ‹ ΡƒΠΆΠ΅ Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π½Π°Π΅Ρ‚Π΅, с ΠΊΠ°ΠΊΠΎΠΉ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, это ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ Π½Π΅ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ. Но Ссли Π²Ρ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π² состоянии Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ со ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°ΠΌΠΈ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…, эта информация ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Π° ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ спСцифичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚, SQL ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΈ Ρ‚. Π”.

ВСрсия Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° JDBC, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, Ссли вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΠΎΡ‡Π΅Π½ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½ΠΎ. Однако для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π² состоянии Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ со ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°ΠΌΠΈ ΠΈ вСрсиями Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…, Π·Π½Π°Π½ΠΈΠ΅ Ρ‚ΠΎΡ‡Π½ΠΎΠΉ вСрсии ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ прСимущСством.

НапримСр, опрСдСлСнная вСрсия Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ. Или Π² Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ функция, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ.

Бписки Ρ‚Π°Π±Π»ΠΈΡ†

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ† Π² вашСй Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· DatabaseMetaData. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ это дСлаСтся:

Π‘Π½Π°Ρ‡Π°Π»Π° Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ getTables(), пСрСдавая Π΅ΠΌΡƒ 4 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌΠΈ. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ количСство Ρ‚Π°Π±Π»ΠΈΡ†, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ Π² ResultSet. Однако, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ я Ρ…ΠΎΡ‡Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π±Ρ‹Π»ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Ρ‹, я ΠΏΠ΅Ρ€Π΅Π΄Π°Π» null Π²ΠΎ всСх этих ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ…. Π‘ΠΌ. JavaDoc для Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ….

ResultSet, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ getTables(), содСрТит список ΠΈΠΌΠ΅Π½ Ρ‚Π°Π±Π»ΠΈΡ†, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… 4 Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ(ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌΠΈ). Π­Ρ‚ΠΎΡ‚ ResultSet содСрТит 10 столбцов, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π΄Π°Π½Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Π‘Ρ‚ΠΎΠ»Π±Π΅Ρ† с индСксом 3 содСрТит само имя Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

Бписок столбцов Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ столбцы Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Ρ‡Π΅Ρ€Π΅Π· DatabaseMetaData. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ:

Π‘Π½Π°Ρ‡Π°Π»Π° Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ getColumns(), пСрСдавая 4 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. Из Π½ΠΈΡ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ tableNamePattern ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π—Π°Π΄Π°ΠΉΡ‚Π΅ для Π½Π΅Π³ΠΎ имя Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, столбцы ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ.

ResultSet, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ getColumns(), содСрТит список столбцов для Π΄Π°Π½Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π‘Ρ‚ΠΎΠ»Π±Π΅Ρ† с индСксом 4 содСрТит имя столбца, Π° столбСц с индСксом 5 содСрТит Ρ‚ΠΈΠΏ столбца. Π’ΠΈΠΏ столбца – это Ρ†Π΅Π»ΠΎΠ΅ число, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· констант Ρ‚ΠΈΠΏΠ°, Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… Π² java.sql.Types

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ столбцах для Ρ‚Π°Π±Π»ΠΈΡ†, ΠΎΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с JavaDoc.

ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ для Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹

Π’Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π’Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ это Ρ‚Π°ΠΊ:

Π‘Π½Π°Ρ‡Π°Π»Π° Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ getPrimaryKeys(), пСрСдавая Π΅ΠΌΡƒ 3 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. Волько tableName Π½Π΅ являСтся Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.

ResultSet, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ getPrimaryKeys(), содСрТит список столбцов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π΄Π°Π½Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π‘Ρ‚ΠΎΠ»Π±Π΅Ρ† с индСксом 4 содСрТит имя столбца.

ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… столбцов. Π’Π°ΠΊΠΎΠΉ ΠΊΠ»ΡŽΡ‡ называСтся составным ΠΊΠ»ΡŽΡ‡ΠΎΠΌ. Если ваши Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ содСрТат составныС ΠΊΠ»ΡŽΡ‡ΠΈ, ResultSet Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ нСсколько строк. Одна строка для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ столбца Π² составном ΠΊΠ»ΡŽΡ‡Π΅.

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ DatabaseMetaData Ρ‚Π°ΠΊΠΆΠ΅ содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ функциях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ JDBC ΠΈ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…. МногиС ΠΈΠ· этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ прСдставлСны ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ true ΠΈΠ»ΠΈ false Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, поддСрТиваСтся данная функция ΠΈΠ»ΠΈ Π½Π΅Ρ‚.

Π― Π½Π΅ Π±ΡƒΠ΄Ρƒ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ здСсь всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, связанныС с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π― просто ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ².

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

УстановлСниС связи с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… с использованиСм JDBC

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

JDBC являСтся Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Java 2 Standard Edition (J2SE), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ для взаимодСйствия с Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… SQL. Для изучСния Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ Π²Π°ΠΌ потрСбуСтся доступ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Если Ρƒ вас Π½Π΅ установлСны Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… MYSQL, бСсплатной Π‘Π”, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π½Π° сайтС www.mysql.org. Она Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… срСдах.

ΠΊΠ°ΠΊΠΎΠΉ класс ΠΈΠ»ΠΈ интСрфСйс ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° databasemetadata. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ класс ΠΈΠ»ΠΈ интСрфСйс ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° databasemetadata. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΎΠΉ класс ΠΈΠ»ΠΈ интСрфСйс ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° databasemetadata. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΎΠΉ класс ΠΈΠ»ΠΈ интСрфСйс ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° databasemetadata. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ класс ΠΈΠ»ΠΈ интСрфСйс ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° databasemetadata

Π”Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ JDBC-ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡƒΡŽ Π²Π°ΠΌΠΈ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…. Для MySQL Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π½Π° сайтах Sourceforge.net ΠΈ MySQL.org.

Установив настройки окруТСния для Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ ΠΊ написанию ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. На Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌ этапС Ρ€Π°Π±ΠΎΡ‚Ρ‹ с JDBC рассматриваСтся Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… Π·Π°Π΄Π°Ρ‡:

Π¨Π°Π³ 1: Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ JDBC Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€. Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ классы доступными для Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ окруТСния нСдостаточно.

Π¨Π°Π³ 2: УстановитС соСдинСниС с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…. Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ источник Π΄Π°Π½Π½Ρ‹Ρ…. ΠžΡ‚ этого источника зависит Π²Ρ‹Π±ΠΎΡ€ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°.

ΠΊΠ°ΠΊΠΎΠΉ класс ΠΈΠ»ΠΈ интСрфСйс ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° databasemetadata. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ класс ΠΈΠ»ΠΈ интСрфСйс ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° databasemetadata. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΎΠΉ класс ΠΈΠ»ΠΈ интСрфСйс ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° databasemetadata. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΎΠΉ класс ΠΈΠ»ΠΈ интСрфСйс ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° databasemetadata. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ класс ΠΈΠ»ΠΈ интСрфСйс ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° databasemetadata

Π”Π°Π»Π΅Π΅ прСдставлСны способы, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ этих шагов.

Π¨Π°Π³ 1: Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° JDBC-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°

ΠŸΡ€ΠΈ повСрхностном рассмотрСнии JDBC-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ классами. Они Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ интСрфСйс java.sql.Driver, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Ρ€Π΅Π΄ΠΊΠΎ трСбуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот интСрфСйс Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. ЕдинствСнным Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ класс Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ java.sql.DriverManager. Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ трСбования находится ΠΏΠΎΠ΄ ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ поставщика Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°, Π½ΠΎ Π½ΠΈ Π² ΠΊΠΎΠ΅ΠΌ случаС Π½Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π’Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ класс, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это ΠΌΠΎΠΆΠ½ΠΎ трСмя Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ способами:

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ способ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ JDBC-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°:

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ экзСмпляр класса. ПослС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ вашСй Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ нахоТдСния для Π½Π΅Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ ТСстко Π·Π°Π΄Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ² ΠΊ конструктору.

НапримСр, Ссли Π² ΠΏΡƒΡ‚ΠΈ для доступа ΠΊ SQL прописано mysql-2.0.13-bin.jar, Π²Π°ΠΌ потрСбуСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр класса org.gjt.mm.mysql.Driver:

Π”Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ свои нСдостатки. Π₯отя JDBC агностируСм Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ вашСго прилоТСния придСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ MySQL. Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚ Oracle ΠΈΠ»ΠΈ Sybase, Ρ‚ΠΎ для запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ MySQL.

Другая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ, создавая экзСмпляр Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° явным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹ фактичСски ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚Π΅ созданиС Π΄Π²ΡƒΡ… экзСмпляров. Как ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ, ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ класса Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ DriverManager. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ класс создаСт свой собствСнный экзСмпляр ΠΈ рСгистрируСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ DriverManager. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠΉ экзСмпляр ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ прямого обращСния ΠΊ конструктору.

Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ способ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ JDBC-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°:

МоТно ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ создания Π΄Π²ΡƒΡ… экзСмпляров Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΏΡƒΡ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π² строкС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ forName класса Class ΠΈΠΌΠ΅Π½ΠΈ класса. Π”Π°Π½Π½ΠΎΠ΅ имя класса Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Ρ‹ΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² случаС с MySQL-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠΌ ΠΈΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ org.gjt.mm.mysql.Driver) ΠΈ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ…:

Π’ ΠΎΠ±ΠΎΠΈΡ… ΠΈΠ· этих случаСв ТСстко задаСтся имя Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠΉ способ. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ динамичСски загруТаСтся Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Π°, Ρ‚ΠΎ ΠΏΡ€ΠΈ компиляции классам Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° вовсС Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ доступными. ΠŸΡ€ΠΈ этом Π²Π°ΠΌ Π½Π΅ трСбуСтся ТСстко Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ строку. ВсС Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ – это ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ имя Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки (ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΡƒΠ΄Π°-Π»ΠΈΠ±ΠΎ Π΅Ρ‰Π΅) ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ с MySQL, ΠΈ с Π»ΡŽΠ±Ρ‹ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌ сСрвСром Π‘Π”, Π½Π΅ трСбуя ΠΏΡ€ΠΈ этом Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ пСрСкомпиляций ΠΊΠΎΠ΄Π°.

Π’Ρ€Π΅Ρ‚ΠΈΠΉ способ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ JDBC-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°:

Π’ ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π΄Π²ΡƒΡ… ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΡ‹Ρ… Π½Π°ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… Π²Π°ΠΌ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΎΡ‚ΠΊΡƒΠ΄Π°-Π»ΠΈΠ±ΠΎ ΠΈΠΌΠ΅Π½Π° Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ². БущСствуСт ΠΈ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ способ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°, Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠΉ написания Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ исходного ΠΊΠΎΠ΄Π°. Π£ΠΊΠ°ΠΆΠΈΡ‚Π΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΈΠ»ΠΈ Π½Π°Π±ΠΎΡ€ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ², установив систСмноС свойство jdbc.drivers, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π² случаС нСобходимости Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски доступСн для DriverManager. Если Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ доступными нСсколько Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ², Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΈΡ… список, Ρ€Π°Π·Π΄Π΅Π»ΠΈΠ² элСмСнты Π·Π½Π°ΠΊΠΎΠΌ Β«Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅Β».

Π¨Π°Π³ 2: УстановлСниС соСдинСния с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ URI-адрСса, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ с β€œjdbc:”. ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ строки зависит ΠΎΡ‚ вашСго JDBC-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. ΠšΠ°ΠΆΠ΄ΠΎΠΌΡƒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρƒ соотвСтствуСт ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Π°Ρ строка для отобраТСния Π½Π° Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ для Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ сСрвСра, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€.

Π’ случаС Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° MySQL, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ строка «mysql», Π° локализация задаСтся Π΄Ρ€ΡƒΠ³ΠΈΠΌ URI. Полная строка Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚:

Π‘ΠΎΠ»Π΅Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ, Ссли хост, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ соСдинСниС, располоТСн Π½Π° вашСй ΠΆΠ΅ машинС, ΠΈΠΌΠ΅Π½Π΅ΠΌ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… являСтся test ΠΈ Π²Π°ΠΌ Π½Π΅ трСбуСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ пароля, Ρ‚ΠΎ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ строка ΠΏΡ€ΠΈΠΌΠ΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄:

Если Ρƒ вас Π΅ΡΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ URI, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°, ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ соСдинСниС с источником Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ фактичСскоС соСдинСниС с источником. Для ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ поиска DriverManager обСспСчиваСт ΠΌΠ΅Ρ‚ΠΎΠ΄ getConnection. Π”Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Connection ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС mysql). Если ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Π½Π΅ поддСрТиваСтся Π½ΠΈ ΠΎΠ΄Π½ΠΈΠΌ зарСгистрированным Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠΌ, Ρ‚ΠΎ Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ошибка.

Имя субпротокола (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС mysql) ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ для JDBC-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°.

ПослС установки соСдинСния доступ ΠΊ источнику Π΄Π°Π½Π½Ρ‹Ρ… становится ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, сущСствуСт ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΉ способ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ соСдинСниС с источником Π΄Π°Π½Π½Ρ‹Ρ…. Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ посрСдством ΠΈΠΌΠ΅Π½Π½ΠΎΠΉ слуТбы JNDI (Java Naming and Directory Interface).

Устанавливая соСдинСниС ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ интСрфСйса JNDI, вмСсто DriverManager ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ DriverSource ΠΈ Context. ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π΅Π΅, Π² случаС MySQL Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ javax.sql.DriverSource являСтся класс org.gjt.mm.mysql.jdbc2.optional.MysqlDataSource, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ рСгистрируСтся Π²Π½Π΅ области дСйствия прилоТСния. Π’Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ остаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°ΠΉΡ‚ΠΈ источник Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° ΠΈΠΌΠ΅Π½ΠΈ, привязанному ΠΊ контСксту.

Установив соСдинСниС, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ доступ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€ΠΈ поискС DriverManager. Поиск DriverManager ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ производится Π² контСкстС прилоТСния J2EE.

О Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ доступа ΠΊ JNDI ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΡŽ станСт извСстно, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ½ΠΎ Π½Π΅ настроСно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° поиск JDBC-источника.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΎΠ±Π° способа соСдинСния с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ тСстового ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π° MySQL. Π’Ρ‹ смоТСтС Π½Π°ΠΉΡ‚ΠΈ Π² Π½Π΅ΠΌ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ JNDIDataSource ΠΈ выраТСния. Для Π΄Ρ€ΡƒΠ³ΠΈΡ… Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Π°ΠΊΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Ρ‹, ΠΎΠ΄Π½Π°ΠΊΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ этим. Π’Π°ΠΌ потрСбуСтся лишь произвСсти Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ настройки, ΡƒΠΊΠ°Π·Π°Π² источник Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π΄Π°Π½Π½ΠΎΠΉ Π‘Π”.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ знания ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠ½-Π»Π°ΠΉΠ½ тСста.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ Connection ΠΈ DatabaseMetaData ΠΈ класс DriverManager

JDBC обСспСчиваСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ интСрфСйс API, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ языка программирования Java ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ, Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹ΠΌ Π² Ρ‚Π°ΠΊΠΈΡ… источниках, ΠΊΠ°ΠΊ рСляционная Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ…. API Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΏΠ°ΠΊΠ΅Ρ‚ java.sql, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ основным API для JDBC, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚ javax.sql, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ API для JDBC (ΠΎΠ½ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² поставку J2SE вСрсии 1.4).

ΠžΠΏΠΈΡΡ‹Π²Π°Π΅ΠΌΡ‹Π΅ здСсь интСрфСйсы ΠΈ класс ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ java.sql.

ΠΊΠ°ΠΊΠΎΠΉ класс ΠΈΠ»ΠΈ интСрфСйс ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° databasemetadata. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ класс ΠΈΠ»ΠΈ интСрфСйс ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° databasemetadata. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊΠΎΠΉ класс ΠΈΠ»ΠΈ интСрфСйс ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° databasemetadata. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΠΎΠΉ класс ΠΈΠ»ΠΈ интСрфСйс ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° databasemetadata. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ класс ΠΈΠ»ΠΈ интСрфСйс ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° databasemetadata

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Connection прСдставляСт сСссию соСдинСния с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Π΅ΠΌΡƒΡŽ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠΌ. Он Ρ‚Π°ΠΊΠΆΠ΅ обСспСчиваСт ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для создания Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, управлСния соСдинСниями ΠΈ ΠΈΡ… свойствами. ΠœΠ΅Ρ‚ΠΎΠ΄ ConnectiongetMetaData:

бросаСт ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ SQLException.

Класс DriverManager являСтся классом ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹, ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΌ JDBC-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°ΠΌΠΈ. Он содСрТит список зарСгистрированных Π² систСмС JDBC-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² ΠΈ устанавливаСт соСдинСниС с Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠΌ. Π”Π°Π½Π½Ρ‹ΠΉ класс ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² основном для получСния ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Connection посрСдством ΠΌΠ΅Ρ‚ΠΎΠ΄Π° getConnection:

getConnection(String url) ΠŸΡ‹Ρ‚Π°Π΅Ρ‚ΡΡ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ соСдинСниС с URL-адрСсом Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

getConnection(String url, Properties info) ΠŸΡ‹Ρ‚Π°Π΅Ρ‚ΡΡ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ соСдинСниС с URL-адрСсом Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹: url – адрСс Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ jdbc:subprotocol:subname, info – список ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€ Ρ‚Π΅Π³/Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° String, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² соСдинСния. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° хотя Π±Ρ‹ ΠΎΠ΄Π½Π° ΠΏΠ°Ρ€Π° «имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΒ»/Β«ΠΏΠ°Ρ€ΠΎΠ»ΡŒΒ».

getConnection(String url, String user, String password) ΠŸΡ‹Ρ‚Π°Π΅Ρ‚ΡΡ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ соСдинСниС с URL-адрСсом Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹: url – адрСс Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ jdbc:subprotocol:subname, user – ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ устанавливаСтся соСдинСниС, password – ΠΏΠ°Ρ€ΠΎΠ»ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ DatabaseMetaData обСспСчиваСт ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ самой Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. НСкоторыС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π² этом интСрфСйсС ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Ρ„ΠΎΡ€ΠΌΡƒ строк. ΠœΠ΅Ρ‚ΠΎΠ΄, ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡŽΡ‰ΠΈΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ свойствС, Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΌ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠΌ, бросаСт ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ SQLException.

Π’ΠΎΡ‚ нСсколько ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π΄Π°Π½Π½ΠΎΠ³ΠΎ интСрфСйса:

getDriverName Π˜Π·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ имя Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ JDBC-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°.

getDriverVersion Π˜Π·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ вСрсии JDBC-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Π² Π²ΠΈΠ΄Π΅ строки.

getDatabaseProductVersion Π˜Π·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ вСрсии Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° Π‘Π”.

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‰ΡƒΡŽ соСдинСниС с вашСй Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…

ΠžΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΌ для установки соСдинСния

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ для получСния доступа ΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… доступны посрСдством интСрфСйса DatabaseMetaData, ассоциированного с соСдинСниСм.

Java Data Objects

JDO (Java Data Objects – ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Java) являСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌ интСрфСйсом API, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΌ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Β«ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΉΒ» доступ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π½Π° языкС Java, ΠΎΡ€Π³Π°Π½ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ Β«ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΉΒ» доступ ΠΊ основному Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π΅ привлСкая для этой Ρ†Π΅Π»ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π‘Π”.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ JDO ΠΈ JDBC Π΄ΠΎΠΏΠΎΠ»Π½ΡΡŽΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ Π΅ΡΡ‚ΡŒ свои прСимущСства, ΠΎΠ±Π΅ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ программистами Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠΉ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ для ΡˆΠΈΡ€ΠΎΠΊΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π·Π°Π΄Π°Ρ‡.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ API JDBC обСспСчиваСт Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ, прСдоставляя программистам Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ контроля Π½Π°Π΄ доступом ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ управлСния кэшСм. JDBC являСтся Π±ΠΎΠ»Π΅Π΅ Π·Ρ€Π΅Π»ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ ΠΈ ΡˆΠΈΡ€ΠΎΠΊΠΎ принята ΠΊΠ°ΠΊ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹ΠΉ API.

JDO обСспСчиваСт программистам Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ удобства, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Ρ‚ΠΈΠΏΠΎΠ² Π²ΠΎ врСмя компиляции. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, JDO скрываСт ΠΎΡ‚ программистов SQL, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ становится Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ.

API JDO создаСтся Π² Java Community Process.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *