首页 > 解决方案 > 如何使用 JDBC 中的文本字段值更新数据库?

问题描述

我正在尝试使用 JDBC 和 Textfields 更新 JavaFX 中的数据库,这是第一个文本字段,但我不断收到 SQL 语法错误。

这是一个简单的更新语法,但我必须使用 textfield.getText() 来填充数据。

我试过这个作为我将执行的查询:

UPDATE intervention 
set "+update_textfield2.getText()+" = "+update_textfield3.getText()+"  
WHERE ( Numdemande ="+update_textfield.getText()+"

解释上面的代码:将用户输入的数据库字段(update_textfield2)设置为用户输入的值(update_textfield3),其中“Numdemande”数字为 x(update_textfield)

标签: mysqlsqljavafxjdbc

解决方案


虽然您的代码不安全,如评论中所述,但我将假设您的课程尚未涵盖 SQL 注入攻击。

至于你的 SQL 语句本身,有几个问题。

  • 首先,您使用的是双引号"而不是单引号'。目前尚不清楚您使用的是哪种 SQL 方言,但大多数(如果不是全部)在通过这样的字符串时需要单引号。
  • 其次,您将对textField.getText() 方法的调用用引号括起来,这意味着您要告诉 SQL 从字面上使用该文本。
  • 您没有在子句)末尾添加右括号 ( ) 。WHERE但是,在这种情况下,括号不是必需的。

本质上,您正在尝试将以下语句传递给 SQL:

UPDATE intervention
set +update_textfield2.getText()+ = '+update_textfield3.getText()+'
WHERE ( Numdemande = '+update_textfield.getText()+'

除非您在表中调用+update_textfield2.getText()+了一个字段,否则此语句将失败。

以下String将产生正确的陈述:

String statement = "UPDATE intervention " +
                   "SET " + update_textfield2.getText() + " = " + update_textfield3.getText() +
                   "WHERE Numdemande = " + update_textfield.getText() + ";";

旁注:请学习Java 命名约定并遵守它们。在您的代码中,您在命名时使用了Snake CaseTextField,但应该改用Camel Case。您的合适名称TextField可能是这样的:updateTextField1


推荐阅读