PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Datenbankzugriff mit JDBC mit MySQL 5.0.15-max



mister.xy
06.11.05, 20:48
Hallo,

ich habe folgendes Problem:

Der MySQL 5.0-Max-Server funktioniert reibungslos und MySQL ist auch als Service eingerichtet. Den MySQL-Connector/J habe folgendermaßen in der .bashrc eingetragen:

export CLASSPATH=$CLASSPATH://home/heuberger284/mysql-connector-java-3.1.11-bin.jar

Und wenn ich ein Java-Programm starte, kommt folgendes, wobei beim Kompilieren keine Fehler kommen:

java.sql.SQLException: Access denied for user ''@'localhost' to database 'mitarbeiter'
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.ja va:2926)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.ja va:771)
at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java: 3647)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:11 76)
at com.mysql.jdbc.Connection.createNewIO(Connection.j ava:2544)
at com.mysql.jdbc.Connection.<init>(Connection.java:1474)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonReg isteringDriver.java:266)
at java.sql.DriverManager.getConnection(DriverManager .java:512)
at java.sql.DriverManager.getConnection(DriverManager .java:193)
at DB1.main(DB1.java:20)
Exception in thread "main" java.lang.NullPointerException
at DB1.main(DB1.java:31)

Kann mir jemand sagen, was ich machen muß, dass ich Daten reibungslos aus der MySQL-Datenbank auslesen bzw. eintragen kann. :confused:

Für eine schnelle Antwort im Voraus besten Dank.

Gruß
mister.xy

oafish
07.11.05, 13:01
Hi, steht doch da:
java.sql.SQLException: Access denied for user ''@'localhost' to database 'mitarbeiter'
Der Benutzer hat nicht das Recht um auf @localhost zu zugreifen!

Gruß

oafish

mister.xy
10.12.05, 13:49
Danke für Antwort.

Eine gewisse Zeit lang funktionierte alles reibungslos.

Heute bekam ich beim Starten eines JDBC-Programms folgende Meldung:

DB-Treiber wird geladen...!
ERROR: Access denied for user ''@'localhost' (using password: NO)
DB-Verbindung wurde wieder getrennt.
Exception in thread "main" java.lang.NullPointerException
at insertBank.main(insertBank.java:88)

Als ich nach diesem Benutzer in Datenbank mysql in der Tabelle User schaute, fand ich ihn nicht. Zusätzlich kommt auch noch dieses using password:NO nach localhost.
Ich habe sonst allen Benutzern mittels grant das Zugriffsrecht erteilt. Also müsste alles reibungslos funktionieren, tut es aber nicht. :rolleyes:

Kann mir jemand sagen,wie wieder mit einem JDBC-Programm Daten aus der MySQL-DB auslesen bzw. eintragen kann. :confused:

Für eine schnelle Antwort im Voraus besten Dank.

Gruß
mister.xy

marce
10.12.05, 20:43
... Du solltest halt mit einem existierenden Benutzer und dessen Passwort auf dei DB connecten...

übrigens wäre in dem Fall der entsprechende Quellcode zur Diagonose durchaus mal hilfreich...

mister.xy
11.12.05, 10:14
... Ich greife mit einem bestehenden Benutzer (nicht mit dem anonymen Benutzer) auf die Datenbank zu. Hier ist noch der
Quellcode meines Programmes:



/*insertBank.java*/

import java.sql.*;
import java.io.*;

public class insertBank
{
private String user="hielscre";
private String password="polo45";
private static Connection conn;
private static ResultSetMetaData resultMeta;

public static void main(String args[]) throws SQLException
{
//Pruefe korrekten Programmaufruf
if(args.length != 2)
{
System.err.println("Usage: java insertBank <blz>
<bankname>");
System.exit(1);
}

String blz = new String(args[0]);
String bankname = new String(args[1]);


try
{
Class.forName("com.mysql.jdbc.Driver").newInstance();
System.out.println("DB-Treiber wird geladen...!");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/eshop?user&password");
System.out.println("DB-Verbindung hergestellt...");
conn.setAutoCommit(false);
}
catch(Exception e)
{
//System.err.println("ERROR: "+e.getMessage());
e.printStackTrace();
}

try
{
//Neue Bank in die Datenbank einfuegen
String insertBank = "insert into bank values ('"+ blz +"','"+ bankname +"')";
//System.out.println("insert into bank values ('"+ blz +"','"+ bankname +"');");
Statement insertSt = conn.createStatement();
insertSt.executeUpdate(insertBank);
System.out.println("Neue Bank wurde erfolgreich hinzugefuegt.");
insertSt.close();
conn.commit();
conn.setAutoCommit(true);

//Daten in der Datenbank abfragen
String selectBank = "select * from bank";
Statement stateSt = conn.createStatement();
ResultSet resultS= stateSt.executeQuery(selectBank);
resultMeta = resultS.getMetaData();
int anzSpalten = resultMeta.getColumnCount();
for(int i=1;i<=anzSpalten;i++)
{
System.out.print(resultMeta.getColumnName(i) + ", ");
}
System.out.println();
System.out.println("------------------------------");
while(resultS.next())
{
for(int i=1;i<=anzSpalten;i++)
{
System.out.print(resultS.getString(i) + ", ");
}
System.out.println();
}
System.out.println("------------------------------");
System.out.println("------------------------------");
stateSt.close();
}
catch(SQLException e)
{
System.err.println("SQL-ERROR: "+e.getMessage());
conn.rollback();
}

finally
{
System.out.println("DB-Verbindung wurde wieder getrennt.");
conn.close();
}
}
}


Beim Starten des Programms kommt nach wie vor folgendes:



DB-Treiber wird geladen...!
java.sql.SQLException: Access denied for user ''@'localhost' (using password: NO)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.ja va:2926)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.ja va:771)
at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java: 3647)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:11 76)
at com.mysql.jdbc.Connection.createNewIO(Connection.j ava:2544)
at com.mysql.jdbc.Connection.<init>(Connection.java:1474)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonReg isteringDriver.java:266)
at java.sql.DriverManager.getConnection(DriverManager .java:512)
at java.sql.DriverManager.getConnection(DriverManager .java:193)
at insertBank.main(insertBank.java:30)
DB-Verbindung wurde wieder getrennt.
Exception in thread "main" java.lang.NullPointerException
at insertBank.main(insertBank.java:85)


Kann mir jemand sagen, an welcher Stelle sich der Fehler befindet?

marce
12.12.05, 06:03
bin kein Java-Experte, aber lt.
http://java.sun.com/j2se/1.3/docs/guide/jdbc/getstart/drivermanager.html

sollte das

conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/eshop?user&password"); anders aussehen...