如何停止Java结果:1错误?为什么会发生?
我正在使用NetBeans 8.0上的java swing。当我运行此代码时,我有重复的消息。最后我评论它。之后,系统不停止工作。最后我使用任务管理器并停止整个系统。然后我有Java结果:1错误。
这是我的源代码。
如何停止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类。
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;
}
}
我有重复的消息,当我运行这段代码。最后我评论它。之后,系统不停止工作。
变化while (rs.first())
在while (rs.next())
,因为它创建无限循环。
我建议您以正确的方式使用PreparedStatement。因为您正在使用PreparedStatement,但仍然查询看起来像普通的Statement查询。
见Java教程上Using Prepared Statements
读Better Resource Management with Java SE 7: Beyond Syntactic Sugar呈现了Java 7答案自动资源管理问题。
谢谢你.. :)它正在工作.. –
听起来不错。没关系。 – Braj
我相信你可以简化这些'try'-'catch'语句到一个块中,因为catch是相同的。 –