JavaK Jou gratis hulpbron vir Java Kennis! ENGLISH  
     
  Tuisblad Kontak Artikels Projekte Vrae en Antwoorde Skakels  
     
 


Hoe om Java (JDBC) en Microsoft Access te gebruik.

Meeste skoliere en studente maak gebruik van die Windows bedryfstelsel, en vir hulle take en projekte gebruik hulle dus die Microsoft Access databasis program wat saam met Microsoft Office uitkom. Access is 'n baie nuttige program en 'n mens kan baie lekker daarmee werk, veral as jy die moeite doen om dit goed te leer ken. In hierdie artikel kyk ons dan na hoe om met Java 'n Access .MDB databasis oop te maak en so 'n paar SQL (Structured Query Language) opdragte uit te voer.

Baie dankie aan Mnr. Koos Viktor (Labori Hoërskool, Paarl) wat die manier van koppel aan 'n databasis die eerste keer onder my aandag gebring het.

Wat die voorbeeld doen:
TestAccess.java skep 'n verbinding na die databasis, maak dit oop en vertoon dan selektiewe inligting oor die spesifieke databasis op die skerm. Meer inligting volg net na die afvoer skerm.

Bronkode vir TestAccess.java
                      /**
                      * Opens a Microsoft Access Database without having need to
                      * have access rights to the Administrative Tools on Windows
                      * to set up any ODBC connections.
                      *
                      * Maak 'n Microsoft Access databasis oop in Java sonder dat
                      * enige verstellings in die Administrative Tools gemaak hoef
                      * te word vir ODBC verbindings.
                      *
                      * Die res van die kommentaar is meestal in Engels, ek is seker
                      * daarvan dat almal darem sal saam stem dat dit moeilik is om
                      * Java kode in "suiwer" Afrikaans te verduidelik. Die artikel
                      * op www.javak.co.za is darem meestal in Afrikaans!
                      */
                      import java.awt.Toolkit;
                      import java.sql.*;
                      import javax.swing.JOptionPane;
                      /**
                      * @author Ewald Horn
                      * @company JavaK
                      */
                      public class TestAccess
                      {
                      public static Connection con;
                      public static final String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
                      public static final String url = "jdbc:odbc:" +
                      "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=";
                      /**
                      * The path to the database file. It is important to remember
                      * that on Windows platforms the path character \ must be escaped
                      * with another \ so you will write "C:\\" instead of just "C:\".
                      */
                      String path;
                      ////////////////////////////////////////////////////////////
                      /** Constructor
                      * Sets the path to the database.
                      *
                      * Stel die pad na die databasis.
                      */
                      public TestAccess ()
                      {
                      path = "D:\\JavaKToets.mdb";
                      }
                      ////////////////////////////////////////////////////////////
                      /**
                      * Runner method for the TestAccess class.
                      */
                      private void go ()
                      {
                      makeConnection ();
                      displayStatus ();
                      closeConnection ();
                      }
                      ////////////////////////////////////////////////////////////
                      /**
                      * Creates the database connection.
                      *
                      * Skep die brug na die databasis.
                      */
                      public void makeConnection ()
                      {
                      System.out.println ("\n\n\nOpening database...");
                      try
                      {
                      Class.forName (driver);
                      con = DriverManager.getConnection (url + path);
                      }
                      catch (Exception ex)
                      {
                      Toolkit q = Toolkit.getDefaultToolkit ();
                      q.beep ();
                      JOptionPane.showMessageDialog (null,
                      "Problem with the connection to database.\n",
                      "Database Error", JOptionPane.ERROR_MESSAGE);
                      System.err.println (ex);
                      System.exit (0);
                      }
                      }
                      ////////////////////////////////////////////////////////////
                      /**
                      * Closes the connection cleanly.
                      *
                      * Sluit die databasis af.
                      */
                      public void closeConnection ()
                      {
                      System.out.println ("\nClosing database.");
                      try
                      {
                      con.close ();
                      }
                      catch (Exception ex)
                      {
                      Toolkit q = Toolkit.getDefaultToolkit ();
                      q.beep ();
                      JOptionPane.showMessageDialog (null,
                      "Problem closing the database.\n",
                      "Database Error", JOptionPane.ERROR_MESSAGE);
                      System.err.println (ex);
                      }
                      }
                      ////////////////////////////////////////////////////////////
                      /**
                      * Displays some information regarding the database
                      * connection as well as a list of the general TABLES
                      * in the database.
                      *
                      * Vertoon inligting oor die databasis asook die gewone
                      * TABLES in die databasis.
                      */
                      public void displayStatus ()
                      {
                      if (con != null)
                      {
                      try
                      {
                      // display the database name
                      System.out.println (con.getCatalog ());
                      // retrieve information about the database
                      DatabaseMetaData metaData = con.getMetaData ();
                      System.out.println ("Database Product : " +
                      metaData.getDatabaseProductName ());
                      System.out.println ("Database Driver  : " +
                      metaData.getDriverName ());
                      System.out.println("TABLES:\n");
                      ResultSet rs = metaData.getTables (null,
                      null,
                      null,
                      new String[]{"TABLE"});
                      while (rs.next ())
                      {
                      // 3rd String contains the table name
                      System.out.println (rs.getString (3));
                      }
                      rs.close ();
                      }
                      catch (Exception e)
                      {
                      System.err.println ("Error : " + e);
                      }
                      }
                      }
                      ////////////////////////////////////////////////////////////
                      /**
                      * Main method for TestAccess.java
                      * @param args
                      */
                      public static void main (String args[])
                      {
                      TestAccess testAccess = new TestAccess ();
                      testAccess.go ();
                      }
                      }
                    


