fehlender treiber bei mysql verbindung via jdbc-odbc (java)

D

derCalle

Neues Mitglied
Thread Starter
Dabei seit
06.03.2009
Beiträge
11
Reaktionspunkte
0
hallo ich versuche seit langem eine Datenbankverbindung mit JAVA aufzubauen...

ich arbeite mit eclipse, habe os x 10.5.

mit einem web-projekt (jsp und java) funktioniert die datenbankverbindung ohne probleme. bei einer einfachen java-application habe ich leider probleme

Problem bei der java-app:

Code:
java.sql.SQLException: Communication failure during handshake. Is there a MySQL server running on localhost:3306?

ich habe auch bereits versucht über den odbc-administrator eine verbindung aufzubauen da bekomme ich jedoch diesen fehler:

Code:
java.lang.ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver

als hätte ich in meiner java version (die bereits vorinstalliert ist 1.5.0) diesen treiber nicht mit drin

meine fragen sind:

kann mir jemand bei meinem problem helfen (also hat jmd eine lösung dafür)

gibt es andere möglichkeiten kostengünstig eine db-verbindung aufzubauen?

gruß und dank für jede hilfe!

noch mein java code für die db-connection
(einmal mit odbc und einmal normal wie ich auch mit bei meiner web-app verbinde)

Code:
   1.
      public class Controller {
   2.
       
   3.
          // Database variables
   4.
          protected static Connection connection = null;
   5.
          Statement statement = null;
   6.
          ResultSet rs = null;
   7.
       
   8.
          public Controller() {
   9.
                /*
  10.
               * ************ ---- DRIVER MANAGER - CONNECTOR - DB VERBINDUNG ---- ************
  11.
               */
  12.
      //        // Verbindung mit der Datenbank aufbauen
  13.
      //            String connectionURL = "jdbc:mysql://localhost:3306/adressbook";
  14.
      //            try {
  15.
      ////                Class.forName("org.gjt.mm.mysql.Driver").newInstance();
  16.
      //              Class.forName("com.mysql.jdbc.Driver").newInstance();
  17.
      //
  18.
      //            } catch (InstantiationException e) {
  19.
      //                e.printStackTrace();
  20.
      //            } catch (IllegalAccessException e) {
  21.
      //                e.printStackTrace();
  22.
      //            } catch (ClassNotFoundException e) {
  23.
      //                e.printStackTrace();
  24.
      //            }
  25.
      //            try {
  26.
      //                connection = DriverManager.getConnection(connectionURL, "root", "newpassword");
  27.
      //            } catch (SQLException e) {
  28.
      //                e.printStackTrace();
  29.
      //            }
  30.
             
  31.
              try {
  32.
                  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
  33.
      //          Class.forName("org.postgresql.Driver");
  34.
              } catch (ClassNotFoundException e) {
  35.
                  e.printStackTrace();
  36.
              }
  37.
              try {
  38.
                  connection = DriverManager
  39.
                          .getConnection("jdbc:odbc:adressbook");
  40.
                  statement = connection.createStatement();
  41.
                  connection.close();
  42.
              } catch (SQLException e) {
  43.
                  e.printStackTrace();
  44.
              }
  45.
          }
  46.
      }
 
Benutzt du eventuell eine veraltete Version des JDBC-Treibers oder des MySQL-Servers? Mit aktuellen Versionen funktioniert dein JDBC-Code nämlich bei mir. (ODBC habe ich nicht probiert.)
 
danke erstmal für die antworten!

@dannycool

nein, das kann ich ausschließen, da ja komischer weiße ich mit einem java web-project (also mit .jsp - seiten) problemlos auf die mysql-datenbank zu greifen kann (auch über jdbc)

@oneOeight

danke für den tipp, hatt sich aber leider nichts geändert :-(

fehler bleibt der selbe: kann die class "sun.jdbc.odbc.JdbcOdbcDriver" nicht finden

Code:
java.lang.ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver
	at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:316)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:280)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:374)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:164)
	at de.Mannheim.BA.WWI08B.SE.SS09.Projekt1.Controller.<init>(Controller.java:48)
	at de.Mannheim.BA.WWI08B.SE.SS09.Projekt1.Adressbook.<init>(Adressbook.java:41)
	at de.Mannheim.BA.WWI08B.SE.SS09.Projekt1.Adressbook.main(Adressbook.java:94)
