【问题标题】:DriverManager no suitable driver mysqlDriverManager 没有合适的驱动 mysql
【发布时间】:2026-01-05 07:30:01
【问题描述】:

我们在查找与 DriverManager 建立连接时收到错误消息的原因时遇到了一些问题。

这是我们的代码

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的驱动”,但是刷新后查询的信息显示正确。

所以,我们只在第一次加载时收到一条错误消息,之后就没有错误发生,一切正常。

谁能帮助我们?

【问题讨论】:

    标签: java mysql jsp jdbc localhost


    【解决方案1】:

    首先需要在连接前加载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。

    【讨论】:

    • 非常感谢!这解决了我们的问题。我们以前尝试过,但一定是犯了一个错误。我们认为在 java jdk6 之后不再需要它:/
    • @RobbieVercammen:如果驱动程序注册为“服务提供者”,则不需要它,但为此它需要在清单文件中提供该信息。可能 MySQL 驱动程序不这样做。
    • 代码中关于newInstance()的注释顺便说错了。它与 Java 实现完全无关,但与 JDBC 驱动程序实现更是如此。当前的 MySQL JDBC 驱动程序不是其中之一。另见*.com/questions/2092659/…
    • @a_horse_with_no_name 最近的 MySQL Connector/J 版本确实包含 META-INF/services/java.sql.Driver 中的信息。
    最近更新 更多