java - 如何使用 java 代码中的条件更改 mysql 数据库中的值?

标签 java mysql

我正在尝试更改仅包含一个 int 甚至 0 或 1 的值 Dr_status。因此,如果 Dr_status 等于 1,则将其更改为 0,反之亦然。 这是代码:

String query = "Select Bluetooth_Address FROM dr";
String str = "40D32DBBE665";//in the database I have only two fields in `Bluetooth_Address` column 40D32DBBE665 and another value 
String check = "";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(query);
PreparedStatement preparedStmt= con.prepareStatement("update `dr` set `Dr_status` = '1'");
PreparedStatement preparedStmt1= con.prepareStatement("update `dr` set `Dr_status` = '0'");

  dbtime = rs.getString(1);               
   if (dbtime.equals(str)){
       check = "Select `Dr_status` From `dr` Where `Bluetooth_Address` = " + " " + str ;
       if(check.equals(0)){ 
            preparedStmt.executeUpdate();
                    }
                    if(check.equals(1)){
                        preparedStmt1.executeUpdate();
                    } 

不知道哪里出了问题!!!请帮忙。 提前致谢。

最佳答案

我对@Marcelo Hernández Rishmawy 的回答给予 +1。不要在 Java 代码中测试条件,而是在自动将 0 转换为 1 和 1 到 0 的 SQL 表达式中针对与您的蓝牙地址条件匹配的行进行测试和更新。

我还要给你一个提示,在 MySQL 中,1 和 0 是整数,但它们也用于 true 和 false。因此,您可以使用以下任一技巧来使语句更紧凑:

"update `dr` set `Dr_status` = ! `Dr_status` where `Bluetooth_Address = " + str

这个技巧也很管用:

"update `dr` set `Dr_status` = 1 - `Dr_status` where `Bluetooth_Address = " + str

这是一种很好的简化方法,但 FWIW 它特定于 MySQL,而不是标准 SQL。其他数据库品牌使用正确的 boolean 值,而不是 1 和 0。


关于您的评论:该错误与上述解决方案无关,这是因为您正在插入一串十六进制数字。您需要引用字符串,或者更好地使用查询参数。

您应该了解如何在任何情况下使用查询参数,因为它们有助于编写安全代码来防御 SQL 注入(inject)问题,而且通常比尝试将变量插入 SQL 查询字符串更容易、更可靠。

参见 Using Prepared Statements在 Java 教程中。

关于java - 如何使用 java 代码中的条件更改 mysql 数据库中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6427349/

相关文章:

java - 制作不可修改的对象

java - 从java代码而不是布局文件中扩展UI

java - 井字棋建议走法

java - Hibernate 标准多选查询与连接

c# - 在文件夹中搜索csv文件并插入mysql数据库

php - 如何创建带限制的Mysql Select语句

sql - 数据库查询,给出意想不到的结果

java - ImageView 折叠并且不显示创建的缩略图

mysql - 在 Symfony2 中选择一组寄存器的最新插入行?

php - 从原始 mysql 文件创建 sql 文件