DriverManager.getConnection("jdbc:odbc:test")
DriverManager.initialize: jdbc.drivers = null
JDBC DriverManager initialized
getConnection: no suitable driver
java.sql.SQLException: No suitable driverjava.sql.SQLException: No suitable driver
	at java.sql.DriverManager.getConnection(DriverManager.java:545)
	at java.sql.DriverManager.getConnection(DriverManager.java:193)
	at de.Mannheim.BA.WWI08B.SE.SS09.Projekt1.Controller.<init>(Controller.java:53)
	at de.Mannheim.BA.WWI08B.SE.SS09.Projekt1.Adressbook.<init>(Adressbook.java:41)
	at de.Mannheim.BA.WWI08B.SE.SS09.Projekt1.Adressbook.main(Adressbook.java:94)
SQLException: SQLState(08001)

	at java.sql.DriverManager.getConnection(DriverManager.java:545)
	at java.sql.DriverManager.getConnection(DriverManager.java:193)
	at de.Mannheim.BA.WWI08B.SE.SS09.Projekt1.Controller.<init>(Controller.java:53)
	at de.Mannheim.BA.WWI08B.SE.SS09.Projekt1.Adressbook.<init>(Adressbook.java:41)
	at de.Mannheim.BA.WWI08B.SE.SS09.Projekt1.Adressbook.main(Adressbook.java:94)
 
habs mir angeschaut es bleibt jedoch der fehler

Code:
Communication failure during handshake. Is there a MySQL server running on 127.0.0.1:3306?

:(
 
hast du denn mysql lokal bei dir laufen?
wenn der port nicht geht, versuch doch den socket...
 
jap ... läuft lokal bei mir

wenn der port nicht geht, versuch doch den socket...

wie wenn der port nicht geht? (also wie gesagt über meine web-app komm ich ohne probleme an die datenbank)

was meinst du mit versuch den socket?
 
guck in dein my.cnf , ob der auch per netz auf localhost erreichbar ist...
ansonsten den pfad zum socket file merken und den connector das nutzen lassen...
 
also meine cnf sieht so aus:

Code:
# /etc/mysql/my.cnf: The global mysql configuration file.

# This file can be simultaneously placed in three places:
# 1. /etc/mysql/my.cnf to set global options.
# 2. /var/lib/mysql/my.cnf to set server-specific options.
# 3. ~/.my.cnf to set user-specific options.
#
# One can use all long options that the program supports.
# Run the program with --help to get a list of them.
#
# The following values assume you have at least 32M RAM!

[client]
#password       = my_password
port            = 3306
socket          = __PREFIX/var/run/mysqld/mysqld.sock

[safe_mysqld]
err-log         = __PREFIX/var/log/mysql/mysql.err
pid-file	= __PREFIX/var/run/mysqld/mysqld.pid
socket		= __PREFIX/var/run/mysqld/mysqld.sock

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

[mysqld]
#skip-networking
skip-innodb
user            = mysql
pid-file        = __PREFIX/var/run/mysqld/mysqld.pid
socket          = __PREFIX/var/run/mysqld/mysqld.sock
port            = 3306
log             = __PREFIX/var/log/mysql/mysql.log
basedir         = __PREFIX
datadir         = __PREFIX/var/db/mysql
tmpdir          = /tmp
language        = __PREFIX/share/mysql/english
skip-locking
set-variable    = key_buffer=16M
set-variable    = max_allowed_packet=1M
set-variable    = thread_stack=128K

[mysqldump]
quick
set-variable    = max_allowed_packet=1M

[mysql]
#no-auto-rehash # faster start of mysql but no tab completition

[isamchk]
set-variable    = key_buffer=16

da dort dieses ski-networking auskommentiert ist denke ich dass man da vom netz her drauf zu greifen kann oder?!

ich wüsst auch grad nich wie ich "dem connector den pfad zum socket nutzen lassen soll" ?! (hab so was noch net gemacht und seh deshalb grad den sin darin nicht)
 
man kann entweder über den socket oder halt per netzwerk drauf zugriefen.
das musst du halt beim connect angeben oder in der config der anwendung angeben...

kannst ja noch mal unter [mysqld]
bind-address = 127.0.0.1
angeben und den mysql server neu starten...
 
hab ich gemacht... bracht leider keine veränderung
 
kriegst denn einen connect, wenn du im terminal
telnet 127.0.0.1 3306
machst?

hatte der odbc connector von mysql eine config?
 
bekomme ne connection über telnet

dis mit den odbc hatte ich mit dem vorinstallierten "odbc-administrator" konfiguiert... aber dis ging ja allein schon net weil es anscheind einfach kein odbc driver für mac gibt?! -.-
 
danke nochmal für deine hilfe

hab dis problem jetz gelöst und eine verbindung mit den mysql server hinbekommen...

lag an eclipse, da waren libs im build-path die da net hingehören -.-, und als die weg waren gings ...
 
Zurück
Oben Unten