Katram draiverim ir jāimplementē sekojošie interfeisi:
Katram datubāzes draiverim vajag implementēt vēl arī java.sql.Driver interfeisu, kuru izmanto vispārīgā java.sql.DriverManager klase, kad tai jāatrod draiveris konkrētai datubāzei, izmantojot URL sintaksē rakstītu "konekcijas stringu". JDBC ir veidots pēc ODBC (Open Database Connectivity); tādēļ JDBC ar ODBC var viegli sadarboties.
Javas aplikācija var piekļūt dažādām datubāzēm ar dažādiem draiveriem; draiveri ir vai nu specializēti priekš JDBC, vai arī tiek izmantots JDBC-ODBC tilts:

Javas aplikācijā izveidojas hierarhija ar apmēram šādiem objektiem (no viena augstāka līmeņa objekta var būt atkarīgi vairāki zemāka līmeņa objekti)
Ar JDBC ir saistīti sekojoši interfeisi
c:/mysql>mysqld-nt --install
CREATE DATABASE demo; USE demo; CREATE TABLE cilveks (id INT, vards CHAR(25), uzvards CHAR(25)); INSERT INTO cilveks (id,vards,uzvards) VALUES (1,"BILL","CLINTON"); INSERT INTO cilveks (id,vards,uzvards) VALUES (1,"AL","GORE"); SELECT * FROM cilveks; quit
Piekļuvi datubāzei "demo" administrē citā datubāzē "mysql" - izmainot tajā tabulas "db" un "user". Tabulā "user" var pievienot jaunus lietotājus ar parolēm, bet tabulā "db" var uzlikt katram lietotājam atbilstošas privilēģijas.
Ja esat aizmirsuši, kādas datubāzes un tabulas Jūsu MySQL instalācijā ir saliktas, palaidiet citu programmu mysqlshow ar un bez argumentiem. Konkrēti - DOS komandrindā izpildiet šādas komandas, lai pārliecinātos, ka tiešām radusies datubāze "demo" un tajā ir tabula "cilveks".
mysqlshow mysqlshow demo
import java.sql.*;
public class DBTest {
public static void main(String[] args) throws Exception {
String drivername = "org.gjt.mm.mysql.Driver";
Class.forName(drivername).newInstance();
String url = "jdbc:mysql://localhost/demo?user=root";
Connection con = DriverManager.getConnection(url);
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("select * from cilveks");
while (rs.next()) {
int id = rs.getInt("id");
String vards = rs.getString("vards");
String uzvards = rs.getString("uzvards");
System.out.println("id = " + id
+ ", vards = " + vards
+ ", uzvards = " + uzvards);
}
}
}
Lai šo piemēru varētu palaist, ir nepieciešams JDBC draiveris priekš MySQL. Ieteicams izmantot "oficiālo" MySQL draiveri "MySQL Connector/J", kuru var dabūt šeit: http://www.mysql.com/downloads/api-jdbc.html. Tas pirms programmas palaišanas jāpievieno savam CLASSPATH:
set CLASSPATH=mysql-connector-java-2.0.14-bin.jar;. java DBTest
use mysql;
select * from user;
insert into user values (
"localhost", "dzonis", PASSWORD("dzonis"),
"Y","Y","Y","Y","Y","Y","Y",
"Y","Y","Y","Y","Y","Y","Y")
mysql -u dzonis -p Enter Password: dzonis
create database biblioteka;
use biblioteka;
create table gramata (
id INT,
autors CHAR(30),
nosaukums CHAR(30),
lappuses INT);
insert into gramata values (1, "Kaudzites",
"Mernieku Laiki", 300);
...
select * from gramata;
create user javatest identified by javatest; grant connect to javatest; grant resource to javatest;
olimpus.alise.lv:1521:itndev01
CREATE TABLE cilveks (id INT, vards CHAR(25), uzvards CHAR(25)); INSERT INTO cilveks (id, vards, uzvards) VALUES (1, 'Bill', 'Clinton'); SELECT * FROM cilveks;
String drivername = "oracle.jdbc.OracleDriver"; Class.forName(drivername).newInstance(); String url = "jdbc:oracle:thin:@olimpus.alise.lv:1521:itndev01"; Connection con = DriverManager.getConnection(url, "javatest", "javatest");
Lietotāja vārda un paroles "javatest" vietā Jums būtu jāraksta pašiem savas shēmas vārds un atbilstošā parole.
Pirms sākt komunicēt ar datubāzi, izmantojot draiveri, šo draiveri vajag ielādēt atmiņā. Sekojoša komanda pieregjistrē datubāzu draiveri draiveru pārvaldniekam (java.sql.DriverManager).
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
new org.gjt.mm.mysql.Driver();
Šis draiveris nav jāpiešķir mainīgajam, bet tas, ja JVM to izvēlēsies, apstrādās visus pieprasījumus, kuri veidojas no DB konekcijām uz atbilstošo datubāzi.
jdbc.drivers = com.imaginary.sql.msql.MsqlDriver:Acme.db.driver
JDBC izmanto pirmo atrasto draiveri, pārskatot tos sekojošā secībā:
Jānorāda URLs, kurš parasti ir sekojošā izskatā:
jdbc:subprotocol:subname
Piemēram, to iegūst ar šādu piešķiršanu:
String url = new String("jdbc:msql://" + serverName + ":1112/demo");
TCP portus klausošamies datubāzēm parasti var noskaidrot noklusēto porta numuru. Bieži vien konekciju stringu sintakse ir sarežģītāka un ir jāmeklē dokumentācijā.
Connection con = DriverManager.getConnection(url);
Draiveru pārvaldniekā metode getConnection(url) izsauc driver.connection(url) priekš "driver" instancēm, kuras ir ielādētas aplikācijā (augšminētajā prioritāšu secībā). Ja draiveris var pieslēgties datubāzei, tas atgriež "Connection" objektu. Ja draiveris nevar - tas atgriež "null" un draiveru pārvaldnieks ķeras pie nākamā draivera, utt.
Lai sūtītu pieprasījumus datubāzei, no konekcijas ir jādabū "Statement":
try {
stmt = con.createStatement();
}
catch (SQLException e) {
System.out.println(e.getMessage());
}
while (rs.next()) {
System.out.println("Customer: " + rs.getString(2));
System.out.println("Id: " + rs.getString(1));
System.out.println("");
}
Klasē ResultSet ir dažādas metodes "getXxx()":
| Metode | Atgrieztais tips |
| getBinaryStream() | java.io.InputStream |
| getBoolean() | boolean |
| getByte() | byte |
| getBytes() | byte[] |
| getDate() | java.sql.Date |
| getDouble() | double |
| getFloat() | float |
| getInt() | int |
| getLong() | long |
| getShort() | short |
| getString() | java.lang.String |
| getTime() | java.sql.Time |
Connection con = DriverManager.getConnection(url);
java.sql.PreparedStatement pstmt =
con.prepareStatement
("UPDATE table3 SET m = ? WHERE x = ?");
// Nododam 2 parametrus. Viens no tiem ciklā mainās
pstmt.setString(1, "Hi");
for (int i = 0; i < 10; i++) {
pstmt.setInt(2,i);
int j = pstmt.executeUpdate();
System.out.println(j + " rindas pamainītas, kad i = " + i);
}
| Metode | SQL tips |
| setBinaryStream() | LONGVARBINARY |
| setBoolean() | BIT |
| setByte() | TINYINT |
| setBytes() | VARBINARY vai LONGVARBINARY |
| setDate() | DATE |
| setDouble() | DOUBLE |
| setFloat() | FLOAT |
| setInt() | INTEGER |
| setLong() | BIGINT |
| setShort() | SMALLINT |
| setString() | VARCHAR vai LONGVARCHAR |
| setTime() | TIME |
String createProcedure = "create procedure SHOW_SUPPLIERS " +
"as " +
"select SUPPLIERS.SUP_NAME, COFFEES.COF_NAME " +
"from SUPPLIERS, COFFEES " +
"where SUPPLIERS.SUP_ID = COFFEES.SUP_ID " +
"order by SUP_NAME";
(Procedūrām datubāzē var būt arī ieejas un izejas parametri.) Šādu String mainīgajā ierakstītu procedūru var pievienot datubāzei, vienkārši aizsūtot JDBC konekcijai izpildāmu komandu:
Statement stmt = con.createStatement(); stmt.executeUpdate(createProcedure);
Šo procedūru var izpildīt, izmantojot JDBC interfeisus no CallableStatement:
CallableStatement cs = con.prepareCall("{call SHOW_SUPPLIERS}");
ResultSet rs = cs.executeQuery();
Beigās "rs" piepildīsies ar vajadzīgajiem datiem.