gpt4 book ai didi

mysql - Java FXML - NetBeans - 从表中删除 - MySQL

转载 作者:行者123 更新时间:2023-12-04 10:46:30 24 4
gpt4 key购买 nike

当我尝试从 TableView 中删除一行时出现以下错误:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '[value: 3]' at line 1

我想要的是:一次来自 TableView被选中,我想从数据库中删除它。

@FXML
void delete(ActionEvent event) {
try {

int pos;
pos = (int) tabelCustomers.getSelectionModel().getSelectedIndex();
Customers c;
c = tabelCustomers.getItems().get(pos);
SimpleIntegerProperty idc = c.idc;
String query;
query = "DELETE FROM customers WHERE customers.idc = " + idc;

try (Statement stm = cnx.createStatement()) {
stm.executeUpdate(query);
}
} catch (SQLException ex) {

Logger.getLogger(CustomersTableController.class.getName()).log(Level.SEVERE,
null, ex);
}
}

我错过了什么?我尝试了很多可能的解决方案,但没有任何效果。
基本上,当用户单击表中的行然后单击“删除”按钮时,应从表和数据库中删除该行。

提前致谢。

最佳答案

SimpleIntegerProperty idc = c.idc;
String query = "DELETE FROM customers WHERE customers.idc = " + idc;

Object (不是 String )用于字符串连接它会自动转换为 String调用 toString()在上面。 SimpleIntegerProperty 的字符串表示不仅仅是它的值,这意味着您的查询最终看起来像:

DELETE FROM customers WHERE customers.idc = IntegerProperty [bean: <some_instance>, name: idc, value: 42]

这显然不是有效的 SQL。您需要提取属性的值并将其用作查询的一部分。但是,首先创建 SQL 查询时不应使用字符串连接。您应该改为使用 PreparedStatement 带参数。例如:

String query = "DELETE FROM customers WHERE customers.idc = ?";
try (PreparedStatement ps = cnx.prepareStatement(query)) {
ps.setInt(1, idc.get());
ps.executeUpdate();
}

关于mysql - Java FXML - NetBeans - 从表中删除 - MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59681767/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com