如何停止Java结果:1错误?为什么会这样?

如何停止Java结果:1错误?为什么会这样?,java,swing,netbeans,Java,Swing,Netbeans,我正在Netbeans8.0上开发JavaSwing。当我运行此代码时,有重复的消息。最后我评论了一下。之后,系统不会停止工作。最后,我使用任务管理器停止整个系统。然后我得到了Java结果:1个错误。 这是我的源代码。 public void SaveDamage(JTextField txtItID, JTextField txtInID, JTextField txtQty, JTextField txtTotal) { try { ResultSet rs1 =

我正在Netbeans8.0上开发JavaSwing。当我运行此代码时,有重复的消息。最后我评论了一下。之后,系统不会停止工作。最后,我使用任务管理器停止整个系统。然后我得到了Java结果:1个错误。

这是我的源代码。

public void SaveDamage(JTextField txtItID, JTextField txtInID, JTextField txtQty, JTextField txtTotal) {
    try {
        ResultSet rs1 = JDBC.getData("select inid from damage where inid='" + txtInID.getText() + "'");
        if (rs1.next()) {
            JOptionPane.showMessageDialog(null, "This invoice is already finalized", "Error", JOptionPane.ERROR_MESSAGE);
        } else {
            try {
                boolean bool = JDBC.putData("insert into damage(itid, qty,total, inid) values('" + txtItID.getText() + "' , '" + txtQty.getText() + "' ,'"+txtTotal.getText()+"' , '" + txtInID.getText() + "')");
                if (bool) {
                    JOptionPane.showMessageDialog(null, "damaged saved");
                    try {
                        ResultSet rs = JDBC.getData("select avqty from item where itid='" + txtItID.getText() + "' ");
                        while (rs.first()) {
                            int newqty = rs.getInt("avqty") - Integer.valueOf(txtQty.getText());
                            try {
                                boolean bool1 = JDBC.putData("update item set avqty = '" + newqty + "' where itid = '" + txtItID.getText() + "'  ");
                                if (bool1) {
                                    // JOptionPane.showMessageDialog(null, txtItID.getText());
                                    //  JOptionPane.showMessageDialog(null, "item updated");
                                }
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}


这是我的JDBC类。

当我运行此代码时,有重复的消息。最后我评论了一下。之后,系统不会停止工作

while(rs.next())
中更改
while(rs.first())
,因为它正在创建一个无限循环

我建议你以适当的方式使用。因为您使用的是PreparedStatement,但查询看起来仍然像纯语句查询

请参阅有关的Java教程


阅读这篇文章,它给出了Java 7对自动资源管理问题的答案。

我相信您可以将那些
try
-
catch
语句简化为单个块,因为catch是相同的。
package Model;
//import static Model.JDBC.con;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.swing.JOptionPane;

public class JDBC {
    static String driver = "com.mysql.jdbc.Driver";
    static String url = "jdbc:mysql://localhost/cat";
    static Connection con;
    static boolean b ;

    public  static void setCon() {
        try {
            Class.forName(driver);
            con = DriverManager.getConnection(url, "root", "access456");
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, ex);
        }
    }

    public static Connection getCon() throws Exception {
        if (con == null) {
            setCon();
        }
        return con;
    }

    public static boolean putData(String sql) {
        try {
            PreparedStatement state = getCon().prepareStatement(sql);
            state.executeUpdate();
            b = true;
        } catch (Exception ex) {
            b= false;
            JOptionPane.showMessageDialog(null, ex);
        }
        return b;
    }

    public static ResultSet getData(String sql) throws Exception {
        Statement state = JDBC.getCon().createStatement();
        ResultSet rset = state.executeQuery(sql);
        return rset;
    }
}