tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
641
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Cstar
    Cstar Cstar ist offline Mitglied Silber
    Registriert seit
    Mar 2002
    Beiträge
    91
    Hi,

    seit gestern versuch ich nun zum erstenmal mit einem javaprogramm auf eine Datenbank zuzugreifen.
    Unter Knoppix also Debian habe ich die Pakete mysql-client und mysql-server installiert.
    Ich habe folgende mysql befehle verwendet zur Anlegung der Datenbank:

    CREATE DATABASE DokNetDB;
    USE DokNetDB;
    CREATE TABLE Dokumente (Name CHAR(255), Ausgabe CHAR(10));
    INSERT INTO Dokumente VALUES("Dokument 1", "1999-01-00");
    INSERT INTO Dokumente VALUES("Dokument 3", "1999-02-00");
    INSERT INTO Dokumente VALUES("Dokument 4", "1999-04-00");

    Nach dem Start von Mysql (mittels /etc/init.d/mysql start) habe ich folgendes Programm kompiliert:
    -----------------------------------------------------------------------------------------
    import java.sql.*;

    public class HelloWorld
    {
    public static void main(String argv[])
    {
    try
    {
    Class.forName("org.gjt.mm.mysql.Driver").newInstance();
    }
    catch(Exception exception)
    {
    System.out.println("Can't find Database driver class:"+exception.getMessage());
    return;
    }

    try
    {
    Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/DokNetDB?user=root");

    Statement statement = connection.createStatement();
    ResultSet resultSet = statement.executeQuery("SELECT Name, Ausgabe FROM Dokumente");

    System.out.println("Dokument | Ausgabedatum:");
    System.out.println("-------------------------------");

    while (resultSet.next())
    {
    System.out.print(resultSet.getString(1));
    System.out.print(" | ");
    System.out.println(resultSet.getString("Ausgabe"));
    }

    resultSet.close();
    statement.close();
    connection.close();
    }
    catch(SQLException sqlException)
    {
    System.out.println(sqlException.getMessage());
    return;
    }
    }
    }
    ----------------------------------------------------------------------------------------
    Ich hab einen passenden Treiber aus dem Netz gesucht und den Klassenpfad gesetzt:
    export CLASSPATH=$CLASSPATH:/home/astryx/mm.mysql-2.0.4-bin.jar

    Wenn ich das Programm dann ausführe, tritt aber eine Exception im try-Block auf:
    -------------------------------------------------------------------------------------------
    Cannot connect to MySQL server on localhost:3306. Is there a MySQL server running on the machine/port you are trying to connect to? (java.net.ConnectException)
    -------------------------------------------------------------------------------------------

    Ausführlicher lautet die Exception-Meldung folgenermaßen:
    ------------------------------------------------------------------------------------------
    SQLException : Cannot connect to MySQL server on localhost:3306. Is there a MySQL server running on the machine/port you are trying to connect to? (java.net.ConnectException)java.sql.SQLException: Cannot connect to MySQL server on localhost:3306. Is there a MySQL server running on the machine/port you are trying to connect to? (java.net.ConnectException)
    at org.gjt.mm.mysql.Connection.connectionInit(Connection.java:331)
    at org.gjt.mm.mysql.jdbc2.Connection.connectionInit(Connection.java:89)
    at org.gjt.mm.mysql.Driver.connect(Driver.java:167)
    at java.sql.DriverManager.getConnection(DriverManager.java:512)
    at java.sql.DriverManager.getConnection(DriverManager.java:193)
    at HelloWorld.main(HelloWorld.java:33)
    Cannot connect to MySQL server on localhost:3306. Is there a MySQL server running on the machine/port you are trying to connect to? (java.net.ConnectException)
    --------------------------------------------------------------------------------------------
    MySQL wurde erst gestern mit apt-get installiert. Es wurden keine Einstellungen an MySQL vorgenommen (wie z.B. Passwörter). Der Treiber für mysql (org.gjt.mm.mysql.Driver) wurde anscheinend erkannt. Nur die Verbindung zwische jdbc und mysql funktioniert nicht!
    "mysqlshow" zeigt die erstellte Table "DokNetDB" an.
    Im mysql-monitor erhalte ich mit dem "status"-Befehl folgende Ausgabe:
    -------------------------------------------------------------------------------------------
    mysql> status
    --------------
    mysql Ver 12.22 Distrib 4.0.20, for pc-linux-gnu (i386)

    Connection id: 10
    Current database:
    Current user: root@localhost
    SSL: Not in use
    Current pager: stdout
    Using outfile: ''
    Server version: 4.0.20-log
    Protocol version: 10
    Connection: Localhost via UNIX socket
    Client characterset: latin1
    Server characterset: latin1
    UNIX socket: /var/run/mysqld/mysqld.sock
    Uptime: 19 min 53 sec

    Threads: 1 Questions: 47 Slow queries: 0 Opens: 14 Flush tables: 1 Open tables: 8 Queries per second avg: 0.039
    -------------------------------------------------------------------------------------------

    Wo könnte der Fehler liegen (und v.a. wie lässt er sich beheben)?

    mfg
     

  2. #2
    Kuniberd Kuniberd ist offline Mitglied
    Registriert seit
    Feb 2004
    Beiträge
    16
    Hast Du es schonmal mit einer neueren Version vomMySql Java Treiber versucht ?

    Als ich benutze mysql-connector-java-3.1.0-alpha-bin und es funktioniert wunderbar bei mir.

    Als Backend benutze ich auch Debian mit Mysql.

    Den Treiber würed ich bei www.http://www.mysql.org runteladen.

    Ansonsten kann ich keinen Fehler feststellen.
     

  3. #3
    Cybernd Cybernd ist offline Mitglied Silber
    Registriert seit
    Jun 2004
    Ort
    Österreich(Salzburg)
    Beiträge
    73
    Aktivieren die Netzwerkverbindung der Mysql.

    Findet sich in der /etc/mysql/?
    Eine Zeile "skip-networking" muß auskommentiert werden. Danach mysql neu starten.

    hth
    cybi
     
    Projekt Amaris (Howtos zum Thema Debian Webserver / Java)

  4. #4
    Kuniberd Kuniberd ist offline Mitglied
    Registriert seit
    Feb 2004
    Beiträge
    16
    Ja das ist richtig mit dem "skip-networking". Aber dies hat für localhost keine Auswirkung!

    Mfg Kuniberd
     

  5. #5
    Cybernd Cybernd ist offline Mitglied Silber
    Registriert seit
    Jun 2004
    Ort
    Österreich(Salzburg)
    Beiträge
    73
    Doch, wenn du über den Port zugreifen willst hat dies durchaus eine Auswirkung.

    Die lokalen Komponenten greifen nämlich in der Regel nicht über den Port sondern direkt über einen Socket auf die Mysql zu.

    Wenn skip-networking aktiv ist, wird mysql nicht auf dem 3306er lauschen. Weder am localen Interface, noch an irgendeinem anderen.

    Und da eben deine Fehlermessage besagt das der Prozess nicht auf den 3306er zugreifen konnte, kann es sich nur um diesen Fall handeln. (Nein deine Applikation versucht nicht über den Socket zuzugreifen. Sonst würde es eine andere Art der Fehlermessage ergaben)

    cybi
     
    Projekt Amaris (Howtos zum Thema Debian Webserver / Java)

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 23.08.07, 13:55
  2. Probleme unter Linux mit MySQL / ODBC
    Von Chamäleon im Forum Linux & Unix
    Antworten: 6
    Letzter Beitrag: 20.11.06, 08:13
  3. MySQL-Programmierung mit C++API unter LINUX
    Von Peter Reißig im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 02.03.04, 12:54
  4. hab ein broblem mit mysql c api unter linux
    Von sambahippy im Forum C/C++
    Antworten: 0
    Letzter Beitrag: 03.11.03, 19:27
  5. MySQL unter Linux
    Von TheVirus im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 09.03.02, 21:11