sql >> データベース >  >> RDS >> Sqlserver

ClassNotFoundException-com.microsoft.jdbc.sqlserver.SQLServerDriver

    コードClass.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")

    ClassNotFoundException - com.microsoft.jdbc.sqlserver.SQLServerDriverをスローできません

    名前が違うので。コードで正しく設定されていない可能性はありますか?

    彼らのWebサイトからsqljdbc41.jarをダウンロードしたところ、クラスの正しい名前がcom.microsoft.sqlserver.jdbc.SQLServerDriverであることがわかりました。 。

    $ jar tf sqljdbc41.jar | grep SQLServerDriver.class
    com/microsoft/sqlserver/jdbc/SQLServerDriver.class
    

    MicrosoftのWebドキュメントで両方の名前を見つけたので、ある時点でこのクラスの名前を変更した(パッケージを変更した)か、一部のドキュメントにエラーがあります。

    その.jarをTomcatのlibディレクトリ(例:apache-tomcat-7.0.67\lib)にドロップするだけです。 )、Tomcatを再起動します。

    正しいクラス名があり、libディレクトリに正しいjarがあり、それでもそのエラーが表示される場合は、Eclipseのセットアップに何らかのタイプミスがあるのではないかと思います。そして、Eclipseからデプロイすると、どういうわけかそれをロードしようとします。壊れたクラス名。 (私はEclipseを使用しておらず、そこからのデプロイについても知りません。)

    非常に単純なアプリケーションを作成してみてください(そして、MSドライバークラスについてEclipseに伝えないでください):

    @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>");
            }
        }
    }
    

    そしてそれを実行します。次のような出力が表示された場合:

    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!
    

    これは、ドライバーが正しくロードされたことを意味します。接続に失敗しましたb/cテストするSQLServerインスタンスを現在実行していません。



    1. 更新時のSQLサーバーは現在のタイムスタンプを設定します

    2. Python 3.7 psycopg2-Xcodeエラーエラー:コマンド'gcc'が終了ステータス1で失敗しました

    3. Dockerを使用して、PANICをトリガーしたもの:有効なチェックポイントレコードを見つけることができませんでした

    4. SQL ServerでRAND()を決定論的にする方法