# Konnte den Treiber com.mysql.jdbc.Driver nicht laden.



## Huzehn (29. Jan 2008)

Hallo,

mit untenstehendem code wird mir gesagt, dass der mysql treiber nicht geladen werden konnte, warum? Ich benutzte eclipse 3.3 und habe mir mysql 5.0 community edition heruntergeladen und installiert und läuft als gestartet systemdienst.

Was mache ich falsch?


```
import java.io.PrintWriter;
import java.sql.DriverManager;
import java.sql.*;


public class MySqlServer
{

	public MySqlServer()
	{
		DriverManager.setLogWriter(new PrintWriter(System.out));
		try
		{
			Class.forName("com.mysql.jdbc.Driver");
			
		}
		catch (ClassNotFoundException cex)
		{
			System.out.println("Konnte den Treiber " + cex.getMessage()+ " nicht laden.");		
		}
		
		for(java.util.Enumeration<java.sql.Driver> driver = DriverManager.getDrivers() ; driver.hasMoreElements();)
		{	
			java.sql.Driver d = driver.nextElement();
			System.out.println("Treiber: " + d.toString());
			System.out.println("Version: " + d.getMajorVersion());			
		}	
	}	

}
```


----------



## Huzehn (29. Jan 2008)

Habe das Beispiel noch um dies ergänzt:


```
Class.forName("sun.jdbc.odbc.jdbcOdbcDriver");
```

und ich vergaß den mysql connector.jar in die jre/lib/ext/ ordner zu kopieren habe ich gemacht und bekomme jetzt diese Meldung:


```
JdbcOdbcDriver class loaded
registerDriver: driver[className=sun.jdbc.odbc.JdbcOdbcDriver,sun.jdbc.odbc.JdbcOdbcDriver@530daa]
DriverManager.initialize: jdbc.drivers = null
JDBC DriverManager initialized
registerDriver: driver[className=com.mysql.jdbc.Driver,com.mysql.jdbc.Driver@a62fc3]
Konnte den Treiber sun.jdbc.odbc.jdbcOdbcDriver nicht laden.
Treiber: sun.jdbc.odbc.JdbcOdbcDriver@530daa
Version: 2
Treiber: com.mysql.jdbc.Driver@a62fc3
Version: 5
```

Wurde da jetzt irgendwas geladen?


----------



## tfa (30. Jan 2008)

Die JARs gehören nicht nach  jre/lib/ext/ sondern in den Klassenpfad. Dann klappt es auch mit dem Treiberladen.


----------



## Huzehn (30. Jan 2008)

tfa hat gesagt.:
			
		

> Die JARs gehören nicht nach  jre/lib/ext/ sondern in den Klassenpfad. Dann klappt es auch mit dem Treiberladen.



Hallo,

danke für deine Antwort, bin noch neu in java , kopiere ich die .jar datei dann einfach in c:\programme\java ? oder mache ich in eclipse "add external" jar file?


----------



## Giftstachel (30. Jan 2008)

add external jar in den properties ist ein guter anfang.

achte noch darauf, das wenn du ein jar erstellt, das der den treiber auch mit eingebunden wird. am einfachsten ist, wenn du dazu fatjar nutzt.


----------



## L-ectron-X (30. Jan 2008)

Alternativ führst du externe Bibliotheken im Manifest im Class-Path-Attribut auf. Das ist für meine Begriffe etwas flexibler.


----------



## Huzehn (30. Jan 2008)

Das Problem ist, dass wenn ich eine Verbindung aufbaue mit(Beispiel aus einem Buch):


```
try
{
   Connection myCon = DriverManager.getConnection("jdbc:mysql://localhost/meineDatenbank");
   Statement  myState = myCon.createStatement();
   ResultSet rs = myState.executeQuery("select * from meineTabelle");
   .
   .
   .
}
```

dann habe ich doch noch gar keine Datenbank, wie kann ich dann mit dieser Verbindung aufnehmen???
Das 2. Problem ist wenn ich weiter oben im Code eine Tabelle erstellt hätte geht ja auch nur mit einer Datenbank. Die Datenbank soll mit Java erstellt werden icht von Hand in der Konsole... ala mysql CREATE DATABASE etc...

Wißt Ihr was ich meine oder wos hakt, vllt. hab ich auch einen Denkfehler? Zumindest benötige ich eine DAtenbank ohne vorher zu dieser zu Connection, da ja noch keine existiert...  ???:L


----------



## tfa (30. Jan 2008)

Du kannst als DB-URL auch "jdbc:mysql://localhost/" übergeben. Ein DB-Schema anzugeben ist nicht notwendig. Das müsstest Du dann eventuell bei Deinen Abfragen zusätzlich angeben (oder ein "use meineDatenbank" machen).


----------



## Huzehn (30. Jan 2008)

tfa hat gesagt.:
			
		

> Du kannst als DB-URL auch "jdbc:mysql://localhost/" übergeben. Ein DB-Schema anzugeben ist nicht notwendig. Das müsstest Du dann eventuell bei Deinen Abfragen zusätzlich angeben (oder ein "use meineDatenbank" machen).




