【问题标题】:How do I update multiple columns in MySQL (Through Java)?如何更新 MySQL 中的多个列(通过 Java)?
【发布时间】:2015-07-07 21:51:42
【问题描述】:

所以这只是我的代码的一个 sn-p:

Sql = "update budgetreport" +
                " set sales="+salesText.getText()+
                " where quarter="+ qTracker+
                " set cogs="+cogsText.getText()+
                " where quarter="+ qTracker;
        try {
            myStmt.executeUpdate(Sql);
        } catch (Exception e1) {
            e1.printStackTrace();
        }

我的问题是,它说有一个 SQL 语法。我只用第一部分运行它:

Sql = "update budgetreport" +
                " set sales="+salesText.getText()+
                " where quarter="+ qTracker;
        try {
            myStmt.executeUpdate(Sql);
        } catch (Exception e1) {
            e1.printStackTrace();
        }

它运行良好。但是我不明白要做什么才能使我的第一个 sn-p 代码功能。感谢您花时间阅读/回答:)! ......

【问题讨论】:

  • 我对 MySql 了解不多,但似乎应该是两个不同的update 语句:一个用于sales,一个用于cogs
  • 你也想使用preparedStatements,因为以这种方式构建SQL最终会导致你走上一条黑暗的道路
  • 如果您的问题得到解决,请将其中一个答案标记为已接受。

标签: java mysql syntax


【解决方案1】:

每次更新只允许一个 SET 关键字

String sql = "update budgetreport" +
                " set sales=?, cogs=?" + 
                " where quarter=?";

PreparedStatement preparedStatement = conn.prepareStatement(sql);
preparedStatement.setString(1, salesText.getText());
...
preparedStatement.executeUpdate();            

【讨论】:

  • “PreparedStament”对象有什么帮助?只是好奇,谢谢!
  • 它可以防止SQL Injection 攻击,并负责引用字符类型
  • 好吧,我不知道。我一定会用的。
【解决方案2】:

试试这个:

Sql = "update budgetreport" +
      " set sales="+salesText.getText()+
      ", cogs="+cogsText.getText()+
      " where quarter="+ qTracker;

注意 SQL 注入攻击和错误,您不应该与未经检查的文本框内容连接。

【讨论】:

  • 哎呀,我现在真的觉得自己像个白痴。我所缺少的只是一个逗号!
  • 无论如何,谢谢你的回复,我真的很感激:)
【解决方案3】:

使用prepared statement。它安全得多。

String sql = "update budgetreport set sales=? where quarter=?";

PreparedStatement statement = con.prepareStatement(sql);

statement.setString(1, salesText.getText());
statement.setString(2, qTracker.toString());

statement.executeUpdate();

【讨论】:

    【解决方案4】:

    您应该从这里开始:http://www.w3schools.com/sql/sql_update.asp,因为您的 SQL 语法不正确。试试

    update budgetreport set sales=?,cogs=? where quarter=?
    

    以上应该是准备好的陈述。见:http://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html

    或者,您可以使用一些像这样的轻量级框架让您的生活更轻松一点:http://www.sql2o.org/ 它抽象了 PreparedStatements 并使您的代码更具可读性。

    【讨论】:

      【解决方案5】:

      更新查询的语法不正确,需要修改>

      更新表

      SET column1 = 表达式1,

      column2 = expression2,
      ....
      

      WHERE 条件;

      例如

      Sql =update budgetreport" + " set sales="+salesText.getText()+ ", cogs="+cogsText.getText()+ " where quarter="+ qTracker;"

      【讨论】:

        猜你喜欢
        • 2016-08-31
        • 1970-01-01
        • 2015-12-02
        • 2017-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-17
        相关资源
        最近更新 更多