# Sql Exception



## Einklang. (12. Mai 2012)

Ich hab folgende Fehlermeldungen: 

```
java.sql.SQLException: No suitable driver found for jdbc:derby:1527/COREJAVA;create=true
java.sql.SQLException: No suitable driver found for jdbc:mysql:1527/COREJAVA;create=true

java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:1527/COREJAVA;create=true
java.sql.SQLException: No suitable driver found for jdbc:derby://localhost:1527/COREJAVA;create=true
```

Egal was ich als Url eingebe, nichts wird akzeptiert....! 

Das hier ist als Treiber angegeben: 

```
String drivers = "org.apache.derby.jdbc.ClientDriver";
```


Wie weiter vorgehen?


----------



## Fab1 (12. Mai 2012)

hast du denn die JDBC .jar in deinem Projekt eingebunden?


----------



## Einklang. (12. Mai 2012)

Das hier sind die import Angaben:


```
import java.sql.*;
import java.io.*;
import java.util.*;
```

Oder nach was sollte ich suchen?


----------



## Marcinek (12. Mai 2012)

Du musst den Treiber im Classpath haben.

Welche Datenbank möchtest du benutzen?


----------



## Back2Basic (12. Mai 2012)

du musst dir den Treiber .jar in dein aktuelles Projekt laden bzw. einfügen


----------



## Einklang. (12. Mai 2012)

Ok und wie?


----------



## Marcinek (12. Mai 2012)

Google?

Jar in Classpath einfügen.


----------



## Einklang. (12. Mai 2012)

Also ich suche nun in Google danach und bekomme folgendes Ergebnis: 
https://www.google.de/#hl=de&gs_nf=...gc.r_pw.r_cp.r_qf.,cf.osb&fp=c40d5335f43ded9f

So und nun, wie wähle ich aus, was davon nun zu meinem Problem passt??? Woher soll ich nun wissen welches Ergebniss der Suche nun richtig ist oder nicht, wenn ich mich nicht auskenne! Einmal kurz drüber nachgedacht dann weiß man, was so nen Hinweis dem Fragenden bringt...!!! :autsch:

Jetzt kann ich mich durch 5 Ergebnisse durchlesen, in denen 100 mal was drin steht was ich nicht brauche, mir nichts nützt und vor allem WO ICH NICHT WEIß OB ES NÜTZT ODER NICHT, DAZUGEHÖRT ODER NICHT!! Darum frage ich hier, denn wer sich auskennst, kann aus den Informationen das Unpassende herausfiltern..! ;-)

Beispiel: 

Jetzt lese ich das hier



> Eine JAR in den Classpath aufnehmen
> 
> Erstellen Sie sich zuerst eine Testklasse
> 
> ...



von der Webseite: Java Blog Buch : 07.04.04 jar – Klassen zusammenfassen und ausführen

Und jetzt kann ich Fragen dazu stellen - ich komm vom Regen in die Traufe.......! Anstatt dass es einfach nur erklärt wird, von mir aus auch mit Links - aber gezielten Links und Erklärungen, die mir helfen (und jedem anderen, der die Hilfe hier benötigt)! 

Ist doch nicht so schwer!


----------



## Camino (12. Mai 2012)

Zum Beispiel für Eclipse:
How to Add JARs to Project Build Paths in Eclipse (Java)


----------



## Einklang. (12. Mai 2012)

Punkt 2 von Schritt 1 hörts schon wieder auf! 

Copy the JARs you need to lib.

Woher weiß ich jetzt, welche libs ich da brauche? 
Wie gesagt, es geht doch jetzt darum: 	"du musst dir den Treiber .jar in dein aktuelles Projekt laden bzw. einfügen "


Jetzt mal ne Preisfrage - wurde die Anleitung wirklich herausgesucht mit der Überzeugung "ja die hilft hier ganz sicher"? Die wurde doch nur hierher gesetzt mit "wird schon passen, der **** soll sichs selber zusammensuchen wenn was fehlt......"! Anders kann ich mir das nicht erklären, dass eine "Anleitung" verwiesen wird, in der dann drin steht "die dateien die man möchte einfach kopieren", wenn ich nach einer Lösung für den Treiber frage! 

Bin ich hier in einem Autistenclub gelandet oder wie sieht das hier aus - ist hier jemand fähig sich in die Situation eines anderen hineinzuversetzen oder lebt jeder in seiner eigenen Welt? Entschuldigung, aber das finde ich schon sehr seltsam!









