# MYSQL Datenbankzugriff unter Linux



## astryx (28. Jul 2004)

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?

mfg


----------



## Jaraz (28. Jul 2004)

Hi,

der Treiber connected sich über TCP, du musst die Option "skip-networking" in der /etc/mysql/my.cnf auskommentieren.

Gruß Jaraz


----------



## Guest (28. Jul 2004)

Hi,
soeben habe ich skip-networking auskommentiert, aber wieder Fehlanzeige!
Zur Info:
In  /etc/mysql/my.cnf sind zur Zeit folgende Einträge aktiv:

[client]
port            = 3306
socket          = /var/run/mysqld/mysqld.sock

[mysqld_safe]
err-log         = /var/log/mysql/mysql.err
socket          = /var/run/mysqld/mysqld.sock

[mysqld]
user            = root
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306

log             = /var/log/mysql/mysql.log
basedir         = /usr
datadir         = /var/lib/mysql
tmpdir          = /tmp
language        = /usr/share/mysql/english
skip-locking

skip-networking

query_cache_limit       = 1048576
query_cache_size        = 26214400
query_cache_type        = 1

server-id               = 1
log-bin         = /var/log/mysql/mysql-bin.log
binlog-do-db            = include_database_name
binlog-ignore-db        = include_database_name

[mysqldump]
quick
max_allowed_packet      = 1M

[mysql]
[isamchk]
key_buffer              = 16M

mfg


----------



## Jaraz (28. Jul 2004)

Datenbank neu gestartt?

Zeigt nmap localhost den Port 3306?

Gruß Jaraz


----------

