如何使用JDBC中的文本字段值更新数据库?

时间:2019-06-23 12:40:57

标签: mysql sql javafx 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)

1 个答案:

答案 0 :(得分:0)

尽管您的代码不安全,如注释中所述,但我将以您的类尚未涵盖SQL注入攻击为前提进行回答。

对于您的SQL语句本身,存在几个问题。

  • 首先,您使用双引号"而不是单引号'。尚不清楚您使用的是哪种SQL方言,但通过这样的String传递时,大多数(即使不是全部)都需要单引号。
  • 第二,您将呼叫包装到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 Naming Conventions并坚持使用。在您的代码中,您在命名TextField时使用了Snake Case,但是应该使用Camel CaseTextField的合适名称可能是这样的:updateTextField1