Announcement

Collapse
No announcement yet.

DB-Treiber zur Laufzeit laden?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • DB-Treiber zur Laufzeit laden?

    Hallo!

    Ich möchte in einer Datenbank-unabhängigen Anwendung den DB-Treiber erst zur Laufzeit nachladen.

    Beim folgenden Test-Code

    Code:
    package loadsqldriveratruntime;
    
    import java.net.URL;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    
    public class Main {
        public static void main(String[] args) {
            String jarPath = "file:///home/egon/lib/mysql-connector-java-3.1.14-bin.jar";
            try {
                java.net.URL p = new URL(jarPath);
                java.net.URLClassLoader loader = new java.net.URLClassLoader(new URL[]{p}, ClassLoader.getSystemClassLoader());
                String driverName = "com.mysql.jdbc.Driver";
                Class c = loader.loadClass(driverName);
                Class.forName(driverName, true, loader).newInstance();
                Connection cn = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbname", "username", "password");
            } catch (Exception ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
    steigt das Programm mit einer SQLException aus:

    java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/dbname

    Wie berichtige ich den Code?

    Viele Grüße

    Egon Schmid

  • #2
    schon das

    Connection cn = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbname", "username", "password");

    ist nicht datenbankunabhänigig

    Üblicherweise löst man das mit Konfiguratinsdateien (Propertiesdateien)
    die geladen werden.

    Wie willst du das Problem der verschiedenen SQL-Dialekte lösen?
    Man nutzt dann ORM-Mapper wie Hibernate

    Zu deinem obigen Problem könnte es sinnvoll sein, den aktuellen Treiber zu benutzen...
    Zuletzt editiert von Christian Marquardt; 18.09.2011, 08:57.
    Christian

    Comment


    • #3
      Originally posted by Christian Marquardt View Post
      schon das

      Connection cn = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbname", "username", "password");

      ist nicht datenbankunabhänigig

      Üblicherweise löst man das mit Konfiguratinsdateien (Propertiesdateien)
      die geladen werden.
      Das ist richtig, der Code war auch nur ein Test. Ich wollte einfach nur probieren, den Treiber zu laden, wenn er nicht im CLASSPATH vorhanden ist.

      Gruß

      Egon

      Comment


      • #4
        Investiere Zeit lieber hier:



        http://www.hibernate.org/

        http://docs.jboss.org/hibernate/core...S/html_single/

        Du solltest das Mapping mit den Annotaions benutzen...
        Christian

        Comment

        Working...
        X