【发布时间】:2026-02-20 18:45:01
【问题描述】:
我正在编写这个程序,我在其中使用preparedStatements 对 SQL 数据库进行更改。但是,UPDATE 查询不起作用。
代码如下:
package financials;
import java.net.URL;
import java.util.ResourceBundle;
import java.sql.*;
public void initialize(URL url, ResourceBundle rb) {
try{
Class.forName("com.mysql.cj.jdbc.Driver");
con=DriverManager.getConnection("jdbc:mysql://localhost/finances","root","P@ssword");
con.setAutoCommit(true);// TODO
}
catch(Exception ae)
{
System.out.println("Error in connection !");
}
@FXML
private void SaveOrAdd(ActionEvent event) { //This is button which on click executes the following code
String Action=save.getText();
if(Action.equals("Add Account"))
{
String SBNumber=LinkedSB.getText();
String newAccountType=AccountTypeF.getText();
String newFHolder=FHolderF.getText();
String newSHolder=SHolderF.getText();
String newTHolder=THolderF.getText();
String Bankcode=BankCodeF.getText();
if(newAccountType.equals("")||newFHolder.equals("")||newSHolder.equals("")||newTHolder.equals(""))
{
update.setText("Please fill in all the fields !");
}
else
{
try
{
PreparedStatement pst=con.prepareStatement("INSERT INTO banklines (Bank_Code,Linked_SB_Account,Sb_Account_Type,First_Holder,Second_Holder,Third_Holder) VALUES (?,?,?,?,?,?)");
pst.setString(1,Bankcode);
pst.setString(2,SBNumber);
pst.setString(3,newAccountType);
pst.setString(4,newFHolder);
pst.setString(5,newSHolder);
pst.setString(6,newTHolder);
int a=pst.executeUpdate();
System.out.println(a); //This returns a 1
}
catch(Exception ae)
{
update.setText("Update Failed !");
}
}}
else
{
String SBNumber=LinkedSB.getText();
String newAccountType=AccountTypeF.getText();
String newFHolder=FHolderF.getText();
String newSHolder=SHolderF.getText();
String newTHolder=THolderF.getText();
String Bankcode=BankCodeF.getText();
if(newAccountType.equals("")||newFHolder.equals("")||newSHolder.equals("")||newTHolder.equals(""))
{
update.setText("Please fill in all the fields !");
}
else //This is the block in concern
{
try
{
//Here is where the issue starts !
PreparedStatement pst2=con.prepareStatement("UPDATE banklines SET Sb_Account_Type=?,First_Holder=?,Second_Holder=?,Third_Holder=? WHERE Linked_SB_Account=? AND Bank_Code=?");
pst2.setString(1,newAccountType);
pst2.setString(2,newFHolder);
pst2.setString(3,newSHolder);
pst2.setString(4,newTHolder);
pst2.setString(5,SBNumber);
pst2.setString(6,Bankcode);
pst2.executeUpdate();
int a=pst2.executeUpdate();
System.out.println(a); //This returns a 0
update.setText("Successfully Updated !");
}
catch(Exception ae)
{
update.setText("Update Failed !");
}
}
}
}
问题是没有抛出错误,也就是说,输出总是Successfully Updated。但是,这些更改并未反映在数据库上。我尝试在 mySQL 工作台中单独执行查询 UPDATE banklines SET Sb_Account_Type=?,First_Holder=?,Second_Holder=?,Third_Holder=? WHERE Linked_SB_Account=? AND Bank_Code=? 作为查询,它没有返回错误。我还确保没有变量留空。尽管如此,更新仍无法正常工作。更让我困惑的是,if-else 块中的前一个查询,即INSERT 查询完美运行,并且结果也在数据库中更新。
我正在使用带有 jdk 1.8 和 mysql-connector-java-8.0.21 的 NetBeans 8.2。
附:据我所知,我一直坚持使用 java 命名约定,确保我尽可能遵循CamelCase 表示法。如果您觉得有任何问题,请编辑我的代码或提出更改建议。
【问题讨论】:
-
检查您的表格数据。最有可能的是,如果更新完成没有错误但没有发生任何更改,这是因为
WHERE子句没有匹配任何记录,或者更新后的新值与更新前的值相同。 -
您好@TimBiegeleisen,我现在检查了所有内容。我也尝试硬编码不同的值,然后尝试
executeUpdate(),但它没有用。感谢您的帮助! -
您应该减少字段(要检查的数据更少)并尝试打开交易并关闭它
-
executeUpdate返回什么值? -
@Vokail,我对这些技术术语还不是很熟悉,请多多包涵。我又创建了一个项目,只执行了
UPDATE块,它运行良好。我想这表明这没有什么问题。