SQL/CLI: JDBC (Java DataBase Connectivity)


Общие сведения о JDBC
JDBC — это набор реляционных объектов и методов взаимодействия с источниками данных. JDBC является частью пакета API Enterprise JavaSoft и, следовательно, частью реализации виртуальной машины Java(JVM).

JDBC, также как и ODBC, OCI и BDE, базируется на X/Open SQL/CLI. Концепция взаимодействия определены в виде интерфейсов Java.

Для обращения к конкретной СУБД необходим соответствующий JDBC-драйвер, который представляет собой набор классов, реализующих JDBC-интерфейсы.




ТИПКЛАСС
Драйверjava.sql.Driver, java.sql.DriverManager, java.sql.DriverPropertyInfo
Связь (соединение)java.sql.Connection
Операторыjava.sql.Statement, java.sql.PreparedStatement, java.sql.CallableStatement
Результатjava.sql.ResultSet
Ошибки/Предупрежденияjava.sql.SQLException, java.sql.SQLWarning
Метаданныеjava.sql.DatabaseMetaData, java.sql.ResultSetMetaData
Дата/Времяjava.sql.Date, java.sql.Time, java.sql.Timestamp
Разноеjava.sql.Numeric, java.sql.Types, java.sql.DataTruncation

Комплектация пакета JDBC

Интерфейс JDBC появился в декабре 1996 года с выходом в свет JDK 1.1., и в поставку входят три компонента:
• JDBC driver manager.
• Средства для тестирования драйверов JDBC.
• Мост JDBC-ODBC (JdbcOdbc.DLL).

Особенности взаимодействия с БД

• JDBC предполагает передачу запроса к БД в виде строки. Таким образом, могут использоваться конструкции SQL, специфичные для данной БД и/или для ее JDBC-драйвера.
• JDBC определяет работу по принципу «одно действие – один метод», поэтому используется относительно большое число простых методов, вместо нескольких с большим числом параметров-флагов.
• JDBC предполагает строгую статическую типизацию SQL-операторов для обеспечения большей защиты от ошибок на этапе компиляции в байт-код. Однако выполняются и операторы DDL, являющиеся по своей природе динамическими.

Типы драйверов JDBC

• JDBC-ODBC Bridge
• Native API as basis
• JDBC-Net
• Native protocol as basis



Категория драйверовПолностью на JAVA?Сетевой протокол
Мост JDBC-OCBCНетНепосредственно
«Родной» API в качестве основыНетНепосредственно
JDBC-NetДаТребуется «коннектор»
«Родной» сетевой протоколДаНепосредственно



Компания производительТипПоддержка базы данных
Agava Software Design3Oracle, Sybase, Informix и другие
Agava Software3Unisys A series DMSII database
Caribou Lake Software3Ingres
IBM2/3IBM DB2 Version 2
IBM4DB2 для OS/400
Hit Software5DB2, DB2/400
IDS Software3Oracle, Sybase, MS SQL Server, MS Access, Informix, Watcom и другие
Imaginary4mSQL
InterBase3InterBase
JavaSoft1Многие типы баз данных, используя механизм ODBC
Liberty Integration Software3Most PICK flavors including VMARK, Unidata, General Automation, PICK systems
OpenLink3Oracle, Informix, Sybase, MS SQL Server, CA-Ingres, Progress, Unify, PostgreSQL, Solid, and others via ODBC
Oracle Corporation2/4Oracle
SAS Institute Inc.3/4SAS и via SAS/ACCESS, Oracle, Informix, Ingres и ADABAS
SCO3/4Informix, Oracle, Ingres, Sybase, Interbase
Simba Technologies Inc.3, 4Oracle, Sybase, MS SQL
Solid Information TechnologySolid Sever
Sybase Inc.3/4Sybase SQL Server, SQL Anywhere, Sybase IQ, Replication Server servers via Sybase OmniCONNECT
Trifox Inc.3ADABAS, DB2, Informix, Ingres, Oracle, Rdb, SQL Server, Sybase и системы типа GENESIS
WebLogic3Многие типы баз данных, используя механизм ODBC
Yard Software GmbH4YARD-SQL Database

JDBC-ODBC Bridge

В таких драйверах каждое обращение к JDBC преобразуется в соответствующие вызовы функций ODBC.

