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驅動程序」,但是當我們刷新時,我們查詢的信息顯示正確。
因此,我們只在第一次加載時得到一個錯誤消息,之後,沒有錯誤發生,一切正常。
任何人都可以幫助我們嗎?
非常感謝!這解決了我們的問題。我們之前已經嘗試過,但一定是犯了一個錯誤。我們認爲在java jdk6之後不需要它了:/ – DerpyNerd 2013-04-06 15:06:35
@RobbieVercammen:如果驅動程序註冊爲「服務提供者」,則不需要它,但爲此需要在清單文件中提供該信息。可能MySQL驅動程序不這樣做。 – 2013-04-06 15:23:52
代碼中關於'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