Aus java insel 6 Buch:



> Die Methode getConnection() erwartet bis zu drei Parameter: Die URL der Datenbank, zu der die Verbindung aufgenommen werden soll, ist der Pflichtparameter



demnach ist die Angabe einer DAtenbank Plicht du sagst aber Nein ??? Was jetzt? Vor allem selbst wenn ich keine DB angebe ? Das gibts doch nicht, dass in 3 der Bücher die ich hier habe überall nichts davon steht wie man in Java eine DAtenbank mit Code erstellt, es wird immer davon ausgegangen eine DB existiert bereits das ist ja ätzend Leute.

```
Class.forName( "com.mysql.jdbc.Driver" );
Connection cn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/myDatabaseName", sUsr, sPwd );
```

Wie schreibe ich die 2. Zeile gemäß java syntax?

so?:   
	
	
	
	





```
Connection myConnection = DriverManager.getConnection("jdbc:mysql://localhost");
    	  Statement myStatement = myConnection.createStatement();
    	  myStatement.executeUpdate("CREATE DATABASE myDatabaseName , user , password");
```
 ??


Wenn ich folgenden code schreibe zeigt eclipse mir einen Fehler an:


```
Statement myStatement = myConnection.createStatement();
```
 Type mismatch, cannot convert from Statement to STatement wie kann das sein, das ist original Code aus x-Büchern getestet?

Wenn ich folgende code ausführe:


```
try
	  {
		  Class.forName("com.mysql.jdbc.Driver");  
      }
      catch(ClassNotFoundException cnfe)
      {    	
    	System.out.println(cnfe.getMessage());
      }
      
      try
      {
    	  Connection myConnection = DriverManager.getConnection("jdbc:mysql://localhost");    	      	  
      }
      catch (SQLException sqle)
      {
    	  System.out.println(sqle.getMessage()); 
      }
```

Erhalte ich diese Meldung:  





> Access denied for user ''@'localhost' (using password: NO)



Warum ist der Zugang auf localhost verboten?


----------



## ^Huzehn (30. Jan 2008)

so habe mich mal gereggt damit ich posts editieren kann etc...:

das hier:

```
cn = DriverManager.getConnection( "jdbc:mysql://MyDbComputerNameOrIP:3306/myDatabaseName", sUsr, sPwd );
```

steht auf dieser site:

http://www.torsten-horn.de/techdocs/java-sql.htm#MySQL

wenn ich das hier dann ausführe:


```
Connection myConnection = DriverManager.getConnection("jdbc:mysql://localhost:3306/Buch,root,mysql");
```

bekomme ich diese Meldung: Access denied for user ''@'localhost' (using password: NO)


wenn ich das hier ausführe:


```
Connection myConnection = DriverManager.getConnection("jdbc:mysql://192.168.1.3:3306/Buch",root,mysql);
```
 man achte auf die geänderten Anführungszeichen...

bekomme ich diese Meldung: 

 root + mysql cannot be resolved


OH MANN....  :autsch: 

OK dann ging ich auf die KOnsolte mit: mysql
> CREATE DATABASE Hallo
danach
>QUIT wobei das nicht funktionierte obwohl es so im Buch steht...

laut Buch muss meine erstellte Datenbank Hallo unter C:\Programme\MySQL\MySQL Server 5.0\data
sein, doch in data steht nix mit Hallo.myd (myd = mysql datenbank endung laut wikipedia...)

Kann mir irgendjemand hier ein Beispiel zeigen wie mit Java eine Datenbank erstellt die einen user + pw hat ? Alles was ich probiere und suche/finde funktioniert nicht...  :bahnhof:

witzig... gerade bin ich wieder auf die konsole mit mysql:

```
> USE Hallo (um die DAtenbank Hallo zu benutzen)
-> Error 1049 Unknown database "Hallo"
```


Gibts das?


----------



## tfa (30. Jan 2008)

Huzehn hat gesagt.:
			
		

> tfa hat gesagt.:
> 
> 
> 
> ...



Das ist kein Widerspruch, nur eine Begriffsverwirrung. Man muss unterscheiden zwischen dem Datenbankverwaltungssystem (DBMS) MySQL und einer konkret angelegten Datenbank im DBMS, dem sogenannten Schema, was die meisten Leute aber einfach nur Datenbank nennen. Die DB-URL muss nur den Host des DBMS enthalten, ein Schema muss nicht angegeben werden. Deswegen schrieb ich "jdbc:mysql://localhost/" und nicht "jdbc:mysql://localhost/myDatabaseName". myDatabaseName ist das Schema, was Du mit CREATE DATABASE (oder wenn Du willst CREATE SCHEMA) anlegen kannst.



> Vor allem selbst wenn ich keine DB angebe ? Das gibts doch nicht, dass in 3 der Bücher die ich hier habe überall nichts davon steht wie man in Java eine DAtenbank mit Code erstellt, es wird immer davon ausgegangen eine DB existiert bereits das ist ja ätzend Leute.
> 
> 
> ```
> ...


Ich würde sagen ein Tippfehler. Steht da wirklich S*T*atement?





> Wenn ich folgende code ausführe:
> 
> 
> ```
> ...



