我创建了一个Java秋千应用程序,其中用户基本登录到主窗口并选择一个JMENU项目,该项目将用户引导到新窗口,您可以在其中输入数据到数据库。
在更新数据库的第三个窗口中,我使用了一个Jcombobox,其中其中的项目是从数据库加载的。
当我调试它时,它运行正常。但是,当我尝试将应用程序运行到底部至底部时,会显示"更新窗口",但没有加载Jcombobox项目。它给出了一个错误,说连接太多。
据我所知,我正确地关闭了所有连接。
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
String un=jTextField1.getText();
String pwd=jPasswordField1.getText();
if(un.isEmpty()){
JOptionPane.showMessageDialog(this,"User Name is empty");
}
else if(pwd.isEmpty()){
JOptionPane.showMessageDialog(this,"Password is empty");
}
else{
try {
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
Calendar cal = Calendar.getInstance();
ResultSet rs=new DBconnect().getdata("SELECT * FROM user");
rs.next();
if ((rs.getString("Name").equals(un))&&(rs.getString("pw").equals(pwd))){
new DBconnect().putdata("INSERT INTO login (Date,User) VALUES('"+dateFormat.format(cal.getTime())+"','"+un+"')");
new MainWindow().setVisible(true);
this.dispose();
}
else{
JOptionPane.showMessageDialog(this, "Invalid user name or password");
jTextField1.setText("");
jPasswordField1.setText("");
}
rs.close();
} catch (Exception ex) {
Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
上面是我的登录表单代码。
public MainWindow() {
setExtendedState(JFrame.MAXIMIZED_BOTH);
new Thread(){
public void run(){
while(true){
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Calendar cal = Calendar.getInstance();
DateFormat dateFormat2 = new SimpleDateFormat("yyyy/MM/dd");
Calendar cal2 = Calendar.getInstance();
jLabel1.setText(dateFormat.format(cal.getTime()));
try {
ResultSet rs=new DBconnect().getdata("SELECT COUNT(Pno) FROM medicalhistory WHERE Date ='"+dateFormat2.format(cal2.getTime())+"'");
rs.next();
jLabel4.setText(rs.getString("COUNT(Pno)").toString());
ResultSet rs2=new DBconnect().getdata("SELECT SUM(Amount) FROM income WHERE Date ='"+dateFormat2.format(cal2.getTime())+"'");
rs2.next();
jLabel5.setText(rs2.getString("SUM(Amount)").toString());
rs2.close();
rs.close();
} catch (Exception ex) {
Logger.getLogger(MainWindow.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}.start();
initComponents();
}
上面是我使用的主要连接的主要Windows代码。这些工作正常。
public addnewpatient() {
setExtendedState(JFrame.MAXIMIZED_BOTH);
initComponents();
try {
try (ResultSet rs3 = new DBconnect().getdata("SELECT Name FROM drugstock WHERE stockAmount >0")) {
Vector v= new Vector();
while(rs3.next()){
String ids = rs3.getString("Name");
v.add(ids);
jComboBox1.addItem(ids);
}
jComboBox1.addItem("Null");
rs3.close();
}
}
catch (Exception ex) {
Logger.getLogger(addnewpatient.class.getName()).log(Level.SEVERE, null, ex);
}
}
上面的代码给出了太多的连接错误。
putdata和getdata是在连接类中创建的两种方法。
:)提前:)
我可以看到您正在以下行中创建连接:
ResultSet rs3 = new DBconnect().*;
然后您只是关闭结果集-rs3.close();
谁照顾关闭您的数据库连接?
现在如何修复:
无需内部尝试块中的代码中的内部尝试块 - 因此删除它。
获得连接:
DBconnect dbconnect = new DBconnect();
ResultSet rs3 = dbconnect..getdata("...");;
退出尝试块 - 关闭结果集,连接。
rs3.close();
dbconnect.close();
替换您的dbconnect.java如下:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
public class DBconnect {
static String url = "jdbc:mysql://localhost:3306/ppmgt";
Connection conn;
Statement st;
public DBconnect() {
try {
Class.forName("com.mysql.jdbc.Driver");
this.conn = DriverManager.getConnection(url, "root", "");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void putdata(String sql) throws Exception {
st = this.conn.createStatement();
st.executeUpdate(sql);
}
public ResultSet getdata(String sql) throws Exception {
Statement st = this.conn.createStatement();
return st.executeQuery(sql);
}
public void close() {
try {
this.conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static long compareTo(Date date1, Date date2) {
return date1.getTime() - date2.getTime();
}
}
除关闭连接外,使用DBConnect类中没有其他更改:
dbconnect.close();
public class DBconnect {
static String url = "jdbc:mysql://localhost:3306/ppmgt";
public static Connection con() throws Exception {
Class.forName("com.mysql.jdbc.Driver");
Connection c = DriverManager.getConnection(url, "root", "");
return c;
}
public void putdata(String sql) throws Exception {
Connection c = DBconnect.con();
Statement st = c.createStatement();
st.executeUpdate(sql);
}
public ResultSet getdata(String sql) throws Exception {
Connection c = DBconnect.con();
Statement st = c.createStatement();
ResultSet r = st.executeQuery(sql);
return r;
}
public static long compareTo(Date date1,Date date2) {
return date1.getTime() - date2.getTime();
}
}
这是我的DBConnect类