Bemerkung im Zusammenhang einer früheren Frage von heute/gestern: Wie gesagt - ist ja ganz super! Jetzt kann ich wegs solchen Details nachfragen und ewig rumtun, anstatt dass grundsätzlich mal an einem oder zwei Beispielen direkt praktisch mit Code usw. erklärt wird (zb für derby und mysql), wie man ne Datenbank anschließt (für Fleißige dann auch mit Variationen und anderen Möglichkeiten als erweiterte Darstellung...)! Sehr intelligent... der zigfache Aufwand...! Jetzt muss man nämlich eine detailliert passende Lösung für mich persönlich herausarbeiten, bei der der gesamte Zusammenhang anderen Nutzern völig abhanden geht!  :toll: :applaus:


----------



## Camino (12. Mai 2012)

Einklang. hat gesagt.:


> Punkt 2 von Schritt 1 hörts schon wieder auf!
> 
> Copy the JARs you need to lib.
> 
> ...



lib ist ein Ordner, den du einfach in deinem Projektordner erstellen/anlegen kannst, und das JAR ist dein Treiber (eine Datei mit der Endung .jar), welche du in diesem Ordner ablegst...


----------



## Einklang. (12. Mai 2012)

Ganz ehrlich mal gefragt - kann doch nicht wirklcih ernst gemeint sein als Hilfe? 

Ist es nicht nervtötend immer wieder nach Details zu fragen, anstatt wie ich heute/gestern wollte dassm an einfach für alle einsehbar und nachzuvollziehen eine allgemeine Anleitung schreibt, ein kleines Beispielprogramm für die Datenbankanbindung?

Das ist so ineffektiv und nervtötend - kein Wunder dass hier so viele so frustriert sind! ;-)



Warum nicht einfach eine Anleitung schreiben, die von vorne bis hinten stimmt? :idea:

Ich mein ich kann jetzt weiter nach den Details fragen, aber warum setzt man sich nicht zusammen und arbeitet eine Gesamtlösung aus die dann im Forum direkt gepostet wird für jeden einsehbar? Würde die DAtenbankabteilung schön schmücken! :applaus:

Hier ich setz gern den Beispielcode nochmal hierher:


```
import java.sql.*;
import java.io.*;
import java.util.*;


/**
 * This program tests that the database and the JDBC Driver are correctly configured.
* @version 1.01 2004-09-24
* @author Cay Horstmann
**/

class TestDB
{
	public static void main(String args[])
	{
		try
		{
			runTest();
		}
		catch (SQLException ex)
		{
			for (Throwable t: ex)
				t.printStackTrace();
		}
		catch (IOException ex)
		{
			ex.printStackTrace();
		}
	}
	
/**
 * Runs a test by creating at able, adding a value, showing the table contents, and
 * removing the table. 
 **/
public static void runTest() throws SQLException, IOException
{
	Connection conn = getConnection();
	
	try
	{
		Statement stat = conn.createStatement();
		
		stat.executeUpdate("CREATE TABLE Greetings (Message CHAR(20))");
		stat.executeUpdate("INSERT INTO Greetings VALUES ('Hello World')");
		
		ResultSet result = stat.executeQuery("SELECT * FROM Greetings");
		if (result.next())
			System.out.println(result.getString(1));
		result.close();
		stat.executeUpdate("DROP TABLE Greetings");
	}
	finally
	{
		conn.close();
	}
}

/**
 * Gets a connection from the properties specified in the file database properties
 * @return the database connection
 **/

public static Connection getConnection() throws SQLException, IOException
{
	
	String drivers = "com.mysql.jdbc.Driver";
	if(drivers != null) System.setProperty("jdbc.drivers", drivers);
	String url = "jdbc:mysql://localhost:3306/<datenbankname>;";
	String username = "Datenbankbenutzer";
	String password = "passwort";
	
	return DriverManager.getConnection(url, username, password);
	
}

}
```


Wobei hier eine externe sql Datenbank mit mysql verwendet wird - aber wie gesagt - das hier funktioniert ja nicht!!!!!

Der Code für derby sollte folgendermaßen sein:


```
String drivers = "org.apache.derby.jdbc.ClientDriver";
	if(drivers != null) System.setProperty("jdbc.drivers", drivers);
	String url = "jdbc:derby://localhost:1527/<datenbankname>;create=true";
	String username = "Datenbankbenutzer";
	String password = "passwort";
```


----------



## Fab1 (12. Mai 2012)

Welche Entwicklungsumgebung (IDE) benutzt du denn?

Es gibt ja die JDBC diese wird benötigt um mit der DB MySQL kommunizieren zu können.


> Zu den Aufgaben von JDBC gehört es, Datenbankverbindungen aufzubauen und zu verwalten, SQL-Anfragen an die Datenbank weiterzuleiten und die Ergebnisse in eine für Java nutzbare Form umzuwandeln und dem Programm zur Verfügung zu stellen.



