Java2 1.5: JDBC database toegang

  1. Inleiding
  2. Data uitlezen
  3. Data manipuleren
  4. Verbinden met SQL-Server 2000

Inleiding

Om gebruiksvriendelijk met databases aan de slag te kunnen gaan met Java werd JDBC ontwikkeld. JDBC onderhoudt de Java-kant van een connectie met een DBMS. Bij connectie met een ODBC-database kan je gebruik maken van de interne brugmogelijkheden jdbc:odbc.

Driver laden

Om een connectie te maken met een ODBC-gegevensbron zal je de JDBC-ODBC brugdriver moeten laden. Dit kan als volgt:
try {
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
} catch (ClassNotFoundException e) {
      System.out.println("Error: " + e);
}

Je bent hier verplicht een exception te onderscheppen: wanneer de driverklasse niet kan worden geïnitialiseerd wordt een ClassNotFoundException opgeworpen.

Connectie maken

Om een connectie te maken heb je een Connection-object nodig. Dit object bevat de verbindingsgegevens:
Connection con = DriverManager.getConnection(url,
                     "loginnaam", "paswoord");

Een SQLException moet worden opvangen.

url is hierbij een stringvariabele die een zogenaamde connectiestring bevat.

Wanneer je een ODBC verbindingsnaam hebt aangemaakt is die heel eenvoudig:

String url = "jdbc:odbc:odbcnaam"

Gebruik je een MS Access database dan kan je met een juiste connectiestring vermijden dat een ODBC-gegevensbron moet worden aangemaakt. Je kan met opgave van de driver voor Access en het exacte pad naar het .mdb-bestand onmiddellijk aan de slag:

String DBPAD = "E:/WWW/Cursusweb/Java/vb8/shop.mdb";
String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" +DBPAD;
Connection con = DriverManager.getConnection( url ,"","");

MS Access leent zich tot het maken van lokale kleinere applicaties. Heb je een netwerk / client-server databasesysteem nodig, dan kan je bvb. opteren voor MS SQL Server, of natuurlijk tal van andere voortreffelijke systemen.

Ik geef eerste een aantal voorbeelden van databasewerking: data lezen en data manipuleren waarbij met een Access-database wordt gewerkt, verderop wordt getoond hoe je met SQL Server 2000 kan verbinden. Andere databasesystemen kennen een analoge verbindingsmogelijkheid.

Data uitlezen

Statement en ResultSet

Om SQL-instructies op een database te kunnen uitvoeren maak je gebruik van een Statement. Een Statement maak je met de methode createStatement van een Connection-object.

Statement s = con.createStatement();

Een SQLException moet worden opvangen.

Met de methode createStatement kan je argumenten meegeven:

  1. resultSetType: geeft weer hoe je de resultaatset kan doorlopen, en of veranderingen worden weergegeven.
    • ResultSet.TYPE_FORWARD_ONLY: enkel voorwaarts doorlopen (standaard)
    • ResultSet.TYPE_SCROLL_INSENSITIVE: vooruit en achteruit doorlopen van de ResultSet, weerspiegelt geen veranderingen.
    • ResultSet.TYPE_SCROLL_SENSITIVE: vooruit en achteruit doorlopen van de ResultSet, weerspiegelt veranderingen.
  2. resultSetConcurrency: stelt in of de databasegegevens enkel kunnen gelezen of ook kunnen veranderd worden met JDBC-methoden.
    • ResultSet.CONCUR_READ_ONLY: enkel lezen van gegevens (standaard)
    • ResultSet.CONCUR_UPDATABLE: aanpassingen in de ResultSet zijn mogelijk

Een Statement wordt uitgevoerd op de database via een execute-methode. Dergelijke methoden zijn:

Wens je dus gegevens te lezen uit een database, dan ontvang je die in een ResultSet-object:

ResultSet rs = s.executeQuery("select * from klant");

De ResultSet raadplegen

Wanneer je een ResultSet hebt gevuld dan kan je de methode next gebruiken om naar een volgende record te stappen. Wanneer de ResultSet pas geladen is staat de cursor gepositioneerd voor de eerste record.

Er zijn een aantal getXXX-methodes voorhanden om gegevens uit een tabel te lezen. Meestal zal je voldoende hebben aan de methode getString. Wens je echter zonder verdere typecasting met numerieke waarden kunnen rekenen dan zal je getByte, getShort, getInt, getLong, getFloat, ... wel eens nogig hebben. Soms is het interessant de waarden gewoon als Object uit te lezen met getObject.

Deze methoden staan toe dat je de naam van het tabelveld meegeeft of een numerieke aanduiding van het veld in de tabel (te beginnen bij 1!).

while ( rs.next() ) {
    System.out.println(rs.getString("naam"));
}

Voorbeeldtoepassing

De database shop.mdb: Download dit voorbeeld in zip-formaat

Toepassing: klanten in een JCombobox

Download dit voorbeeld in zip-formaatToon /verberg

Toepassing: tabel vullen met een aangepast TableModel

