mysql - 如何使用 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)
解决方案
虽然您的代码不安全,如评论中所述,但我将假设您的课程尚未涵盖 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 Case
TextField
,但应该改用Camel Case。您的合适名称TextField
可能是这样的:updateTextField1
推荐阅读
- java - 从列表中获取所有重复的对象
- jquery - jQuery 验证插件不适用于 WordPress 中的表单
- mysql - 如何隐藏主键,因为我在 URL 中需要它们
- python - PySide2/Qt for python:当我单击按钮时,GUI 冻结
- vue.js - Quill 中的雪景菜单不会在 vue.js 中使用 v-if 或 v-show 隐藏
- mysql - 如何将行中的重复值转换为列作为新表
- php - 在同一个表中添加收藏夹、喜欢/不喜欢和视图(观看过的帖子)是一个好习惯吗?
- node.js - 使用 mongoose 在 ejs 中渲染数据
- nginx - 使用请求的值编辑位置中使用的 NGINX 变量
- wordpress - wordpress 下划线在需要下划线的插件之后加载