Hier kannst du dir diesen MySQL JDBC Treiber runterladen, falls du das noch nicht getan hast. JDBC Treiber


Den JDBC Treiber einbinden mit Eclipse. Rechtsklick auf dein Projekt --> Build Path --> Configure Build Path --> add External JARs--> mysql-connector-java-5.1.18-bin auswählen. Der Name kann aufgrund unterschiedlicher Versionen abweichen. Die Jar befindet sich in dem Ordner der heruntergeladen wurde. Nun sollte das so aussehen.







Nun muss nur noch der Code stimmen.


Folgende Instanzvariablen werden genutzt:


```
private ResultSet rs;
	private Statement stmt;
	private Connection con;
```
Folgender Code baut eine Verbindung zum Datenbankserver auf. Allerdings muss der Datenbankname, Benutzername und das Passwort angepasst werden.

```
/**
	 * Baut die Verbindung zum Datenbankserver MySQL auf. 
	 */
	public void setConnection() {
		con = null;
		stmt = null;

		try {

			Class.forName("com.mysql.jdbc.Driver").newInstance();

		} catch (Exception ex) {
			ex.printStackTrace();
		}
		try {
			con = DriverManager.getConnection(
					"jdbc:mysql://localhost/schuldenverwaltung", "root","deinPW"); // hier muss der Datenbankname (schuldenverwaltung), Benutzername (root) und das Passwort (deinPW) eingegeben werden.
		} catch (SQLException ex) {
			ex.printStackTrace();
		}
	}
```

Nun kannst man eine Abfrage auf den Server starten. Dies kann zum Beispiel so aussehen. Natürlich muss die Abfrage auf eure Datenbank angepasst werden. 


```
private void executeInsertInto(){
		
		PreparedStatement stmt;
		
		try {
		stmt = con.prepareStatement("Insert into tbl_schulden (name, vorname) Values('" + name+ "','" 
									+ vorname + "' )" );
			
		System.out.println("Ein neuer Schuldner wurde hinzugefügt");
			
		stmt.executeUpdate();
		stmt.close();
			
		con.close();
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
```

Nun müssen die Suchergebnisse nur noch ausgegeben werden. Dies habe ich im folgenden Code einfach mal mit einer Konsolenausgabe realisiert.


```
private void resultSetSearch() {

		try {
			ResultSetMetaData rsmd = rs.getMetaData();

			int colNo = rsmd.getColumnCount();

			while (rs.next()) {

				Object[] objects = new Object[colNo];

				for (int i = 0; i < colNo; i++) {

					objects[i] = rs.getObject(i + 1);

				}

				//tModel.addRow(objects);
				for(Object s : objects){
					System.out.println(s);
				}

			}

			stmt.close();
			con.close();

		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
```

Abschließend sei nur noch zu sagen, ich bin sicherlich kein Datenbankspezialist. Sollten irgendwelche Methoden veraltet oder einfach nur unpraktikabel sein, bin ich gern offen für alles. Aber es funktioniert und das war mir an dem Zeitpunkt am wichtigsten.

Sollte ich etwas vergessen haben, weißt mich darauf hin!


----------



## Marcinek (12. Mai 2012)

Welche IDE benutzt du?

Hast du dir einen JDBC Treiber herunter geladen? Wenn ja welchen?

Wo befinden sich deine externen Libs?

---

Würde man hier ein Tutorial schreiben, würde man diese Sachen durch "Deine gewünschten" ersetzen. Da du zu keiner Transferleistung bereit / fähig bist, wird dir das wieder nix bringen.

Hier wird niemand für Grundlagen nochmal Grundlagen Tutorials schreiben. Du möchtest etwas machen, was einem Anfänger etwas mehr Hintergrundwissen abverlangt. 

Du musst doch nur eine JAR in dein Classpath einfügen. Hast eine Suche gepostet, wo alle Themen sich damit beschäftigen. Schon der erste Post zeigt, wie das geht.

Ich könnte hier nur exakt das selbe Posten, aber das würde doch offensichtlich nicht weiterbringen.


----------



## Einklang. (12. Mai 2012)

Sehr genial, jetzt funktioniert es!

Ich habe nur den Connector eingebunden wie gezeigt, aber nichts am Code geändert! 

Besten Dank, so solls sein! ;-)
Bei den Zugangsdaten von dem Code muss jeder nur noch seine Root-ZUgangsdaten von mysql eingeben oder speziell für diese Datenbank die Zugangsberechtigung und dann ist der Code 1:1 funktionstüchtig!

Ich nutze Eclipse Indigo!


----------

