Въведение в Въведение в JDBC JDBC Димитър Кунчев Димитър Кунчев 3 rd rd Eye Solutions Eye Solutions Java Database Connectivity Java Database Connectivity
Feb 09, 2016
Въведение вВъведение в JDBC JDBC
Димитър КунчевДимитър Кунчев33rdrd Eye Solutions Eye Solutions
Java Database ConnectivityJava Database Connectivity
СъдържаниеСъдържание
1.1. Въведение вВъведение в JDBC JDBC2.2. Изпълнение на заявкиИзпълнение на заявки3.3. Различни заявкиРазлични заявки4.4. Обработка на грешкиОбработка на грешки5.5. ТранзакцииТранзакции6.6. Добрите практикиДобрите практики
JDBCJDBC
ТехнологиятаТехнологията
ЗаЗа JDBC JDBC
• JDBC JDBC е стандартен интерфейс за е стандартен интерфейс за рабрабоота с релацита с релациоонни бази данни нни бази данни презпрез Java Java• Пакетът Пакетът JDBC Core API JDBC Core API вв java.sqljava.sql
• Допълнителен пакет Допълнителен пакет JDBC 2.0 JDBC 2.0 javax.sqljavax.sql
• Пакетът Пакетът JDBC 3.0 API JDBC 3.0 API включвавключва горните двагорните два
Архитектурата на Архитектурата на JDBCJDBC
Приложение
Връзка
Driver Manager
Заявка Резултат
Драйвер Драйвер Драйвер
БазаБаза БазаБаза БазаБаза
Компоненти на Компоненти на JDBCJDBC
• Driver ManagerDriver Manager• Зарежда драйверите на базите данни и Зарежда драйверите на базите данни и
обслужва връзката между обслужва връзката между приложението и драйвераприложението и драйвера
• ДрайверДрайвер• Прехвърля извикванията (Прехвърля извикванията (API callsAPI calls)) към към
съответната базасъответната база• Връзка (Връзка (ConnectionConnection))• Сесия между приложението и драйвера Сесия между приложението и драйвера
на базатана базата
Компоненти на Компоненти на JDBC (2)JDBC (2)
• ЗаявкаЗаявка• SQL SQL заявка за извличане или промяна заявка за извличане или промяна
на даннитена данните• МетаданниМетаданни• Информация за върнатите данни, Информация за върнатите данни,
връзката или драйвера на базатавръзката или драйвера на базата• РезултатРезултат• Логическо множество от колони и Логическо множество от колони и
редове, върнато от базата - таблицаредове, върнато от базата - таблица
Достъп до данни чрезДостъп до данни чрез JDBCJDBC
Изпълнение на заявкиИзпълнение на заявки
СтъпкаСтъпка 1: 1: ЗарежданеЗареждане
• Зареждане на Зареждане на JDBC JDBC драйвер с един драйвер с един редред::
• Името на нужния ви клас, ще намерите Името на нужния ви клас, ще намерите в документацията на драйверав документацията на драйвера
• Зареждане на Зареждане на Oracle JDBCOracle JDBC драйвер: драйвер:
• Зареждане наЗареждане на JDBC-ODBC bridge driver JDBC-ODBC bridge driver
Class.forName("Class.forName("<<jdbcjdbc d driverriver class> class>");");
Class.forName("oracle.jdbc.driver.OracleDriver"); Class.forName("oracle.jdbc.driver.OracleDriver");
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
СтъпкаСтъпка 2: 2: СвързванеСвързване
• Пример за установяване на Пример за установяване на връзката през драйверавръзката през драйвера::
• Например, ако използватеНапример, ако използвате JDBC- JDBC-ODBC bridge ODBC bridge драйвер, тодрайвер, то адреса ще адреса ще започва сзапочва с " "jdbc:odbc:jdbc:odbc:““
• Подробностите за всеки драйвер Подробностите за всеки драйвер можете да намерите в можете да намерите в документацията мудокументацията му
Connection conConnection con == DriverManager.DriverManager. getConnection(getConnection(""urlurl"",, "user","user", "pass");"pass");
СтъпкаСтъпка 2: 2: Свързване с Свързване с ODBCODBC
• Пример за свързване с Пример за свързване с ODBC ODBC драйвер:драйвер:• Източникът на данни еИзточникът на данни е " "LibraryLibrary" " • DBMS DBMS потребителско име:потребителско име: " "adminadmin""• ПаролаПарола " "secretsecret""
• Establishing a connection:Establishing a connection:Connection dbCon = DriverManager.Connection dbCon = DriverManager. getConnection("jdbc:odbc:Library",getConnection("jdbc:odbc:Library", "admin","admin", "secret");"secret");
СтъпкаСтъпка 2: 2: Свързване сСвързване с OracleOracle
• Пример за връзка сПример за връзка с Oracle Oracle::• Сървърът еСървърът е Oracle 10g Express Edition, Oracle 10g Express Edition,
локална инсталациялокална инсталация• Базата се казваБазата се казва " "HRHR" " • Паролата еПаролата е " "hrhr""
• Establishing a connection:Establishing a connection:Connection dbCon = DriverManager.getConnection(Connection dbCon = DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521/xe","jdbc:oracle:thin:@localhost:1521/xe", "HR","HR", "hr");"hr");
СтъпкаСтъпка 3: 3: Създаване на Създаване на заявказаявка
• ОбектОбект StatementStatement създавасъздава SQL SQL заявките, заявките, които ще се изпратят към които ще се изпратят към DBMSDBMS• За За SELECT SELECT заявки се използва заявки се използва executeQuery()executeQuery()
• За За INSERT/UPDATE/DELETE INSERT/UPDATE/DELETE заявки -заявки - executeUpdate()executeUpdate()
• Използва се активна инстанция на обект Използва се активна инстанция на обект ConnectionConnection
Connection dbCon = DriverManager.getConnection(Connection dbCon = DriverManager.getConnection( "jdbc:odbc:Library", "admin", "secret");"jdbc:odbc:Library", "admin", "secret");Statement stmt = Statement stmt = dbCon.createStatement()dbCon.createStatement();;
СтъпкаСтъпка 4: 4: Изплнение на Изплнение на заявказаявка
• executeQuery()executeQuery() изпълняваизпълнява предварително създадената предварително създадената SQL SQL заявказаявка
• Резултатът се връща катоРезултатът се връща като ResultSetResultSet обектобектConnection dbCon =Connection dbCon = DriverManager.getConnection(DriverManager.getConnection( "jdbc:odbc:Library", "admin", "secret");"jdbc:odbc:Library", "admin", "secret");
Statement stmt = dbCon.createStatement();Statement stmt = dbCon.createStatement();
ResultSet rs = stmt.ResultSet rs = stmt.executeQueryexecuteQuery(( "SELECT first_name FROM employees");"SELECT first_name FROM employees");
СтъпкаСтъпка 4: 4: Изпълнение на Изпълнение на заявказаявка
• executeUpdate()executeUpdate() изпълняваизпълнява DML/DDL DML/DDL SQL SQL заявкизаявки• Връща се резултат – броя на Връща се резултат – броя на
променените записи в базатапроменените записи в базата
Statement stmt = dbCon.createStatement();Statement stmt = dbCon.createStatement();int rowsAffected = stmt.int rowsAffected = stmt.executeUpdateexecuteUpdate(( "UPDATE employees SET salary = salary*1.2");"UPDATE employees SET salary = salary*1.2");
СтъпкаСтъпка 5: 5: Върнатият Върнатият резултатрезултат
• ОбектътОбектът ResultSetResultSet• Потдържа курсор, сочещ към текущия Потдържа курсор, сочещ към текущия
запис (еднопосочен!)запис (еднопосочен!)• Има подходящи методи за извличане на Има подходящи методи за извличане на
даннитеданнитеResultSetResultSet rs = stmt.executeQuery( rs = stmt.executeQuery( "SELECT last_name, salary FROM employees");"SELECT last_name, salary FROM employees");while (rswhile (rs.next().next()) {) { String name = rsString name = rs.getString.getString("last_name");("last_name"); double salary = rsdouble salary = rs.getDouble.getDouble("salary");("salary"); System.out.println(name + " " + salary);System.out.println(name + " " + salary);}}
СтъпкаСтъпка 6: 6: Затваряне на Затваряне на връзкатавръзката
• Експлицитно унищожавайтеЕксплицитно унищожавайте ConnectionConnection, , StatementStatement, , ии ResultSetResultSet обектите за да обектите за да се освободят ресурситесе освободят ресурсите
try {try { Connection conn = ...; Connection conn = ...; Statement stmt = ...;Statement stmt = ...; ResultSet rset = stmt.executeQuery(ResultSet rset = stmt.executeQuery(...);...); ... ...} finally} finally // clean up// clean up rset.close(); rset.close(); stmt.close(); stmt.close(); conn.close();conn.close();}}
Обект Обект SQLExceptionSQLException• SQL SQL заявки могат да хвърлятзаявки могат да хвърлят
java.sqljava.sql..SQLExceptionSQLException по време на по време на изпълнениеизпълнениеtry {try { rset = stmt.executeQuery(rset = stmt.executeQuery( "SELECT first_name, last_name FROM employee");"SELECT first_name, last_name FROM employee"); } catch (SQLException sqlex) {} catch (SQLException sqlex) {
... // ... // ПрихващамеПрихващаме SQL SQL грешки грешки } finally {} finally { // // Почистваме използваните ресурсиПочистваме използваните ресурси try {try { if (rset != null) rset.close(); if (rset != null) rset.close(); } catch (SQLException sqlex) { } catch (SQLException sqlex) { ... // ... // Игнорираме грешки при затварянеИгнорираме грешки при затваряне }} ......}}
JDBC JDBC ЗаявкиЗаявкиИнтерфейси Интерфейси Statement, Statement,
PreparedStatement PreparedStatement ии CallableStatementCallableStatement
DML DML ЗаявкиЗаявки
1.1. Създаваме Създаваме StatementStatement обектобект
2.2. ИзвиквамеИзвикваме executeUpdate()executeUpdate() за да за да изпълним заявкатаизпълним заявката
• ПримерПример
Statement stmt = conn.createStatement();Statement stmt = conn.createStatement();
int count = stmt.executeUpdate(sql_dml_statement);int count = stmt.executeUpdate(sql_dml_statement);
Statement stmt = conn.createStatement();Statement stmt = conn.createStatement();
int rowsDeleted = stmt.executeUpdate("DELETE FROM int rowsDeleted = stmt.executeUpdate("DELETE FROM order_items WHERE order_id = 2354");order_items WHERE order_id = 2354");
Неизвестни заявкиНеизвестни заявки
1.1. Създаване Създаване StatementStatement обектобект
2.2. ИзвиквамеИзвикваме execute()execute() за да изпълнимза да изпълним
3.3. Обработваме резултатаОбработваме резултата
Statement stmt = conn.createStatement();Statement stmt = conn.createStatement();
boolean result = stmt.execute(SQLstatement); boolean result = stmt.execute(SQLstatement);
if (result) {if (result) { // // било е било е selectselect ResultSet r = stmt.ResultSet r = stmt.getResultSetgetResultSet(); ...(); ...}}else { // else { // било е било е update update или от сортаили от сорта int count = stmt.int count = stmt.getUpdateCountgetUpdateCount(); ...(); ...}}
Prepared StatementPrepared Statementss
• PreparedStatementPreparedStatement се използват за:се използват за:• Изпълнение на заявка с параметриИзпълнение на заявка с параметри• Многократно изпълнение на заявкаМногократно изпълнение на заявка
String insertString insertSQLSQL = "INSERT INTO employees(" + = "INSERT INTO employees(" + "first_name, last_name, salary) VALUES(?,?,?)";"first_name, last_name, salary) VALUES(?,?,?)";PreparedStatement stmt =PreparedStatement stmt = ccon.prepareStatement(inserton.prepareStatement(insertSQLSQL););stmt.setString(stmt.setString(11,, "Svetlin" "Svetlin"););stmt.setString(stmt.setString(22,, "Nakov" "Nakov"););stmt.setstmt.setDoubleDouble(3,(3, 25000.0 25000.0););stmt.executeUpdate();stmt.executeUpdate();
Prepared StatementPrepared Statements –s –ДДобритобритее практики практики
• Използвайте винаги, когато имате Използвайте винаги, когато имате заявки с параметри. Това е много по заявки с параметри. Това е много по добре от употребата на оператор добре от употребата на оператор "+""+"
• Използвайте именовани параметриИзползвайте именовани параметри
String insertSQL = "INSERT INTO employees(" +String insertSQL = "INSERT INTO employees(" + "first_name, last_name) VALUES(@fn, @ln)";"first_name, last_name) VALUES(@fn, @ln)";PreparedStatement stmt =PreparedStatement stmt = con.prepareStatement(insertSQL);con.prepareStatement(insertSQL);stmt.setString("@fn", "Svetlin");stmt.setString("@fn", "Svetlin");stmt.setString("@ln", "Nakov");stmt.setString("@ln", "Nakov");stmt.executeUpdate();stmt.executeUpdate();
Четене на автоматично Четене на автоматично генерирангенериран ключключ
• За сървъри, които потдържатЗа сървъри, които потдържат "auto "auto increment" increment" ключовеключове• НапримерНапример MS SQL Server, MySQL, ... MS SQL Server, MySQL, ...• JDBC JDBC има достъп до генерираната има достъп до генерираната
стойностстойност// // добавяме запис...добавяме запис...int rowCount = stmt.executeUpdate(int rowCount = stmt.executeUpdate( "INSERT INTO Messages(Msg) VALUES ('Test')","INSERT INTO Messages(Msg) VALUES ('Test')", Statement.RETURN_GENERATED_KEYSStatement.RETURN_GENERATED_KEYS););
// // ... и взимаме ключа... и взимаме ключаResultSet rs = stmt.ResultSet rs = stmt.getGeneratedKeysgetGeneratedKeys();();rs.next();rs.next();long primaryKey = rs.getLong(1);long primaryKey = rs.getLong(1);
Заявки за извикванеЗаявки за извикване• ИнтерфейсИнтерфейс CallableStatementCallableStatement• За изпълнение на съхранени За изпълнение на съхранени
процедурипроцедури• Приема входни параметриПриема входни параметри• Връща резултатВръща резултат
• Пример:Пример:CallableStatement callStmt =CallableStatement callStmt = dbCon.prepareCall("call SP_Insert_Msg(?,?)");dbCon.prepareCall("call SP_Insert_Msg(?,?)");callStmt.setString(1, msgText);callStmt.setString(1, msgText);callStmt.callStmt.registerOutParameterregisterOutParameter(2, Types.BIGINT);(2, Types.BIGINT);callStmt.executeUpdate();callStmt.executeUpdate();long id = callStmt.getLong(2);long id = callStmt.getLong(2);
Работа с транзакции вРабота с транзакции в JDBCJDBC
ТранзакцииТранзакции
• Транзакцията е набор от заявки, които Транзакцията е набор от заявки, които трябва или да се изпълнят всичките, трябва или да се изпълнят всичките, или нито еднаили нито една
• Обикновенно транзакцията има вида:Обикновенно транзакцията има вида:1.1.Отваряне на транзакцяиОтваряне на транзакцяи2.2.Изпълнение на няколко Изпълнение на няколко DMLDML заявки заявки3.3.Записване на транзакциятаЗаписване на транзакцията
• Ако някоя от заявките не се изпъни Ако някоя от заявките не се изпъни успешно цялата транзакция не се успешно цялата транзакция не се записвазаписва
ТранзакцииТранзакции
• Установяване на Установяване на JDBCJDBC в режим с в режим с транзакциитранзакции::• По подразбиране е режим По подразбиране е режим Auto-CommitAuto-Commit• Транзакциите се включват с Транзакциите се включват с setAutoCommit(false)setAutoCommit(false)
• В режим В режим auto-commit auto-commit всяка заявка се всяка заявка се изпълнява в отделна транзакцияизпълнява в отделна транзакция
• ПриПри auto-commit off, auto-commit off, промените няма да се промените няма да се запишат преди извикване на запишат преди извикване на commit()commit()
• Може да се върнем в Може да се върнем в auto-commitauto-commit режим с режим с setAutoCommit(truesetAutoCommit(true))
ТранзакцииТранзакции – – Пример Пример
• Ако не искаме промените да се запишат Ако не искаме промените да се запишат извиквамеизвикваме rollbackrollback()()
dbCon.setAutoCommit(false);dbCon.setAutoCommit(false);try {try { Statement stmt = con.createStatement();Statement stmt = con.createStatement(); stmt.executeUpdate("INSERT INTO Groupsstmt.executeUpdate("INSERT INTO Groups " +" + "VALUES"VALUES (101, '(101, 'AdministratorsAdministrators')");')"); stmt.executeUpdate("INSERT INTO Users " +stmt.executeUpdate("INSERT INTO Users " + "VALUES (NULL, 'Mary', 101)");"VALUES (NULL, 'Mary', 101)"); dbCon.commit();dbCon.commit();} catch (Exception ex) {} catch (Exception ex) { dbCon.rollback();dbCon.rollback(); throw ex;throw ex;}}
JDBCJDBC – добрите практики – добрите практики
Database Specific Database Specific PropertiesProperties
• Можете да предадете специфична Можете да предадете специфична информация към базата при информация към базата при установяване на връзката чрез обект установяване на връзката чрез обект PropertiesProperties
• Например при сървър Например при сървър Oracle:Oracle:Properties props = new java.util.Properties();Properties props = new java.util.Properties();
props.put("user", "scott");props.put("user", "scott");props.put("password", "tiger");props.put("password", "tiger");props.put("defaultRowPrefetch", "30");props.put("defaultRowPrefetch", "30");props.put("defaultBatchValue", "5");props.put("defaultBatchValue", "5");
Connection dbCon = DriverManger.getConnection(Connection dbCon = DriverManger.getConnection( "jdbc:oracle:thin:@hoststring", props); "jdbc:oracle:thin:@hoststring", props);
Изолация на транзакцииИзолация на транзакции
• Установяване на режим на изолация - Установяване на режим на изолация - setTransactionIsolation(setTransactionIsolation(levellevel))
Transaction LevelTransaction LevelPermitted PhenomenaPermitted Phenomena
ImpactImpactDirty Dirty
ReadsReadsNon-Repeatable Non-Repeatable
ReadsReadsPhantom Phantom
ReadsReads
TRANSACTION_NONETRANSACTION_NONE -- -- -- FASTESTFASTEST
TRANSACTION_READ_TRANSACTION_READ_UNCOMMITEDUNCOMMITED YESYES YESYES YESYES FASTESTFASTEST
TRANSACTION_READ_TRANSACTION_READ_COMMITEDCOMMITED NONO YESYES YESYES FASTFAST
TRANSACTION_REPEATRANSACTION_REPEATABLE_READTABLE_READ NONO NONO YESYES MEDIUMMEDIUM
TRANSACTION_SERIALITRANSACTION_SERIALIZABLEZABLE NONO NONO NONO SLOWSLOW
ResultSet ResultSet МетаданниМетаданни
• КласКлас ResultSetMetaDataResultSetMetaData• Използва се за извличане на Използва се за извличане на
метаданните (колони, типове, ... ) от метаданните (колони, типове, ... ) от ResultSetResultSet обектобект
ResultSet rs = stmt.executeQuery(ResultSet rs = stmt.executeQuery( "SELECT "SELECT ** FROM employees"); FROM employees");ResultSetMetaData rsm = rs.getMetaData();ResultSetMetaData rsm = rs.getMetaData();int number = int number = rsm.getColumnCount();rsm.getColumnCount();ffor (int i=0; i<number;or (int i=0; i<number; i++)i++) { { System.out.println(System.out.println(rsm.getColumnName(i)rsm.getColumnName(i)););}}
Почистване ненужните Почистване ненужните ресурсиресурси
• Експлицитното затваряне на обектите Експлицитното затваряне на обектите позволява на позволява на garbage collector-garbage collector-а да а да освободи максимално бързо освободи максимално бързо ресурситересурсите
• Унищожавайте Унищожавайте Statement Statement обектите обектите веднага след прочитането имведнага след прочитането им
• Използвайте Използвайте try-finally try-finally за да сте за да сте сигурни, че ресурсите ще се сигурни, че ресурсите ще се освободят, дори и при грешкаосвободят, дори и при грешка
Правилната заявкаПравилната заявка
• Използвайте Използвайте PreparedStatement PreparedStatement когато когато заявката ще се изпълнява повече от заявката ще се изпълнява повече от веднъж, или когато се конструира с веднъж, или когато се конструира с данни от потребителяданни от потребителя
• ИзползвайтеИзползвайте CallableStatementCallableStatement когато ви трябва резултат от много и когато ви трябва резултат от много и сложни заявки за да получите един сложни заявки за да получите един краен резултаткраен резултат
Изпращане на няколко Изпращане на няколко заявки наведнъжзаявки наведнъж
• Изпращайте едновременно няколко Изпращайте едновременно няколко заявки за да намалитезаявки за да намалите извикванията къмизвикванията към JDBC JDBC и да подобрите скоросттаи да подобрите скоростта::
• Можете да подобрите скоростта като Можете да подобрите скоростта като повишите броя записи, които се връщат в повишите броя записи, които се връщат в един пакет от сървъра към драйвераедин пакет от сървъра към драйвера
statement.addBatch("sql_query1");statement.addBatch("sql_query1");statement.addBatch("sql_query2");statement.addBatch("sql_query2");statement.addBatch("sql_query3");statement.addBatch("sql_query3");
statement.executeBatch();statement.executeBatch();
sstatement.setFetchSize(30);tatement.setFetchSize(30);
Оптимизирайте заявкитеОптимизирайте заявките
• ЛошоЛошо::
• ДобреДобре::
Statement stmt = con.createStatement();Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(ResultSet rs = stmt.executeQuery( ""SELECTSELECT ** FROMFROM EMPLOYEEEMPLOYEE WHEREWHERE IDID==11");");
Statement stmt = con.createStatement();Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(ResultSet rs = stmt.executeQuery( ""SELECTSELECT SALARYSALARY FROMFROM EMPLOYEEEMPLOYEE WHEREWHERE ID=1ID=1");");
Списък на Списък на JDBC JDBC драйверидрайвери (1)(1)
Списък на драйверите за някои Списък на драйверите за някои RDBMS RDBMS ::• IBM DB2IBM DB2
jdbc:db2://<HOST>:<PORT>/<DB>jdbc:db2://<HOST>:<PORT>/<DB>COM.ibm.db2.jdbc.app.DB2DriverCOM.ibm.db2.jdbc.app.DB2Driver
• JDBC-ODBC BridgeJDBC-ODBC Bridgejdbc:odbc:<DB>jdbc:odbc:<DB>sun.jdbc.odbc.JdbcOdbcDriver sun.jdbc.odbc.JdbcOdbcDriver
• Microsoft SQL ServerMicrosoft SQL Serverjdbc:weblogic:mssqlserver4:<DB>@<HOST>:<PORT>jdbc:weblogic:mssqlserver4:<DB>@<HOST>:<PORT>weblogic.jdbc.mssqlserver4.Driver weblogic.jdbc.mssqlserver4.Driver
• Oracle ThinOracle Thinjdbc:oracle:thin:@<HOST>:<PORT>:<SID>jdbc:oracle:thin:@<HOST>:<PORT>:<SID>oracle.jdbc.driver.OracleDriver oracle.jdbc.driver.OracleDriver
• PointBase Embedded ServerPointBase Embedded Serverjdbc:pointbase://embedded[:<PORT>]/<DB>jdbc:pointbase://embedded[:<PORT>]/<DB>com.pointbase.jdbc.jdbcUniversalDriver com.pointbase.jdbc.jdbcUniversalDriver
• CloudscapeCloudscapejdbc:cloudscape:<DB>jdbc:cloudscape:<DB>COM.cloudscape.core.JDBCDriver COM.cloudscape.core.JDBCDriver
• Cloudscape RMICloudscape RMIjdbc:rmi://<HOST>:<PORT>/jdbc:cloudscape:<DB>jdbc:rmi://<HOST>:<PORT>/jdbc:cloudscape:<DB>RmiJdbc.RJDriver RmiJdbc.RJDriver
• Firebird (JCA/JDBC Driver)Firebird (JCA/JDBC Driver)jdbc:firebirdsql:[//<HOST>[:<PORT>]/]<DB>jdbc:firebirdsql:[//<HOST>[:<PORT>]/]<DB>org.firebirdsql.jdbc.FBDriver org.firebirdsql.jdbc.FBDriver
Списък на Списък на JDBC JDBC драйверидрайвери (2)(2)
• IDS ServerIDS Serverjdbc:ids://<HOST>:<PORT>/conn?dsn='<ODBC_DSN_NAME>'jdbc:ids://<HOST>:<PORT>/conn?dsn='<ODBC_DSN_NAME>'ids.sql.IDSDriver ids.sql.IDSDriver
• Informix Dynamic ServerInformix Dynamic Serverjdbc:informix-sqli://<HOST>:<PORT>/<DB>:INFORMIXSERVER=<SERVER_NAME>jdbc:informix-sqli://<HOST>:<PORT>/<DB>:INFORMIXSERVER=<SERVER_NAME>com.informix.jdbc.IfxDriver com.informix.jdbc.IfxDriver
• InstantDB (v3.13 and earlier)InstantDB (v3.13 and earlier)jdbc:idb:<DB>jdbc:idb:<DB>jdbc.idbDriver jdbc.idbDriver
• InstantDB (v3.14 and later)InstantDB (v3.14 and later)jdbc:idb:<DB>jdbc:idb:<DB>org.enhydra.instantdb.jdbc.idbDriver org.enhydra.instantdb.jdbc.idbDriver
• Interbase (InterClient Driver)Interbase (InterClient Driver)jdbc:interbase://<HOST>/<DB>jdbc:interbase://<HOST>/<DB>interbase.interclient.Driver interbase.interclient.Driver
• Hypersonic SQL (v1.2 and earlier)Hypersonic SQL (v1.2 and earlier)jdbc:HypersonicSQL:<DB>jdbc:HypersonicSQL:<DB>hSql.hDriver hSql.hDriver
• Hypersonic SQL (v1.3 and later)Hypersonic SQL (v1.3 and later)jdbc:HypersonicSQL:<DB>jdbc:HypersonicSQL:<DB>org.hsql.jdbcDriver org.hsql.jdbcDriver
• Microsoft SQL Server (JTurbo Driver)Microsoft SQL Server (JTurbo Driver)jdbc:JTurbo://<HOST>:<PORT>/<DB>jdbc:JTurbo://<HOST>:<PORT>/<DB>com.ashna.jturbo.driver.Driver com.ashna.jturbo.driver.Driver
• Microsoft SQL Server (Sprinta Driver)Microsoft SQL Server (Sprinta Driver)jdbc:inetdae:<HOST>:<PORT>?database=<DB>jdbc:inetdae:<HOST>:<PORT>?database=<DB>com.inet.tds.TdsDriver com.inet.tds.TdsDriver
Списък на Списък на JDBC JDBC драйверидрайвери (3)(3)
• Microsoft SQL Server 2000 (Microsoft Driver)Microsoft SQL Server 2000 (Microsoft Driver)jdbc:microsoft:sqlserver://<HOST>:<PORT>[;DatabaseName=<DB>]jdbc:microsoft:sqlserver://<HOST>:<PORT>[;DatabaseName=<DB>]com.microsoft.jdbc.sqlserver.SQLServerDriver com.microsoft.jdbc.sqlserver.SQLServerDriver
• MySQL (MM.MySQL Driver)MySQL (MM.MySQL Driver)jdbc:mysql://<HOST>:<PORT>/<DB>jdbc:mysql://<HOST>:<PORT>/<DB>org.gjt.mm.mysql.Driver org.gjt.mm.mysql.Driver
• Oracle OCI 8iOracle OCI 8ijdbc:oracle:oci8:@<SID>jdbc:oracle:oci8:@<SID>oracle.jdbc.driver.OracleDriver oracle.jdbc.driver.OracleDriver
• Oracle OCI 9iOracle OCI 9ijdbc:oracle:oci:@<SID>jdbc:oracle:oci:@<SID>oracle.jdbc.driver.OracleDriver oracle.jdbc.driver.OracleDriver
• PostgreSQL (v6.5 and earlier)PostgreSQL (v6.5 and earlier)jdbc:postgresql://<HOST>:<PORT>/<DB>jdbc:postgresql://<HOST>:<PORT>/<DB>postgresql.Driver postgresql.Driver
• PostgreSQL (v7.0 and later)PostgreSQL (v7.0 and later)jdbc:postgresql://<HOST>:<PORT>/<DB>jdbc:postgresql://<HOST>:<PORT>/<DB>org.postgresql.Driver org.postgresql.Driver
• Sybase (jConnect 4.2 and earlier)Sybase (jConnect 4.2 and earlier)jdbc:sybase:Tds:<HOST>:<PORT>jdbc:sybase:Tds:<HOST>:<PORT>com.sybase.jdbc.SybDriver com.sybase.jdbc.SybDriver
• Sybase (jConnect 5.2)Sybase (jConnect 5.2)jdbc:sybase:Tds:<HOST>:<PORT>jdbc:sybase:Tds:<HOST>:<PORT>com.sybase.jdbc2.jdbc.SybDriver com.sybase.jdbc2.jdbc.SybDriver