# Zugriff von Applet auf mysql-DB



## Leeprasteen (19. Jul 2004)

ich möchte über ein java-applet auf eine mysql-datenbank zugreifen - im interpreter des jbuilders funktioniert das auch, aber innerhalb der webseite funktioniert der zugriff nicht -> der treiber kann nicht geladen werden!?
was und wo genau muss ich den treiber auf dem webserver zur verfügung stellen??? oder liegt das evt noch an was ganz anderem?
thx im voraus!


```
import java.applet.*;
import java.util.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.plaf.*;
import java.sql.*;

public class Test_Applet_DB extends JApplet {
  private boolean isStandalone = false;
  //Parameterwert holen
  public String getParameter(String key, String def) {
    return isStandalone ? System.getProperty(key, def) :
      (getParameter(key) != null ? getParameter(key) : def);
  }
  JTextField testTextField;

//Das Applet konstruieren
  public Test_Applet_DB() {
    setUpDisplay();
  }

  //Das Applet starten
   public void start() {
      String URL = "jdbc:mysql://192.168.35.116/test";
//     String URL = "jdbc:odbc:FZ";
      String username = "";
      String password = "";
      String resultText = "initialized text";

                try
                {
//                  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
                  Class.forName("com.mysql.jdbc.Driver");
//                   Class.forName("org.gjt.mm.mysql.Driver").newInstance();
                }
                catch (Exception e)
                {
                    testTextField.setText("Kann JDBC Treiber nicht laden.");
                    return;
                }

                Statement stmt = null;
                Connection con = null;

                try
                {
                        con = DriverManager.getConnection (URL, username, password);
                        stmt = con.createStatement ();
                }
                catch (Exception e)
                {
                        testTextField.setText("Probleme bei der Verbindung mit" + URL);
                }

                try
                {
//                        ResultSet result = stmt.executeQuery ("SELECT Film FROM FZ;");
                        ResultSet result = stmt.executeQuery ("SELECT name FROM guestbook;");
                        result.next ();
                        resultText = result.getString ("name");
                        con.close ();
                }
                catch (Exception e)
                {
                        e.printStackTrace ();
                }

     testTextField.setText(resultText);
   }

  private void setUpDisplay()
  {
        this.getRootPane().setBorder(new BevelBorder(BevelBorder.RAISED));

        // set fonts to smaller-than-normal size, for compaction!
        UIManager manager = new UIManager();
        FontUIResource appFont = new FontUIResource("SansSerif", Font.PLAIN, 10);
        UIDefaults defaults = manager.getLookAndFeelDefaults();
        Enumeration keys = defaults.keys();

        while (keys.hasMoreElements())
        {
                String nextKey = (String)(keys.nextElement());
                if ((nextKey.indexOf("font") > -1) || (nextKey.indexOf("Font") > -1))
                {
                        manager.put(nextKey, appFont);
                }
        }


        // add WindowCloseAdapter to catch window close-box closings
//        addWindowListener(new WindowCloseAdapter());

        testTextField = new JTextField(20);
        testTextField.setText("Text vor dem Test");
        testTextField.setEditable(true);

        // now set up display

        // set params for layout manager
        GridBagLayout  theLayout = new GridBagLayout();
        GridBagConstraints c = new GridBagConstraints();

        c.gridwidth = 1;
        c.gridheight = 1;
        c.fill = GridBagConstraints.NONE;
        c.ipadx = 0;
        c.ipady = 0;
        c.insets = new Insets(3,2,2,2);
        c.anchor = GridBagConstraints.CENTER;
        c.weightx = 0;
        c.weighty = 0;

        JPanel testPanel = new JPanel();
        testPanel.setLayout(theLayout);

        c.gridx = 1;
        c.gridy = 1;
        theLayout.setConstraints(testTextField, c);
        testPanel.add(testTextField);

        this.getContentPane().setLayout(theLayout);

        c.gridx = 1;
        c.gridy = 1;
        theLayout.setConstraints(testPanel, c);
        this.getContentPane().add(testPanel);
  }
}
```


----------



## Jaraz (19. Jul 2004)

Hi,

ich frage mich immer wieder warum Leute direkt aus Applets auf Datenbanken zugreifen wollen.

Nachteile:

Der Treiber muss überallhin transferiert werden.
Das Applet muss signiert werden wenn Datenbank und Webserver nicht unter einem Server zu erreichen sind.
Das Datenbankkennwort steht im Quelltext und kann somit einfach ausgelesen werden.
Die Datenbank muss nach außen geöffnet werden.

Für sowas benutzt man prinzipiell 3 Schichten Architekturen.
Das Applet kommuniziert nur mit einer Java Applikation oder einem Servlet auf dem Server und die mittlere Schicht kümmert sich um den Datenbank Zugriff.

Hilft dir konkret jetzt zwar nicht bei deinem Problem, soll nur zum nachdenken anregen. 

Gruß Jaraz


----------



## Leeprasteen (19. Jul 2004)

@Jaraz -> das ist schön und gut - hab das ganze mit RMI auch schon gelöst - wollt aber schaun, ob es evt auch noch anders bzw einfacher geht.
wenn man den treiber aber wirklich überall hintransferieren muss - was laut anderen aussagen nicht notwendig ist - dann bringt es wirklich nichts.


----------

