De codeClass.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")
kan ClassNotFoundException - com.microsoft.jdbc.sqlserver.SQLServerDriver
omdat de namen anders zijn. Is het mogelijk dat je het verkeerd hebt ingesteld in je code?
Ik heb de sqljdbc41.jar van hun website gedownload en zie dat de juiste naam voor de klasse com.microsoft.sqlserver.jdbc.SQLServerDriver
is .
$ jar tf sqljdbc41.jar | grep SQLServerDriver.class
com/microsoft/sqlserver/jdbc/SQLServerDriver.class
Ik heb zojuist beide namen gevonden in de webdocumentatie van Microsoft, dus ofwel hebben ze deze klasse op een bepaald moment hernoemd (het pakket gewijzigd), ofwel hebben ze fouten in sommige van hun documenten.
Het enige dat u hoeft te doen is die .jar in de lib-directory van Tomcat te plaatsen (bijv.apache-tomcat-7.0.67\lib
), en herstart Tomcat.
Als je de juiste klassenaam en de juiste jar in de lib-directory hebt en nog steeds die fout ziet, vraag ik me af of je een typefout hebt in je eclipse-configuratie, en het implementeren van eclipse dwingt op de een of andere manier een poging om dat te laden naam gebroken klasse. (Ik gebruik Eclipse niet en ik weet niet hoe ik het vanaf daar kan implementeren).
Probeer een heel eenvoudige applicatie te maken (en vertel eclipse niet over de MS-stuurprogrammaklasse):
@WebServlet("/")
public class SimpleServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// Set response content type
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
out.println("<h1>" + "Welcome to the servlet!" + "</h1>");
try {
String server = "localhost";
String database = "testDB";
String password = "sapassword";
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String connectionUrl = "jdbc:sqlserver://"+server+":1433;databaseName="+database+";user=sa;password="+password+";";
Connection con = (Connection) DriverManager.getConnection(connectionUrl);
} catch (ClassNotFoundException e) {
out.println("<h2>" + e.getClass().getSimpleName() + "_" + e.getMessage() + "</h2>");
} catch (SQLException e){
out.println("<h2>" + e.getClass().getSimpleName() + "_" + e.getMessage() + "</h2>");
} finally {
out.println("<h1>" + "That's the end of the servlet!" + "</h1>");
}
}
}
En het runnen. Als je output ziet zoals:
Welcome to the servlet!
SQLServerException_The TCP/IP connection to the host localhost, port 1433 has failed. Error: "Connection refused: connect. Verify the connection properties. Make sure that an instance of SQL Server is running on the host and accepting TCP/IP connections at the port. Make sure that TCP connections to the port are not blocked by a firewall.".
That's the end of the servlet!
Het betekent dat het stuurprogramma correct is geladen. De verbinding is mislukt omdat ik momenteel geen SQLServer-instantie heb om tegen te testen.