2

ソリューション:

このコードを追加しました

Class.forName("com.mysql.jdbc.Driver");

前に

Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "root", "root");

私の質問に答えてくれてありがとう

====================

問題があります。サーブレットを使用して mysql db にデータを挿入しようとしましたが、MySQL にアクセスできませんでした

  • データベース名: テスト
  • テーブル名: テスト
  • プロジェクト ライブラリに jdbc コネクタを既に追加しました
  • JDK 1.7、NetBeans 7.3、MySQL 5.6、Tomcat 7.0、Connector/J 5.1.24 を使用しています

1- これは、sign_up.jsp ページの「フォーム アクション」です。

<form action="RegisterUser" method="post">
    <td><input type="submit" value="Submit"></td>
</form>

2- これは RegisterUser.java サーブレットです。

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mysql.jdbc.Driver;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;

@WebServlet(urlPatterns = {"/RegisterUser"})
public class RegisterUser extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException, SQLException {

    try{
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "root");
        Statement s = (Statement) con.createStatement();

        String name = "Hassan3";
        int phone = 123456;

        String insert = "INSERT INTO test VALUES ('\" + name + \"', \" + phone + \")";

        s.executeUpdate(insert);

        s.close();
        con.close();

    }catch(Exception e){
        throw new SecurityException("Class not found " + e.toString());
    }
}

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    try {
        processRequest(request, response);
    } catch (SQLException ex) {
        Logger.getLogger(RegisterUser.class.getName()).log(Level.SEVERE, null, ex);
    }
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    try {
        processRequest(request, response);
    } catch (SQLException ex) {
        Logger.getLogger(RegisterUser.class.getName()).log(Level.SEVERE, null, ex);
    }
}

@Override
public String getServletInfo() {
    return "Short description";
}// </editor-fold>

}

3- 例外結果:

HTTP Status 500 - Class not found java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/test

type Exception report

message Class not found java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/test

description The server encountered an internal error that prevented it from fulfilling this request.

exception
java.lang.SecurityException: Class not found java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/test
    RegisterUser.processRequest(RegisterUser.java:66)
    RegisterUser.doPost(RegisterUser.java:173)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

note The full stack trace of the root cause is available in the Apache Tomcat/7.0.39 logs.

4-しかし、同じコードを使用しても、Javaファイルで「サーブレットまたはWebアプリなし」で正しく動作しています:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class Test {
    public static void main(String[] args){
    try{
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "root");
        Statement s = (Statement) con.createStatement();

        String name = "Hassan4";
        int phone = 8985895;

        String insert = "INSERT INTO test VALUES ('" + name + "', " + phone + ")";

        s.executeUpdate(insert);

        s.close();
        con.close();
        System.out.println("done");
    }catch(Exception e){
        throw new SecurityException("Class not found " + e.toString());
    }
}

}

サーブレットの問題は何ですか?コードが Java アプリで動作する理由。しかし、それはウェブアプリでは動作しません。

4

3 に答える 3

2

あなたは得ていますClass not found java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/test

これは、Web アプリケーションから実行している場合、JRE がクラスパスでクラスを見つけられなかったことを意味します。

om.mysql.jdbc.Driverこのコードがスタンドアロンで機能する場合、cクラス (いわゆるJDBCドライバー)を含む JAR ファイルが必要です。この JAR は、Tomcat で表示される必要があります。したがって、プロジェクトのディレクトリにmysql-jdbc.jar物理的な場所に配置することをお勧めします。/WEB-INF/lib

または、ここで JDBC ドライバーなどのサードパーティ ライブラリを追加することもできます。

プロジェクト名を右クリック --> プロパティ

ここに画像の説明を入力

NetBeansIDEから

その後、Tomcat を再起動すると機能するはずです。

第二に、あなたは必要ありません

import com.mysql.jdbc.Driver;

あなたのサーブレットで。

于 2013-04-04T06:21:31.573 に答える
1

David の言うとおりです。追加したいのは、Java のインストール フォルダに jar ファイルを貼り付けてドライバをインストールすることもできます。

\Program Files\Java\jre7\lib\ext  

私は mysql があまり好きではなく、Windows Server 2008 で常に Mssql を使用しています。

 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
 conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName="+database+";user="+user+";password="+password);
于 2013-04-03T23:21:47.167 に答える
0

まず、それを永続化レイヤーに配置する必要があります。

1) JDBC ドライバーが配置されていることを確認します。/WEB-INF/lib ディレクトリなどのクラスパスにコピーします。リンク: MySQL JDBC ドライバーのダウンロード ページ

2) 接続文字列を確認してください: jdbc:mysql://<server>:<port>/<database>、ポートが欠落しているようです。試すjdbc:mysql://127.0.0.1:3306/test

于 2013-04-03T23:13:53.197 に答える