Đó là bởi vì hai lý do:
- Kết nối bị đóng sau khi thực thi
PreparedStatementđầu tiên -
getconsử dụng mộtinstancebiến thay vìlocalBiến đổi. Do đó, cùng mộtconnbiến (biến đã bị đóng trước đó) được trả về khigetconsẽ được gọi vào lần sau.
Để khắc phục điều này, getcon và DBConnect cần được sửa đổi để khai báo một conn cục bộ và trả về nó (trên thực tế, bạn không cần DBConnect ở tất cả), ví dụ:
public Connection getcon(){
try{
Class.forName("com.mysql.jdbc.Driver");
String unicode="useSSL=false&autoReconnect=true&useUnicode=yes&characterEncoding=UTF-8";
return DriverManager.getConnection("jdbc:mysql://localhost:15501/duckdb?"+unicode, "root", "_PWD");
}catch(Exception ex){
System.out.println(ex.getMessage());
System.out.println("couldn't connect!");
throw new RuntimeException(ex);
}
}