gpt4 book ai didi

java - JSP 页面和 mysql 数据库连接在未知时间后断开(大约 2 天)

转载 作者:行者123 更新时间:2023-11-29 06:05:47 24 4
gpt4 key购买 nike

我正在研究 JSP 和 MySQL。将我的项目上传到在线服务器(webfaction)后,它工作正常。然而,一两天后,页面失去了与数据库的连接,所以当我尝试登录时,它没有连接到数据库,尽管 JSP 页面和 Tomcat 运行良好。

但是,当我重新启动 Tomcat 时,连接可以正常工作一两天,然后问题再次发生。

这里是连接类:

package Connect_DB;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DbConnect {

public final static int delayPeriod = 500;
public final static String driverClassName = "com.mysql.jdbc.Driver";
public final static String mysqlUrl = "jdbc:mysql://localhost:3306/";
private static final String dbName = "mydatabase?characterEncoding=UTF-8";
private static final String dbUser = "root";
private static final String dbPassword = "";

private static Connection con = null;

public static Connection getConnection(String db, String user, String password) {
String dbUrl = mysqlUrl + db;
con = null;
try {
Class.forName(driverClassName);
con = DriverManager.getConnection(dbUrl, user, password);

} catch (Exception e) {
e.getMessage();
}


return con;
}

public static Connection getConnection() throws SQLException {
if(con == null){
return getConnection(dbName, dbUser, dbPassword);
}else{
return con;
}
}
}

下面是所有函数与数据库通信的(Model)类:

package Connect_DB.allghamees;

import java.sql.*;
import javax.naming.*;
import javax.sql.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class SearchDb {

public Connection con;

public SearchDb(Connection con) {
this.con = con;
}

public boolean checkMobileAndPassword(String mobile, String pass) throws SQLException {
boolean ok = false;
ResultSet rs = null;
PreparedStatement queryEmaiPass= null;

try {

String sqlQuery = "SELECT mobile, password FROM users WHERE mobile = ? and password = ?";
queryEmaiPass = con.prepareStatement(sqlQuery);
queryEmaiPass.setString(1, mobile);
queryEmaiPass.setString(2, pass);
rs = queryEmaiPass.executeQuery();
while (rs.next()) {
ok = true;
}
rs.close();
queryEmaiPass.close();

} catch (SQLException e) {
System.out.println(e.getMessage());

}

return ok;
}

下面的 JSP 页面示例是在需要连接时调用上面的类:

<%@page import="org.joda.time.DateTime"%>
<%@page import="java.util.ArrayList"%>
<%@page import="DB_Connect.allghamees.Activities"%>
<%@page import="DB_Connect.allghamees.Users"%>
<%@page import="DB_Connect.DbConnect"%>
<%@page import="DB_Connect.allghamees.SearchDb"%>
<%@page import="DB_Connect.allghamees.Validator1"%>
<%@page pageEncoding="UTF-8"%>
<jsp:include page="headPage.jsp"></jsp:include>
<title>Project 25</title>
</head>
<body>
<jsp:include page="header.jsp"></jsp:include>

<% request.setCharacterEncoding("UTF-8"); %>
<%

SearchDb db = new SearchDb(DbConnect.getConnection());
int typeId = 0;
String mobile = request.getParameter("mobile");
String pass = request.getParameter("pass");

boolean checkMobilePassword = false;
checkMobilePassword = db.checkMobileAndPassword(mobile, pass);

try {

if (!checkMobilePassword) {
session = request.getSession(true);
session.setAttribute("userLogin", 2);
response.sendRedirect("index.jsp");
}

}
catch (Exception ex) {
//out.close();
}

%>
</html>

在 Webfaction 服务器上上传的要求之一是 JAVA 类应该在 JDK 6 上兼容,我这样做了。

你能帮我看看为什么会这样吗?

谢谢。

最佳答案

我对连接保持这么长时间印象深刻。通常,您应该只在相当短的时间内保持连接打开,并在不使用时释放它。

话虽如此,还是有连接池——基本上与您在此处使用的技术相同:您获取一个连接并在它启动时使用它。现在,当您使用池时,建议在重新使用之前检查连接,如果它不再存在则重新打开。

回答您的问题,很可能是由于 JSP 方面长时间的沉默;如果您不使用连接,服务器将关闭它。如果您想了解更多信息,请在 MySQL 端和 MySQL 驱动程序中启用详细日志记录,您将看到 (1) 究竟是什么关闭了连接,并且希望看到 (2) 为什么。

关于java - JSP 页面和 mysql 数据库连接在未知时间后断开(大约 2 天),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41782792/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com