Java und MySQL
Linux
pk-applets
 
 

Mit einer einer Java-Applikation soll eine MySql-Datenbank auf dem Linux-Server abgefragt werden.

1. Auf Clients ist eine Virtuel Mashine von Java installiert.

Vorbereitungen am Server
Unsere Datenbank auf dem Server heißt test1 und hat die Tabelle buch
Einwählen mit
mysql root -p           ( Password mysql )
mysql> use test1; Datenbank wählen
mysql> grant all on test1.*  to peter@192.168.1.30 identified by "mysql" ;

Nun kann

alles angestellt werden.
 

Vorbereitung am Client
Zunächst ist ein jdbc-Trieber für die MySql-Datenbank nötig.
Diesen Treiber erhält man z.B. unter  http://www.mysql.com/
Nach dem Entpacken des ZIP-Files sollten  entweder
die Verzeichnisse
   com/mysql/jdbc/..etc und
   org/gjt/mm/..etc
dort sein, wo die Klassen der Programme liegen
oder
   mysql-connector-j-2.0.14-bin.jar
sollte in jdk/jre/lib/ext/  kopiert werden.
Beachte auch die README-Datei im Download mit nützlichen Hinweisen!

Jetzt kann mit dem folgenden Java-Programm Verbindung aufgenommen
und die Datenbank abgefragt werden!
 
 
import java.io.*;
import java.sql.*;

public class mysql
  {

  public static void main( String[] argv )
    {
    String treiber=null, DbUrl=null ;

    //*** "Name des Datenbanktreibers eingeben
    treiber = "org.gjt.mm.mysql.Driver" ;
    //*** "Url der Databank eingeben *********
    //*** Server : linux
    //*** Service-Nummer : 3306
    //*** Bezeichnung der Datenbank : test1
    DbUrl = "jdbc:mysql://linux:3306/test1" ;

     try {
         //*** Treiber laden ***********************************
         Class.forName( treiber ).newInstance();
          //*** Verbindung aufnehmen:    ************************
          //*** Der User peter mit Kennwort mysql möcht was wissen
         Connection cn = DriverManager.getConnection( DbUrl, "peter", "mysql" );
         BufferedReader in = new BufferedReader(
                             new InputStreamReader( System.in ) );
        String frage = null ;
        while( true )
            {  //*** Endlosschleife für die Abfragen *****************
             System.out.println( "Verbindung steht!!" );
             System.out.println( "Gib Deine Anfrage ein!!") ;
             System.out.println( "Beenden, wenn Du stop eingibst!!" ) ;
             frage = in.readLine() ;
             if( frage.equals( "stop" ) ) break ;
             try { //*** Anfrage  - Fehler abfangen **********************
                 Statement  st = cn.createStatement();
                 ResultSet  rs = st.executeQuery( frage );
                 ResultSetMetaData rsmd = rs.getMetaData();
                 int n, nmax = rsmd.getColumnCount();
                 System.out.println("----------- Antwort -------------------") ;
                 while( rs.next() )
                    { //**** SchauMerMal  Primitive Ausgabe    **********
                    for( n=1 ; n<=nmax ; n++ )
                       System.out.print( rs.getString( n ) + "--" ) ;
                    System.out.println() ;
                    }
                 System.out.println("----------- Antwort -------------------") ;
                 rs.close();
                 st.close();
                 } catch( SQLException ex )
                         {  System.out.println( ex );   }
            }
        cn.close();
        } catch( Exception ex ) {   System.out.println( ex );   }
   }
}

2. Abfrage über Applets
Die MySQL-Datenbank auf dem Linux-Server soll nun über Applets abgefragt werden.
Auf dem Server ist Java und der Apache-Webserver installiert.

In htDocs ist nun
mysql_app.class, die Class-Datei des Applets und
test.html, eine HTML-Datei zum Aufruf des Applets

Entsprechnend muß nun auf dem Server für Zugang zum jdbc-Treiber
gesorgt werden, z.B. indem
   com/mysql/jdbc/..etc und
   org/gjt/mm/..etc
auch in htDocs kopiert werden.

Bei der MySQL-Anweisung
mysql> grant all on test1.*  to peter@192.168.1.30 identified by "mysql" ;
ist evt die Client-ID durch die Bezeichnung des PC's zu ersetzten!
Siehe die Datei etc/hosts und beachte die Fehlermeldung!
 
 
import java.io.*;
import java.sql.*;
import java.awt.*;
import java.awt.event.* ;

public class mysql_app extends java.applet.Applet implements ActionListener
  {

  String treiber=null, DbUrl=null ;
  Connection cn ;

  TextField tf;
  TextArea ta ;
  Button bu ;
 

  public void init()
     {  //***************************************************************
         //***************************************************************
    setLayout( null ) ;
      //*** "Name des Datenbanktreibers eingeben
    treiber = "org.gjt.mm.mysql.Driver" ;
    //*** "Url der Databank eingeben *********
    //*** Server : linux
    //*** Service-Nummer 3306
    DbUrl = "jdbc:mysql://linux:3306/test1" ;

    tf = new TextField() ;
    tf.setLocation( 5,35 ) ;
    tf.setSize( 350,20 ) ;
    tf.setText("Anfrage? ") ;
    add( tf ) ;

    ta = new TextArea() ;
    ta.setLocation( 5,65 ) ;
    ta.setSize( 350,300 ) ;
    ta.setText("Ergebnis ") ;
    add( ta ) ;

    bu = new Button("Frage starten") ;
    bu.setLocation( 5,5 ) ;
    bu.setSize( 95,20 ) ;
    bu.setBackground( Color.red ) ;
    bu.addActionListener( this ) ;
    add( bu ) ;

    String meldung = new String("Verbindungsaufbau\n\n" ) ;

    try {
         //*** Treiber laden ***********************************
         Class.forName( treiber ).newInstance();
          //*** Verbindung aufnehmen:    ************************
          //*** Der User peter mit Kennwort mysql möcht was wissen
         cn = DriverManager.getConnection( DbUrl,"peter","mysql" );
         if( cn!= null ) meldung += "Verbindung steht!!\n" ;
        } catch( Exception ex ) {   meldung += ex.toString() ;  } ;
    ta.setText( meldung ) ;
    }
 

  public void actionPerformed( ActionEvent e )
     {  //*** Funktion des ActionListener **********************************
     if( e.getActionCommand()=="Frage starten" )
        {  //**** Funktion zeichnen **********************************
        String frage = tf.getText() ;
        if( cn != null )
          {
             String antwort = new String("  ---- Ergebnis von\n  ---- " ) ;
             antwort += frage ;
             try { //*** Anfrage  - Fehler abfangen **********************
                 Statement  st = cn.createStatement();
                 ResultSet  rs = st.executeQuery( frage );
                 ResultSetMetaData rsmd = rs.getMetaData();
                 int n, nmax = rsmd.getColumnCount();
                 while( rs.next() )
                    { //**** SchauMerMal  Primitive Ausgabe    **********
                    antwort += "\n" ;
                    for( n=1 ; n<=nmax ; n++ )
                       antwort += "  " + rs.getString( n )  ;
                    }
                 antwort += "\n  ----------------------- "  ;
                 rs.close();
                 st.close();
                 } catch( SQLException ex )
                         {  antwort += "\n  Fehler\n  " + ex.toString() ;   }
             ta.setText( antwort ) ;
            }
         else ta.setText("\n  Keine Verbindung zur Datenbank" ) ;
      }
  }
}

Quelltexte

Peter Kraus