Du musst die Rechte in MySQL entsprechend setzen, z.B. mit GRANT ALL PRIVILEGES...

Oder versuch:


```
Connection myConnection = DriverManager.getConnection("jdbc:mysql://localhost", "root","mysql");
```


----------



## ^Huzehn (30. Jan 2008)

[/quote]Ich würde sagen ein Tippfehler. Steht da wirklich S*T*atement?





> Nein da steht Statement nicht STatement, darum ist es ja ein witz...
> 
> 
> 
> ...


----------



## tfa (30. Jan 2008)

Klappt denn wenigstens folgendes an der MySQL-Konsole:


```
create database Hallo;
show databases;
quit;

Konsole neu starten.

show databases;
```

?


----------



## ^Huzehn (30. Jan 2008)

tfa hat gesagt.:
			
		

> Klappt denn wenigstens folgendes an der MySQL-Konsole:
> 
> 
> ```
> ...



doch das geht jetzt in meinen Unterlagen waren keine semikolons am Ende daher gings auch net...

schau mal das obwohl die datenbank "buch" existiert und ich eine tabelle verwaltung darin anlegen will sagt mir mysql geht nicht da keine Datenbank angegeben??





was ist an der anweisung falsch eigentlich nichts ? Ist auch aus meinen Unterlagen...



```
Statement myStatement = (Statement) myConnection.createStatement();
```

wenn ich caste dann geht die fehlermeldung weg? Obwohl ich hier 3 bücher habe die das alle ohne Cast machen, wie ist das möglich? liegts an java 1.6_04 wurde da was geändert kann ich mir net vorstellen...


----------



## tfa (30. Jan 2008)

Entweder Du machst zuerst ein "use hallo;" oder "create table hallo.buch...."

>wenn ich caste dann geht die fehlermeldung weg? Obwohl ich hier 3 bücher habe die das alle ohne Cast machen, 
>wie ist das möglich? liegts an java 1.6_04 wurde da was geändert kann ich mir net vorstellen...

Wie sieht denn der Code aus? Welche Klassen importierst Du?


----------



## ^Huzehn (30. Jan 2008)

tfa hat gesagt.:
			
		

> Entweder Du machst zuerst ein "use hallo;" oder "create table hallo.buch...."
> 
> >wenn ich caste dann geht die fehlermeldung weg? Obwohl ich hier 3 bücher habe die das alle ohne Cast machen,
> >wie ist das möglich? liegts an java 1.6_04 wurde da was geändert kann ich mir net vorstellen...
> ...



du mißverstehst, hallo wie auch buch ist eine angelegte Datenbank wenn ich jetzt eine Tabelle anlege für die datenbank buch, dann kann ich doch net "create table hallo.buch(autor varchar(50)); usw schreiben sondern create table buch(autor varchar(50));

hallo.buch , buch ist doch kein Objekt oder Unterteil von hallo ???

EDIT: ok jetzt versteh ich wie dus meinst so:

> use buch
> create table verwaltung (autor varchar(50)); usw...

zuerst auf buch referenziert, danach folgt die Tabelle verwaltung...

imports... werden aber automatisch importiert in eclipse mit strg+shift+O daran kanns net liegen


```
import java.awt.AWTException;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
```


----------



## tfa (30. Jan 2008)

Bei den Importen vermisse ich java.sql.Statement.


----------



## ^Huzehn (30. Jan 2008)

tfa hat gesagt.:
			
		

> Bei den Importen vermisse ich java.sql.Statement.



ja ich weiß...ist mir später auch aufgefallen... das hier stand noch 2 zeilen unter den anderen imports:


```
import com.mysql.jdbc.Statement;
```
 scheint so als mag java den import net...


----------



## ^Huzehn (30. Jan 2008)

ein problem habe ich noch wenn ich mit java ne DB erstelle und rufe mein programm das 2. mal auf bekomme ich die fehlermeldung cant create, da es die DB schon gibt... wie kann ich das prüfen ob die db schon existiert und nur wenns die net gibt mache ich create usw. ?

achso danke tfa für deine tips und hilfe  :wink:  die DAtenbank buch wo befindet sich denn diese? Immer wenn ich mit create database buch;  eine erstelle und unter mysql/data suche ist sie nicht dort?  ???:L


----------



## tfa (31. Jan 2008)

^Huzehn hat gesagt.:
			
		

> ein problem habe ich noch wenn ich mit java ne DB erstelle und rufe mein programm das 2. mal auf bekomme ich die fehlermeldung cant create, da es die DB schon gibt... wie kann ich das prüfen ob die db schon existiert und nur wenns die net gibt mache ich create usw. ?


Das steht in der Dokumentation.


> achso danke tfa für deine tips und hilfe  :wink:  die DAtenbank buch wo befindet sich denn diese? Immer wenn ich mit create database buch;  eine erstelle und unter mysql/data suche ist sie nicht dort?  ???:L


Bei mir stehen die unter /var/lib/mysql. Keine Ahnung wo die bei Dir sind.


----------

