检查JSP中的数据库连接

时间:2011-06-01 12:04:20

标签: java jsp jdbc database-connectivity

如何检查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();

成功连接后,我想将数据插入数据库。我还想检查数据是否正确插入。任何人都可以帮助我...

5 个答案:

答案 0 :(得分:3)

JSP是错误的。您需要创建一个独立的类来执行JDBC作业,并且每当SQL内容失败时,每个方法都会抛出异常。

以下是“DAO”类的示例,该类执行User表中的所有JDBC内容:

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 {
        // ...
    }

}

然后,创建一个使用此类并处理异常的servlet。以下是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提交给这个servlet

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

您会看到,当DAO类抛出SQLException时,servlet会将其重新抛出为ServletException。默认情况下,它将以容器默认HTTP 500错误页面结束。如果需要,您可以使用您自己的look'n'feel中的JSP进行自定义,如下所示

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

另见:

答案 1 :(得分: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中执行此操作,以便在servlet中进行数据库连接。

答案 2 :(得分:1)

使用jsp中的jstl sql库,避免jsp中的scriptlet。示例代码在这里

<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>

答案 3 :(得分:0)

  

如何检查JSP中的数据库连接。

更好的设计是在应用部署时检查它并从applicationContext共享连接。

您也可以使用连接池。

是的,不要在JSP中编写java代码

另见

答案 4 :(得分: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 Framework Tutorials