«^»
5.2. Creating a Java Archive containing a Java Applet

We will use the following Java applet AgesLet.java to communicate with an mSQL database server using the JDBC API:

0453: import java.applet.Applet;                                   // AgesLet.java
0454: import java.awt.Button;
0455: import java.sql.Connection;
0456: import java.sql.DriverManager;
0457: import java.awt.Event;
0458: import java.sql.ResultSet;
0459: import java.sql.ResultSetMetaData;
0460: import java.sql.SQLException;
0461: import java.sql.SQLWarning;
0462: import java.sql.Statement;
0463: import java.awt.TextArea;
0464: import java.awt.TextField;
0465: public class AgesLet extends Applet {
0466:    public void init() { 
0467:       add(iQueryTextField);
0468:       add(iQueryButton);
0469:       add(iResultsTextArea);
0470:       try {
0471:          Class.forName("COM.imaginary.sql.msql.MsqlDriver");
0472:          String tURLString = "jdbc:msql://hercules.dur.ac.uk:4333/bjc1";
0473:          boolean tStillTrying = true;
0474:          int tNumberOfTries = 0;
0475:          while (tStillTrying) {
0476:             try {
0477:                iConnection = DriverManager.getConnection(tURLString, "", "");
0478:                tStillTrying = false;
0479:             }
0480:             catch (Exception rException) {
0481:                tNumberOfTries++;
0482:                tStillTrying = (tNumberOfTries > 20);
0483:             }
0484:          }
0485:          if ( iConnection == null)  iResultsTextArea.append("is null\n");
0486:          check(iConnection.getWarnings());
0487:       }
0488:       catch (Exception rException) {
0489:          outputException(rException);
0490:       }
0491:    }
0492:    public void destroy() { 
0493:       try {
0494:          iConnection.close();
0495:       }
0496:       catch (Exception rException) {
0497:          outputException(rException);
0498:       }
0499:    }
0500:    public boolean handleEvent(Event rEvent) {
0501:       if (rEvent.target.equals(iQueryButton) && rEvent.id==Event.ACTION_EVENT) {
0502:          try {
0503:             String tSQLString = iQueryTextField.getText();
0504:             Statement tStatement = iConnection.createStatement();
0505:             if ( tSQLString.startsWith("select") ) {
0506:                ResultSet tResultSet = tStatement.executeQuery(tSQLString);
0507:                displayResultSet(tResultSet);
0508:                tResultSet.close();
0509:             }
0510:             else {
0511:                int tNumberOfRows = tStatement.executeUpdate(tSQLString);
0512:             }
0513:             tStatement.close();
0514:          }
0515:          catch (Exception rException) {
0516:             outputException(rException);
0517:          }
0518:          iResultsTextArea.append("--------------------------------\n");
0519:          return true;
0520:       }
0521:       return false;
0522:    }
0523:    private TextField iQueryTextField = new TextField(80);
0524:    private Button iQueryButton = new Button("click here");
0525:    private TextArea iResultsTextArea = new TextArea(20, 80);
0526:    private Connection iConnection = null;
0527:    private void displayResultSet(ResultSet rResultSet) throws SQLException {
0528:       ResultSetMetaData tResultSetMetaData = rResultSet.getMetaData();
0529:       int tNumCols = tResultSetMetaData.getColumnCount();
0530:       boolean tMoreRows = rResultSet.next();
0531:       while (tMoreRows) {
0532:          for (int tColNum=1; tColNum<=tNumCols; tColNum++) {
0533:             iResultsTextArea.append(rResultSet.getString(tColNum));
0534:             iResultsTextArea.append(" ");
0535:          }
0536:          iResultsTextArea.append("\n");
0537:          tMoreRows = rResultSet.next();
0538:       }
0539:    }
0540:    private static boolean check(SQLWarning rSQLWarning) throws SQLException  {
0541:       boolean tReturnCode = false;
0542:       if (rSQLWarning != null) {
0543:          System.out.println("\n *** Warning ***");
0544:          tReturnCode = true;
0545:          while (rSQLWarning != null) {
0546:             System.out.println("SQLState: " + rSQLWarning.getSQLState());
0547:             System.out.println("Message:  " + rSQLWarning.getMessage());
0548:             System.out.println("Vendor:   " + rSQLWarning.getErrorCode());
0549:             System.out.println();
0550:             rSQLWarning = rSQLWarning.getNextWarning();
0551:          }
0552:       }
0553:       return tReturnCode;
0554:    }
0555:    private static void outputException(Exception rException) {
0556:       if ( rException instanceof SQLException ) {
0557:          SQLException tSQLException = (SQLException) rException;
0558:          System.out.println("\n*** SQLException caught ***");
0559:          while (tSQLException != null) {
0560:             System.out.println("SQLState: " + tSQLException.getSQLState());
0561:             System.out.println("Message:  " + tSQLException.getMessage());
0562:             System.out.println("Vendor:   " + tSQLException.getErrorCode());
0563:             tSQLException = tSQLException.getNextException();
0564:             System.out.println();
0565:          }
0566:       }
0567:       else {
0568:          rException.printStackTrace();
0569:       }
0570:    }
0571: }
This file can be compiled using the command:
javac AgesLet.java
The compiler produces a file called AgesLet.class.

You will need to put the classes/COM directory of the mSQL-JDBC 1.0a4 distribution into the current directory. On a Unix system, you can do this by a command like:

cp -pr /usr/local/utils/mSQL/JDBC/1.0a4/classes/COM .
This creates a subdirectory called COM in the current directory.

You now need to produce a Java Archive. This is Java's way of packaging up a lot of files to produce one file. It is done using JDK 1.1.x's jar command at the Unix/MS-DOS prompt:

jar cf AgesLet.jar AgesLet.class COM
This command will produce a jar file in the file AgesLet.jar.