2013-04-06 44 views
2

我們在找出爲什麼在使用DriverManager創建連接時收到錯誤消息時遇到了一些問題。DriverManager沒有合適的驅動程序mysql

這裏是我們的代碼

package Databank; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.Statement; 
import java.util.List; 

public class Connectie_Databank 
{ 
    //Eigenschappen databank 
    private String connectieString = ""; 
    private Connection connectie = null; 
    private PreparedStatement prepStatement = null; 
    private Statement statement = null; 
    private ResultSet inhoudQuery = null; 

    //Inloggegevens PhpMyAdmin 
    private String gebruikersnaam, wachtwoord; 

    //Constructor met standaardinstellingen 
    public Connectie_Databank() 
    { 
     this.connectieString = "jdbc:mysql://localhost/groep2_festivals"; 
     this.gebruikersnaam = "root"; 
     this.wachtwoord = ""; 
    } 

    //Constructor met nieuwe data 
    public Connectie_Databank(String connectionString, String gebruikersnaam, String wachtwoord) 
    { 
     this.connectieString = connectionString; 
     this.gebruikersnaam = gebruikersnaam; 
     this.wachtwoord = wachtwoord; 
    } 

    /** 
    * Deze methode zorgt ervoor dat er verbinding gemaakt wordt me de databank 
    */ 
    public void maakConnectie() 
    { 
     try 
     { 
      connectie = DriverManager.getConnection(connectieString, gebruikersnaam, wachtwoord); 
     } 
     catch(Exception e) 
     { 
      System.err.println("FOUTMELDING: " + e.getMessage()); 
     } 
    } 

    public void voerQueryUit(String query, List<String> parameters) 
    { 
     try 
     { 
      if(parameters.size() > 0) 
      { 
       //Reden preparedStatement: geen SQL-Injectie! 
       prepStatement = connectie.prepareStatement(query); 

       //Lijst met parameters uitlezen om de preparedStatement op te vullen 
       for(int i=1; i<=parameters.size(); i++) 
       { 
        prepStatement.setString(i, parameters.get(i-1)); 
       } 
       inhoudQuery = prepStatement.executeQuery(); 
      } 
      else 
      { 
       statement = connectie.createStatement(); 
       inhoudQuery = statement.executeQuery(query); 
      } 
     } 
     catch(Exception e) 
     {} 
    } 

    public ResultSet haalResultSetOp() 
    { 
     return inhoudQuery; 
    } 

    public void sluitConnectie() 
    { 
     //ConnectieString leegmaken en alle objecten die te maken hebben met de connectie sluiten 
     try 
     { 
      connectieString = ""; 
      if(connectie != null) 
      { 
       connectie.close(); 
      } 
      if(prepStatement != null) 
      { 
       prepStatement.close(); 
      } 
      if(inhoudQuery != null) 
      { 
       inhoudQuery.close(); 
      } 
     } 
     catch(Exception e) 
     {} 
    } 
} 

我們呼籲我們的連接類從一個JSP頁面中是這樣的:

<% 
     Connectie_Databank connectie; 
     ResultSet res; 
     connectie = new Connectie_Databank(); 

     connectie.maakConnectie(); 

     List<String> lijstParams = new ArrayList<String>(); 
     connectie.voerQueryUit ("SELECT * FROM festivals", lijstParams); 

     res = connectie.haalResultSetOp(); 
    %> 

這發生在我們的頁面的頭部。第一次加載頁面時,我們得到一個錯誤「沒有找到合適的jdbc mysql驅動程序」,但是當我們刷新時,我們查詢的信息顯示正確。

因此,我們只在第一次加載時得到一個錯誤消息,之後,沒有錯誤發生,一切正常。

任何人都可以幫助我們嗎?

回答

2

首先你需要加載的JDBC驅動程序連接

// Notice, do not import com.mysql.jdbc.* 
// or you will have problems! 

//Load Driver 
try { 
    // The newInstance() call is a work around for some 
    // broken Java implementations 
    Class.forName("com.mysql.jdbc.Driver").newInstance(); 
} catch (Exception ex) { 
    // handle the error 
} 

con=DriverManager.getConnection(connectieString); 
System.out.println ("Database connection established"); 

之前,請確保您有在類路徑中使用mysql-connector-java的5.x.x-bin.jar當你運行你的應用程序。

+0

非常感謝!這解決了我們的問題。我們之前已經嘗試過,但一定是犯了一個錯誤。我們認爲在java jdk6之後不需要它了:/ – DerpyNerd 2013-04-06 15:06:35

+3

@RobbieVercammen:如果驅動程序註冊爲「服務提供者」,則不需要它,但爲此需要在清單文件中提供該信息。可能MySQL驅動程序不這樣做。 – 2013-04-06 15:23:52

+0

代碼中關於'newInstance()'的註釋是錯誤的。它完全與Java實現無關,但與JDBC驅動程序實現完全無關。當前的MySQL JDBC驅動程序不是其中之一。另請參閱http://stackoverflow.com/questions/2092659/what-is-difference-between-class-forname-and-class-forname-newinstance/2093236#2093236 – BalusC 2013-04-06 16:22:36

相關問題