Для использования драйверов этого типа необходимо наличие на каждом компьютере-клиенте драйверов ODBC для требуемого источника данных и OS Windows.

Драйверы были удобны для применения на начальном этапе, когда других JDBC драйверов еще не было.

Существует опасность того, что драйверы ODBC могут нарушить функционирование виртуальной Java-машины и вызвать ошибку в Java-программе.

Итог: Вызовы С – кода из языка Java страдают плохой защищенностью, гибкостью и переносимостью приложений.

Native API as basis

Этот тип драйверов преобразуют вызовы JDBC в вызовы клиентского API для Oracle, Sybase, Informix, DB2 и т. Д.

Как и мост JDBC-ODBC, этот тип драйверов требует, чтобы на каждой клиентской станции был установлен некоторый исполняемый не-Java код (обычно на C) и платформонезависимость Java теряется.

Например, «толстый» OCI-JDBC драйвер для Oracle, требующий установки SQL*NET(Net8).
Обычно клиент и сервер размещены на одной машине, иначе нужна программа, обеспечивающая связь между компьютерами.

JDBC-Net

Эти драйверы транслируют программные вызовы JDBC в независимый от СУБД сетевой протокол, который затем транслируется в протокол СУБД специальным промежуточным сервером. Это сетевое промежуточное серверное приложение соединяет клиентов на чистой Jave со множеством различных БД.

Этот специальный сетевой протокол зависит от конкретного поставщика, то есть жестко не стандартизован.

Это наиболее гибкий и защищенный в агрессивной среде Интернета способ.
Драйверы этого типа включают в себя два компонента: клиент и сервер.

Native protocol as basis

Этот тип драйверов преобразует программные вызовы в сетевой протокол, используемый СУБД непосредственно. Становится возможным прямое подключение клиентских машин к серверу БД.

Эти драйверы находят практическое применение в Интернет среде. Так как многие такие протоколы патентованы (являются собственностью поставщиков), то за разработку таких драйверов отвечают поставщики СУБД.

Например, «тонкий» JDBC Thin для Oracle позволяет обойтись без установки сетевого протокола Net8 на клиентском компьютере. Удобен для апплетов и сервлетов. Работают быстрее драйверов JDBC-Net.

Подключение к источнику данных через JDBC





JDBC не имеет интерактивного менеджера драйверов и подключение к нужному источнику производится только программно.

Фактически хранение настроек подключения происходит в программе на Java.

Пример загрузки драйвера выглядит так:

Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”) ;

Cоздание объекта-соединение:

Con=DriverManager.getConnection(“jdbc:odbc:myBase”; UID=”User”; PWD=”Pwd”);



JDBC API

JDBC API – это прикладной интрефейс Java для выполнения SQL-запросов. Он состоит из множества классов и интерфейсов, написанных на языке Java.

SQL typeJava type
CHARString
VARCHARString
LONGVARCHARString
NUMERICJava.math.BigDecimal
DECIMALJava.math.BigDecimal
BITBoolean
TINYINTByte
SMALLINTshort
INTEGERint
BIGINTlong
REALfloat
FLOATDouble
DOUBLEdouble
BINARYbyte[]
VARBINARYbyte[]
LONGVARBINARYbyte[]
DATEjava.sql.Date
TIMEjava.sql.Time
TIMESTAMPjava.sql.Timestamp



Oracle JDBC

Особенности JDBC в Oracle:
• Наличие объектных типов.
• Наличие JDBC-OCI Driver (Java Native Interface).
• JDBC Server-Side Internal Driver.
• Наличие JDBC Server Side Thin Driver.



import java.sql.*;
import oracle.jdbc.*;
import oracle.jdbc.pool.OracleDataSource;
class JDBCVersion {
public static void main (String args[])
throws SQLException {
OracleDataSource ods=new OracleDataSource();
ods.setURL(“jdbc:oracle:thin:scott/tiger@host:port/service”);
Connection conn=ods.getConnection();
//Create Oracle DatabaseMetaData object
DatabaseMetaData dmd=conn.getMetaData();
//gets driver info:
System.out.println(“JDBC driver version is”+dmd.getDriverVersion());}}


Комментарии запрещены.




Статистика