Afvoer vir die TestAccess program:
                      Opening database...
                      D:\JavaKToets
                      Database Product : ACCESS
                      Database Driver  : JDBC-ODBC Bridge (odbcjt32.dll)
                      TABLES:
                      NaamVanTabel
                      Resepte
                      Closing database.
                    

Stap vir stap deur TestAccess.java:
Kom ons kyk 'n bietjie na wat TestAccess.java doen. Die eerste ding wat jy sal oplet is dat ons twee nuwe imports het. Die eerste is java.awt.Toolkit en daarna volg java.sql.* . Beide is nuut, maar jy kan seker sien dat java.sql.* iets met SQL databasis programmering te doen moet hê? Die Toolkit import is nodig vir die beeps wat die rekenaar maak wanneer daar foute is in die program. O ja, amper vergeet ek, jy't heel waarskynlik ook nog nie vir javax.swing.JOptionPane as 'n import raakgeloop nie. Aangesien ek slegs vir JOptionPane in die program gebruik en geen ander GUI komponente nie, voer ek slegs vir JOptionPane in. Jy kon ewe maklik ook net vir javax.swing.* ingevoer het en die program sou ewe goed gewerk het.

Daar is drie static veranderlikes in my hoof klas. Die eerste, con, is van die tipe Connection en dit dui op 'n verbinding met die databasis drywer. Die verskriklike string "sun.jdbc.odbc.JdbcOdbcDriver" is 'n direkte verbinding met die Java JDBC-ODBC konneksie wat Java instaat stel om met Microsoft Access databasisse te kommunikeer. Dit word gevolg deur 'n URL (universal resource locator) string wat vir die JDBC-ODBC drywer presies sê met watter tipe databasis ek wil skakel. In die geval wil ons graag met 'n Microsoft Access databasis skakel en dus spesifiseer ek die drywer.

Die String path word gebruik om die pad na die databasis te stoor. Jy sal sien dat ek in die constructor van TestAccess die pad spesifiseer wat die rekenaar moet volg om by die databasis (.mdb) dokument uit te kom. In my geval is die databasis gestoor op my D: skyf, so my pad is "D:\\JavaKToets.mdb". Onthou om die volledige pad te spesifiseer, tesame met die uitbreiding (.mdb) van die dokument.

Die go metode roep maar net drie ander metodes en is 'n nuts-metode om my runner klas so kort as moontlik te hou. Dit bring ons dan by die makeConnection() metode. Hier is waar dinge begin gebeur. Eerstens : Dis belangrik om altyd alles wat jy met 'n databasis doen, te doen binne-in 'n try-catch blok. Dit sal keer dat jou program allerlei vreeslike foute begaan. Databasisse kan nogal moeilik wees om te verstaan, en daar kan soveel dinge verkeerd gaan dat jy maar eerder veilig moet speel. Soos jy kan sien voer ek al my opdragte in makeConnection() binne-in die try-catch blok uit om te voorkom dat die hele program vou as iets verkeerd loop.

Die Class.forName(driver) en Con = DriverManager.getConnection(url + path) opdragte is al wat nodig is om die regte drywer te laai EN 'n konneksie met die databasis te maak. Wie't gesê Java is 'n moeilike taal ? Indien daar iets fout gaan maak die rekenaar 'n beep geluid en vertoon 'n fout boodskap in 'n JOptionPane waarna die program afsluit.

Die volgende metode in die bronkode is die closeConnection() metode. Indien die databasis toegemaak moet word, soos wanneer die program toemaak, word die metode geroep om dataverlies te voorkom. Dit stuur eenvoudig 'n opdrag aan die con veranderlike wat dat die databasis afsluit. Indien iets fout gaan word 'n fout boodskap vertoon, want ons voer al die kode in 'n try-catch blokkie uit. Dit bring ons dan by die displayStatus() metode uit.

Die "vleis" van die program is in die displayStatus() metode. Eerste toets die program of die con veranderlike nie dalk null is nie. Dit dui op een of ander fout en dat moet daar liewer nie met die databasis probeer werk word nie. Indien die verbinding in orde is , word 'n try-catch blokkie gebruik om die program teen enige ander foute te beskerm. Binne-in die try gedeelte word inligting oor die databasis verkry deur verskeie Java funksies. Al die tabelle in jou databasis se name word op die skerm vertoon. Lees gerus meer oor MetaData in die Java dokumentasie om te sien hoeveel inligting jy oor jou databasis kan inwin.

Skep 'n paar nuwe tabelle in jou databasis en voer weer die program uit. Jy sal sien dat Java dinamies die name van al die tabelle in jou databasis opdateer en op die skerm vertoon. Met die program kan jy dan nou maklik aan jou Access databasis koppel en is jy gereed om verder met databasis programmering te vorder. Die goeie nuus is dat sodra jy 'n geldige konneksie (con) het, kan jy begin om standaard SQL opdragte vir die databasis te stuur vanuit Java. Op die manier kan jy dan data opsoek, verander, verwyder en andersins manipuleer.

Dit is dan die einde van die artikel oor hoe om 'n Access databasis oop te maak in Java.


Die Skrywer
Hierdie artikel oor Microsoft Access en Java (JDBC) is geskryf deur Ewald Horn en word gratis gehuisves deur JavaK. Besoek gerus vir www.javak.co.za vir meer artikels deur Ewald Horn. Die skrywer se tuisblad is te vinde by www.nofuss.co.za.