我已经创建了一个java swing应用程序,其中基本上用户登录到达主窗口并选择一个jmenu项目,该项目将用户带到一个新窗口,您可以在该窗口中输入数据到数据库。
在更新数据库的第3个窗口中,我使用了一个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();
}
上面是主窗口'我用过连接的代码。这些工作正常。
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是我在连接类中为轻松创建的两种方法。
:) Thanx提前:))
答案 0 :(得分:2)
我可以看到你在下面的行创建了连接:
ResultSet rs3 = new DBconnect().*;
然后你只是关闭ResultSet - rs3.close();
谁负责关闭数据库连接以及如何处理?
现在如何解决:
您的代码中不需要内部try块 - 因此请将其删除。
获得连接:
DBconnect dbconnect = new DBconnect();
ResultSet rs3 = dbconnect..getdata("...");;
在退出try块之前 - 关闭ResultSet,Connection。
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();
答案 1 :(得分:0)
String myNewString = join(myString, "")
if (!myNewString.equals(""))
{
//Do something
}
}
这是我的DBconnect类