Για το παράδειγμα που ακολουθεί πρέπει να μεταφορτώσετε το αρχείο
SQLiteTest.zip.
O κώδικας που ακολουθεί είναι ένα πολύ απλό πρόγραμμα Java που διαχειρίζεται μια απλή βάση δεδομένων του RDBMS SQLite με όνομα test.db.
import java.sql.*;Τα σημαντικά μέρη του κώδικα είναι τα παρακάτω:
public class Test {
public static void main(String[] args) {
System.out.println("Testing SQLite Base.");
try {
Class.forName("org.sqlite.JDBC");
String url = "jdbc:sqlite:test.db";
Connection con = DriverManager.getConnection(url);
DatabaseMetaData dbMetaData = con.getMetaData();
String productName = dbMetaData.getDatabaseProductName();
System.out.println("Database: " + productName);
String productVersion = dbMetaData.getDatabaseProductVersion();
System.out.println("Version: " + productVersion);
Statement st = con.createStatement();
st.execute("create table student(id integer, name varchar(255))");
st.execute("insert into student values (5, 'A')");
st.execute("insert into student values (6, 'B')");
String query = "select * from student";
ResultSet rs = st.executeQuery(query);
while (rs.next()) {
System.out.println(rs.getString(2));
}
rs.close();
st.close();
con.close();
} catch(Exception e) {
System.out.println(e);
}
System.out.println("End of testing.");
}
}
1. Φόρτωμα JDBC Driver. Η εντολή
Class.forName("org.sqlite.JDBC")φορτώνει το JDBC driver του DBMS SQLite κατά την εκτέλεση, όχι κατά τη μεταγλώττιση. Το όνομα διαδρομής της κλάσης του JDBC driver μπορεί να είναι σχετικό ή απόλυτο. Σε περίπτωση που ο JDBC driver διατίθεται σε jar τότε το όνομα διαδρομής πρέπει να περιληφθεί στο CLASSPATH της JVM κατά την εκτέλεση:
$java -cp .:<jdbc.classpath.jar> Test2. Καθορισμός του URL της βάσης με την οποία θα συνδεθούμε. Οι εντολές
String url = "jdbc:sqlite:test.db";ορίζουν οτι η βάση test.db είναι αυτή με την οποία θα συνδεθούμε. Τα δύο πρώτα τμήματα του URL string είναι προφανή. Το τρίτο μέρος μπορεί να είναι ένα πλήρες URL, της μορφής http://hostname:port:pathname. Στη περίπτωσή μας ή βάση test.db βρίσκεται στον ίδιο κατάλογο με το πρόγραμμα που εκτελείται (σχετικό όνομα διαδρομής). Κατόπιν δημιουργούμε ένα αντικείμενο Connection
Connection con = DriverManager.getConnection(url);
Σε περίπτωση άλλου DBMS η σύνταξη της μεθόδου getConnection() μπορεί να είναι διαφορετική, αν για παράδειγμα το DBMS απαιτεί όνομα χρήστη, συνθηματικό κλπ. Ακολουθεί παράδειγμα σύνδεσης με DBMS Oracle
String host = "dbhost.yourcompany.com";και ένα παράδειγμα MySQL
String dbName = "someName";
int port = 1234;
String oracleURL = "jdbc:oracle:thin:@" + host + ":" + port + ":" + dbName;
String username = "jay_debesee";
String password = "secret";
Connection con = DriverManager.getConnection(oracleURL, username, password);
String url = "jdbc:mysql://dbhost.yourcompany.com/someName";Tο αρχείο
String username = "jay_debesee";
String password = "secret";
Connection con = DriverManager.getConnection(url, username, password);MySQLTest.java
. περιέχει τον ίδιο απλό κώδικα για MySQL βάση, αλλά δεν περιέχε JDBC driver και προυποθέτει σύνδεση με απομακρυσμένη βάση.
3. Το επόμενο βήμα είναι προαιρετικό και επιτρέπει την ανάκτηση μετα-δεδομένων του DBMS. Οι εντολές
DatabaseMetaData dbMetaData = con.getMetaData();εμφανίζουν στοιχεία όπως το τύπο και την έκδοση του DBMS.
String productName = dbMetaData.getDatabaseProductName();
System.out.println("Database: " + productName);
String productVersion = dbMetaData.getDatabaseProductVersion();
System.out.println("Version: " + productVersion);
4. Δημιουργία αντικειμένου Statemenent. Η εντολή
Statement st = con.createStatement();δημιουργεί ένα αντικείμενο Statement μέσω του οποίου αποστέλονται ερωτήματα στη βάση δεδομένων.
5. Εκτέλεση ερωτημάτων που δεν επιστρέφουν αποτέλεσμα. Οι εντολές
st.execute("create table student(id integer, name varchar(255))");εκτελούν ερωτήματα SQL μέσω του αντικείμενου Statement στη βάση. Το πρώτο ερώτημα δημιουργεί ένα πίνακα με δύο στήλες. Τα άλλα δύο ερωτήματα εισάγουν από μία γραμμή το καθένα στο πίνακα.
st.execute("insert into student values (5, 'A')");
st.execute("insert into student values (6, 'B')");
6. Εκτέλεση ερωτημάτων που επιστρέφουν αποτέλεσμα. Οι εντολές
String query = "select * from student";δημιουργούν ένα ερώτημα SQL στο string query. Το αποτέλεσμα εκτέλεσης του ερωτήματος επιστρέφει στο αντικείμενο ResultSet rs. Ο βρόχος while εμφανίζει τα αποτελέσματα του ερωτήματος όσο το rs περιέχει αποτελέσματα.
ResultSet rs = st.executeQuery(query);
while (rs.next()) {
System.out.println(rs.getString(2));
}
7. Κλείσιμο σύνδεσης. Οι εντολές
rs.close();κλείνουν τα αντικείμενα ResultSet, Satement και Connection.
st.close();
con.close();
Εξαιρέσεις (Exceptions): το μεγαλύτερο τμήμα του κώδικα περικλείεται σε ένα try - catch που συλλαβάνει σφάλματα σχετικά με το JDBC. Εναλλακτικά θα μπορούσαμε να έχουμε ξεχωριστά try - catch blocks σε κάθε ενότητα του κώδικα, πράγμα που θα μας επέτρεπε λεπτομερέστερο χειρισμό των εξαιρέσεων (βλ. το πιο σύνθετο παράδειγμα JDBC).