0

JSPでデータベース接続を確認するにはどうすればよいですか。データベース接続に問題が発生した場合にエラーメッセージを出力したい。

私は次のコードを使用しています:

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String connectionUrl = "jdbc:sqlserver://localhost;databaseName=dbname;user=username;password=password";
Connection conn = DriverManager.getConnection(connectionUrl); 
Statement stmt = conn.createStatement();

接続に成功したら、データベースにデータを挿入したいと思います。また、データが正しく挿入されているかどうかも確認したいと思います。誰かがこれについて私を助けることができますか...

4

5 に答える 5

3

JSPはこれには間違った場所です。JDBCジョブを実行するスタンドアロンクラスを作成し、SQLが失敗するたびに、各メソッドが例外をスローするようにする必要があります。

Userこれは、テーブル上のすべてのJDBC処理を実行する「DAO」クラスの例です。

public class UserDAO {

    public User find(String username, String password) throws SQLException {
        // ...
    }

    public void save(User user) throws SQLException {
        // ...
    }

    public void delete(User user) throws SQLException {
        // ...
    }

}

次に、このクラスを使用して例外を処理するサーブレットを作成します。LoginServletこれが:の例です。

@WebServlet(urlPatterns={"/login"})
public class LoginServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        UserDAO userDAO = new UserDAO();

        try {
            User user = userDAO.find(username, password);

            if (user != null) {
                request.getSession().setAttribute("user", user); // Login.
                response.sendRedirect("userhome");
            } else {
                request.setAttribute("message", "Unknown login, try again"); // Set error message.
                request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request, response); // Redisplay form with error.
            }
        } catch (SQLException e) {
            throw new ServletException("Fatal database failure", e); // <-- Here
        }
    }

}

JSPをこのサーブレットに送信させます

<form action="login" method="post">
    <input type="text" name="username" />
    <input type="password" name="password" />
    <input type="submit" />
    ${message}
</form>

ご覧のとおり、DAOクラスがをスローするSQLExceptionと、サーブレットはそれを。として再スローしますServletException。デフォルトでは、コンテナデフォルトのHTTP500エラーページに表示されます。必要に応じて、次のように独自のルックアンドフィールでJSPを使用してこれをカスタマイズできます。

<error-page>
    <error-code>500</error-code>
    <location>/error.jsp</location>
</error-page>

参照:

于 2011-06-01T13:01:36.527 に答える
1

あなたのコードは完璧ですデータベース接続を決定してください:

    try {
            conn = java.sql.DriverManager.getConnection(connectionUrl);
            System.out.println("Connection established");
            //--- Do operation on database.
    }
    catch (Exception e) {
            System.out.println(e);
            System.out.println("Connection not established");
    }

サーブレットでデータベース接続を行うには、jspでこの操作を回避することをお勧めします。

于 2011-06-01T12:07:51.777 に答える
1

jspのスクリプトレットは避け、jsp内のjstlsqlライブラリを使用してください。サンプルコードはここにあります

<c:catch var ="catchException">
The exception will be thrown inside the catch:<br>
<sql:setDataSource var="dataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql//localhost/datasouce" user="admin" password="passowrd"/>
<sql:query var="ids" dataSource="${dataSource}">SELECT * FROM table</sql:query>
</c:catch>
<c:if test = "${catchException!=null}">The exception is : ${catchException}<br><br>There is an exception: ${catchException.message}<br></c:if>
于 2011-06-01T12:14:06.057 に答える
0

JSPでデータベース接続を確認するにはどうすればよいですか。

より良い設計は、アプリのデプロイ時にそれをチェックし、applicationContextからの接続を共有することです。

接続プールを使用することもできます。

はい、JSPでJavaコードを記述しないでください

関連項目

于 2011-06-01T12:12:21.503 に答える
0

try catchおよびif-elseステートメントを使用して、データが正しく挿入されているかどうかを確認し、挿入トランザクション中にエラーが発生した場合はロールバックを使用します。

Connection conn = null;
Statement stmt = null;

try{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String connectionUrl = "jdbc:sqlserver://localhost;databaseName=dbname;user=username;password=password";
conn = DriverManager.getConnection(connectionUrl); 
conn.setAutoCommit(false);
stmt = conn.createStatement();
stmt.executeUpdate(sql);
stmt.executeUpdate(sql);
stmt.executeUpdate(sql);
stmt.executeUpdate(sql);

conn.commit();
}
catch(Exception e) {
if(!conn.isClosed()){
conn.rollback();
}
System.out.println(e);
}
finally{
if(!stmt.isClosed()){
stmt.close();
}
if(!conn.isClosed()){
conn.close();
}
}

または、JSTLを使用して簡単にJSFフレームワークチュートリアルをご覧ください

于 2013-06-05T20:04:37.730 に答える