Datenbankanbindung

Status
Nicht offen für weitere Antworten.

Java Light

Aktives Mitglied
Hallo zusammen...

Ich habe ein Problem und komme einfach nicht mehr weiter. Das Problem entsteht beim laden JDBC Treiber: Class.forName("com.mysql.jdbc.Driver");
Der Code sieht folgendermassen aus:

Code:
package ch.essec.sherin;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

// javac HelloJDBC.java
// java -classpath /home/marnitz/ojdbc14.jar:/home/marnitz/ HelloJDBC
// jdbc:oracle:thin:@deanston.cs.uni-magdeburg.de:1521:tix

public class DatabaseRoom {
	
	private static String query = null; // Anfragestring
	private static Connection connection = null; //Verbindung zur Datenbank
	private String description;
	
	
	
	/**
	 * Oeffnen einer Datenbankverbindung
	 */
	public void initDBConnection(){
		String url ="jdbc:mysql:/host/Hotelreservationssystem"; //URL zur Datenbank
		String username = ""; //Nutzername
		String password = ""; //Passwort
				
		// Holen des SQL-Treibers
		try {
			Class.forName("com.mysql.jdbc.Driver");
		}
		catch(ClassNotFoundException e1) {
			e1.printStackTrace();
			System.exit(1);
		}
		//Erstellung einer Verbindung zur Datenbank
		try {
			connection = DriverManager.getConnection(url, username, password);
			//Ausfuehren einer DB-Anfrage
			executeQuery();
			//Schliessen der DB-Verbindung
			connection.close();
		}catch (SQLException e) {
			e.printStackTrace();
		}
	}
	/**
	 * Ausfuehrung der DB-Anfrage
	 */
	public void executeQuery(){
		try {
			/**
			 * Hier wird die DB-Anfrage gesetzt!!!!
			 */
			Room room = new Room();
			description = room.getRoomDescription();
			query = "insert into room VALUES ('101', 'Doppelzimmer', 'false' description)"; 
			//query = "select * from cocktail"; 
			//Erzeugung eines Statements
			Statement statement = connection.createStatement();
			//Holen Ergebnismenge der Anfrage
			ResultSet resultSet = statement.executeQuery(query);
			//Ausgabe des Anfrageergebnisses
			showResult(resultSet);
			//Schliessen des ResultSets
			resultSet.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}		
	}
	/**
	 * Ausgabe der Ergebnismenge 
	 */
	public void showResult(ResultSet resultSet){
		try {
			//Holen der Metadaten der Datenbank
			ResultSetMetaData metaData = resultSet.getMetaData();
			//Anzahl der Tabellenspalten
			int number = metaData.getColumnCount();
			System.out.println();
			//Ausgabe der Spaltennamen 
			for (int i=1;i<=number;i++){
				//Name der Tabellenspalte
				String name = metaData.getColumnName(i);
				System.out.print(name + "   ");
			}
			System.out.println();
			System.out.println("--------------------------------\n");
			//Zeilenweise Ausgabe der Tabellenwerte
			while(resultSet.next()){
				for(int i=1;i<=number;i++)
					System.out.print(resultSet.getString(i)+ " ");
				System.out.println();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

Der Fehlercode sieht folgendermassen aus:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at ch.essec.sherin.DatabaseRoom.initDBConnection(DatabaseRoom.java:31)
at ch.essec.sherin.RoomErfassung.main(RoomErfassung.java:10)

Kann mir jemand helfen? Ich glaube das ich irgendwo einen kleinen Fehler gemacht habe?

Besten Dank für Eure Hilfe...
 

Tobias

Top Contributor
Tjo, das stinkt nach: Lib nicht im Classpath... Liegt das Jar mit dem MySQL-Treiber im Classpath? Wenn nein, füg's mal hinzu.

mpG
Tobias
 

The_S

Top Contributor
Nein, du musst dir den Treiber runterladen und dann über den Build-Path mit einbauen.
 

Java Light

Aktives Mitglied
Hallo zusammen

Habe diesen Schritt unterdessen gemeistert, ich wusste nicht, dass man noch ein zusätzliches Connection Char herunterladen muss. Ich habe nun aber ein weiteres Problem. Ich habe das Gefühl mein Statement wird nicht akzeptiert. Ich erhalte jedesmal folgende Fehlermeldung:

java.sql.SQLException: Can not issue data manipulation statements with executeQuery().
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)
at com.mysql.jdbc.Statement.checkForDml(Statement.java:398)
at com.mysql.jdbc.Statement.executeQuery(Statement.java:1075)
at ch.essec.sherin.DatabaseRoom.executeQuery(DatabaseRoom.java:63)
at ch.essec.sherin.DatabaseRoom.initDBConnection(DatabaseRoom.java:41)
at ch.essec.sherin.RoomErfassung.main(RoomErfassung.java:10)
com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: No operations allowed after connection closed.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:888)
at com.mysql.jdbc.Connection.checkClosed(Connection.java:1903)
at com.mysql.jdbc.Connection.createStatement(Connection.java:2962)
at com.mysql.jdbc.Connection.createStatement(Connection.java:2944)
at ch.essec.sherin.DatabaseRoom.executeQuery(DatabaseRoom.java:61)
at ch.essec.sherin.RoomErfassung.main(RoomErfassung.java:11)


Der Fehler den er mir anzeigt ist, soll beim erstellen des Statements entstehen:

Statement statement = connection.createStatement();

Kann mir hier auch jemand helfen?
Meine Tabelle ist 5 Zeilen gross, eines ist ein AutoInkrement, muss ich da trotzdem ein Wert mitgeben?

Besten Dank und bis bald...
 
G

Gast

Gast
der fehler steht da ja schon:
Can not issue data manipulation statements with executeQuery().

und wenn du dann in die api guckst siehst du das es ne executeUpdate() methode gibt die für verändernde statements gedacht ist
 

sayang

Aktives Mitglied
Code:
query = "insert into room VALUES ('101', 'Doppelzimmer', 'false' description)";
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(query);
nicht executeQuery(query) sondern executeUpdate(query)

Lg
sayang
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben