MySQL 데이터베이스에 대한 JDBC 연결은 10 초 동안 활동이 없으면 만료됩니다. 다시 연결 한 후에는 어떤 쿼리도 할 수 없으며, 연결이 아직 닫혀있는 것처럼 다시 연결할 것인지 계속 묻습니다.
내가 가진 :
1. 글로벌 진술서 일이라고
2. 세계의 ResultSet라는 RS,
3 CONN라는 글로벌 연결,
연결 설정은하는 방법 setConnection 4.
5. 방법 checkConnection 수표가 연결이 살아 있다면 것을 그렇지 않은 경우 setConnection 메소드를 호출하여 새 것을 설정합니다
. 6. checkConnection을 호출하는 버튼이고 반환 된 부울이 true이면 쿼리를 실행합니다.
private Connection conn = null;
private Statement st=null;
private ResultSet rs=null;
public void setConnection(){
host="localhost";
database="test";
username="testtest";
password="testtest";
String url = "jdbc:mysql://" + host + "/" +database+ "";
try {
Class.forName ("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection (url, username, password);
System.out.println("Succesfuly connected to the database!");
} catch(Exception e){
System.out.println("Failed to connect to the database.");
e.printStackTrace();
}
}
private boolean checkConnection(){
try {
ResultSet cc = st.executeQuery("SELECT 1");
return true;
} catch (SQLException e) {
int n = JOptionPane.showConfirmDialog(
frame,
"The connection was closed, reconnect?",
"Database security measure",
JOptionPane.YES_NO_OPTION);
if(n == JOptionPane.YES_OPTION){
try {
conn.close();
} catch (SQLException e1) {
e1.printStackTrace();
}
setConnection();
} else if ( n == JOptionPane.NO_OPTION){
frame.setVisible(false);
new LoginWindowB();
}
return false;
}
}
btn1.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
if(checkConnection()){
try {
rs = st.executeQuery("SELECT * FROM " + selectedTable);
loadData(rs);
} catch (SQLException e) {
e.printStackTrace();
}
} else {
}
}
});
이 재 연결 문제를 어떻게 처리 할 수 있으며 새 연결을 설정 한 후 쿼리가 작동하지 않는 이유는 무엇입니까?
st
귀하의 예제에서 어디에서 초기화했는지 는 알 수 없지만 범인 냄새가납니다. 새 연결을 만들 때 새 문도 만들어야합니다.
모든이 PreparedStatement
클라이언트에 연결되고 연결과 함께 닫힙니다.
연결 풀 관리자 라이브러리 를 사용하는 것이 더 쉬울 수 있습니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다