Java und SQL-Treiber

RealHAZZARD

Erfahrenes Mitglied
Servus.

Java in Kombination mit sql bringt mich noch um den Verstand.
Ich wolle nur mal testhalber eine Verbindung zu ner mySQL-DB
machen. Der meckert aber immer am Treiber rum. (java.lang.ClassNotFoundException)

Erstaml mein Code (Ausschnitt):
Code:
...
Connection con;
try 
        {
            Class.forName ("com.mysql.jdbc.Driver");
          con = DriverManager.getConnection("jdbc:C:\\Programme\\xampp\\mysql\\data\\nuke",user,pw);
              return true;
          }catch (ClassNotFoundException cnf)  
          { 
              cnf.printStackTrace();
              return false;
          }catch (SQLException sqle)
          {
              sqle.printStackTrace();
              return false;
...
Ich denke das(com.mysql.jdbc.Driver) muss so dastehen!?

Und meine nächste Frage wäre dann, wie addressiere ich den localhost? (vielmehr die DB dahinter)
Hab ich in nem anderen Beispiel auch schon gemacht, wollte aber auch
nicht ganz so klappen, wie ich mir das vorgestellt habe.

Und...Kann man diese ganze Treibergeschichte nicht etwas dynamsicher machen?
Ich dachte DriverManager.getDriver("Url") würde mir da helfen?
Also so nach dem Motto: Ich frag mit getdriver nach dem benötigten Treiber und übergebe das dann an Class.forName.Oder?
Hat da vielleicht jemand einen Tip oder ein Beispiel (wie man getdriver richtig verwendet)?

THX
 
Lösung anbei:
Code:
private String treiber ="org.gjt.mm.mysql.Driver";
private String url = "jdbc:mysql://localhost:3306/ArtikelDB";

private Connection con;

public Demo () {

try {
  Class.forName(treiber);
  con=DriverManager.getConnectionn(url, "user", "passwd");

 } catch (Exception es) {
//Exception - Handling
}
 
Ich habe mir irgendwann mal eine Klasse geschrieben, mit der ich eine localhost-MySQL-DB anbinde und das funktioniert auch problemlos.
Einfach 'nen mysql-connector-java-x.x.x in's Projekt einbinden und folgenden code adaptieren:


Code:
import java.sql.Connection;
import java.sql.SQLException;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

public class ConnectionDB {
	private MysqlDataSource mds;

	public Connection getConnectionDB() {
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException cnfe) {
			cnfe.printStackTrace();
		}

		mds = new MysqlDataSource();
		mds.setUser("Dein User-Name");
		mds.setPassword("Dein Passwort");
		mds.setServerName("localhost");
		mds.setPort(3306); //Standard-Port  -  evntl. anpassen
		mds.setDatabaseName("Datenbankname");

		try {
			return mds.getConnection();
		} catch (SQLException sqle) {
			return null;
		}
	}

	public ConnectionDB() {
		getConnectionDB();
	}
}

Allerdings hätte Dir Ähnliches auch die Suchfunktion geboten!

Ich habe in meinem Beispiel sämtliche Parameter explizit und statisch angegeben. Das kann man natürlich auch in einem statement konzentrieren und ggf. dynamisch gestalten (ist aber, wenn es erstmal läuft, nur eine reine Fingerübung).
 
Hallo!

Wenn man die DataSource Implementierungen eines JDBC Treibers verwendet, so muß man die JDBC Treiber Klasse in der Regel nicht mehr explizit laden... das wird von der DataSource übernommen.

Gruß Tom
 
Holla.

Danke für die schnelle Hilfe.
Aber ich glaube ich habe ein ganz anderes problem.
Den Import(com.mysql.jdbc.jdbc2.optional.MysqlDataSource) den du (@Ein_Freund) mir
angegeben hast, findet Eclipse nicht. Ich glaube ich bin einfach nur zu doch das mit den Treibern im Gesamten zu verstehen. Oder wieso kann ich den Improt nicht nachvollziehen?:confused:
 
Sry. @Thomas. Deinen Post habe ich zu Spät gesehen.

Meinst du damit, dass ich weder nen dem entsprechenden Import brauche, noch die
Sache mit dem Class.getName("")?
 
Hallo!

Du musst das jar mit dem Mysql JDBC Treiber auch in den Classpath legen...
Z.Bsp. so in Eclipse:
Project properties-> build path -> libraries -> add external jar -> mysql driver...

Gruss Tom
 
Jaaaaa.
Danke. Habs eingesehen.

Kann ich eigentlich mit den Treibern aller Hersteller so einfach arbeiten, oder haben die da
teilweise was dagegen?
Weil Oracle zB. kostet doch Geld. Aber gilt das auch für den jenigen, der einen Software basteln möchte, die OracleDB verwaltet (nix großes. nur tabellen erstellen/anzeigen und so ein zeugs)?
 
Original von Thomas Darimont
Wenn man die DataSource Implementierungen eines JDBC Treibers verwendet, so muß man die JDBC Treiber Klasse in der Regel nicht mehr explizit laden... das wird von der DataSource übernommen.
Danke für den Hinweis!
Aber was heisst 'in der Regel' ? Kann es da zu Problemen kommen, wenn ich das explizite Laden weglasse oder ist das zuverlässig, dass die DataSource das übernimmt?
 
Hallo!

Aber was heisst 'in der Regel' ? Kann es da zu Problemen kommen, wenn ich das explizite Laden weglasse oder ist das zuverlässig, dass die DataSource das übernimmt?
Ich schrieb in der Regel, weil ich noch zu Faul war in der Spec nachzuschauen. Jedoch weis ich aus Erfahrung, dass die DataSource Implementierungen der entsprechenden JDBC Treiber fuer Mysql, Oracle, PostgreSQL, DB2, HyperSonic den JDBC Treiber selbst laden.

Gruss Tom
 
Zurück