Maak een klasse TM die een overerft van AbstractTableModel.
Deze klasse ontvangt in de constructor de naam van de tabel die moet worden geladen.
De data en kolomkoppen voor de JTable die het model TM gebruikt worden op deze manier vanuit de klasse TM geladen
Voor het vastleggen van de connectiestring maak je een interface DBcon aan. Deze interface implementeer je dan in de klasse TM.

Weergave tabel categorie:

Weergave tabel klant:

Download dit voorbeeld in zip-formaatToon /verberg

Toepassing: tabel laden met gebruik van een eigen TableModel gebaseerd op DefaultTableModel, modularisatie van de code.

In deze toepassing wordt de databasetoegang gescheiden van het tabelmodel.

We baseren ons voor het tabelmodel deze keer niet op AbstractTableModel maar op DefaultTableModel, hierdoor zijn veel methoden voor het tabelmodel reeds voor ons beschikbaar. We zorgen er wel voor dat de opmaak binnen de tabel afhangt van het type waarde in de kolom.

We zorgen ervoor dat de eerste kolom uit de databasetabel niet wordt getoond, we verwachten hierin de id-waarden.

Download dit voorbeeld in zip-formaatToon /verberg

Data manipuleren

Dit onderdeel leert je hoe je data kan bewerken, toevoegen en verwijderen in een database.

Wanneer je de theorie omtrent het lezen van gegevens hebt doorgenomen, dan zal je merken dat het manipuleren van databasegegevens op een analoge manier kan worden uitgevoerd.

Verbinden met een database

Het verbinden met een database werd hierboven reeds besproken. Je zorgt er eerst voor dat de juiste driver wordt geladen:
try {
     Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
} catch (ClassNotFoundException e) {
     System.out.println("Error: " + e);
}
Daarna zorg je voor een Connection-object dat de juiste gegevens voor de database bevat.
    String DBPAD = "E:/WWW/Cursusweb/Java/vb8/shop.mdb";
    String DB = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" +DBPAD ; 
	try{
         Connection con = DriverManager.getConnection( DB ,"","");
    } catch(SQLException e) {}

Gegevens manipuleren

Om gegevens in de database te manipuleren heb je een Statement object nodig. Het Statement heeft een methode executeUpdate waarmee je UPDATE, INSERT, DELETE en andere actie-queries kan uitvoeren.

Voorbeeld: bewerken van gegevens:

try{
     s = con.createStatement();
     s.executeUpdate("UPDATE categorie " +
          " set categorie='test'" +
          " where cat_id=1");
} catch (SQLException e){}
Hier werken we met de methode executeUpdate waarmee we een SQl-instructie meegeven. Je kan wanneer de juiste resultSetType en resultSetConcurrency is ingesteld ook gebruik maken van methoden van de ResultSet: updateRow, deleteRow, insertRow.

Voorbeeldtoepassing

In deze voorbeeldtoepassing leer je gegevens bewerken, toevoegen en verwijderen uit een database. Er wordt gewerkt met de methode executeUpdate van een Statement-object. We gebruiken dus telkens een aangpaste SQL-opdracht om de acties door te voeren.

Download dit voorbeeld in zip-formaatToon /verberg

Verbinden met SQL-Server 2000

Driver installeren

Een Access-database is bruikbaar voor kleine lokale toepassingen, maar wanneer je wenst te gebruik te maken van een client-server database dan kan je beter naar een ander systeem overschakelen.

Access is een bestandsgebaseerd database-systeem, waardoor je op deze manier ook geen databasetoepassingen in java-Applets kan maken (je kan vanuit de Applet geen connectie opzetten met een mdb op een server).

Voor vele toepassingen is het dan ook een beter idee om gebruik te maken van een databasesysteem zoals SQL-Server, Oracle, MySQL, ...

Om verbinding te maken met SQL-Server download je eerst de JDBC driver voor SQL-server: surf naar www.microsoft.com/downloads en zoek op "sql java" of surf meteen naar de downloadsite voor SQL-Server 2000 JDBC driver Service pack 3. Voor Windows-besturingssystemen download je setup.exe en je voert het bestand uit.

Na het downloaden staan op de locatie "C:\Program Files\Microsoft SQL Server 2000 Driver for JDBC\lib" drie bestanden op je te wachten (eventueel zal je een andere stationsletter moeten gebruiken). Als je via de prompt de java bestanden compileert voeg je de drie .jar bestanden toe aan de systeemvariabele CLASSPATH. Met NetBeans IDE hoef je dit niet te doen: in het project rechtsklik je "FileSystems" en kies je mount > Archive files. Je voegt op deze manier de drie .jar - bestanden toe.

Driver laden

De driver voor SQL-server kan je nu als volgt laden:
try {
       Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
} catch (ClassNotFoundException e) {
       System.out.println("Error: " + e);
}

Verbinding maken

Met een aangepaste connectiestring kan je nu verbinden met een database van de sql-server:
String DB = "jdbc:microsoft:sqlserver://servernaam:1433;DatabaseName=databasenaam;";
Connection con = DriverManager.getConnection( DB, "gebruikersnaam","paswoord"  );

Meer tutorials:
leer ook: html | xhtml | css | asp | asp.net | c# | ado.net | linq | ajax | java | javascript
Valid HTML 4.01! Valid CSS! © - Cursusweb