KodeClass.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")
tidak dapat membuangClassNotFoundException - com.microsoft.jdbc.sqlserver.SQLServerDriver
karena namanya berbeda. Mungkinkah Anda salah mengaturnya di kode Anda?
Saya mengunduh sqljdbc41.jar dari situs web mereka dan melihat bahwa nama kelas yang benar adalah com.microsoft.sqlserver.jdbc.SQLServerDriver
.
$ jar tf sqljdbc41.jar | grep SQLServerDriver.class
com/microsoft/sqlserver/jdbc/SQLServerDriver.class
Saya baru saja menemukan kedua nama di dokumentasi web Microsoft, jadi mereka mengganti nama kelas ini (mengubah paketnya) di beberapa titik, atau mereka memiliki kesalahan pada beberapa dokumen mereka.
Yang perlu Anda lakukan adalah meletakkan .jar itu di direktori lib Tomcat (mis.apache-tomcat-7.0.67\lib
), dan mulai ulang Tomcat.
Jika Anda memiliki nama kelas yang benar, dan toples yang tepat di direktori lib, dan masih melihat kesalahan itu, saya ingin tahu apakah Anda memiliki semacam kesalahan ketik dalam pengaturan Eclipse Anda, dan penggelaran dari Eclipse entah bagaimana memaksa upaya untuk memuatnya nama kelas rusak. (Saya tidak menggunakan Eclipse, dan saya tidak tahu tentang penerapan dari sana).
Coba buat aplikasi yang sangat sederhana (dan jangan beri tahu Eclipse tentang kelas driver MS):
@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>");
}
}
}
Dan menjalankannya. Jika Anda melihat output seperti:
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!
Ini berarti bahwa driver dimuat dengan benar. Sambungan gagal karena saya tidak memiliki instance SQLServer yang sedang berjalan untuk diuji.