MySQL-Verbindung unter Linux

Cstar

Mitglied
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
 
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 http://www.http://www.mysql.org runteladen.

Ansonsten kann ich keinen Fehler feststellen.
 
Aktivieren die Netzwerkverbindung der Mysql.

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

hth
cybi
 
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
 
Zurück