【问题标题】:Problem with a prepared statement准备好的语句有问题
【发布时间】:2011-03-26 12:29:36
【问题描述】:

我有这个代码:

 Date start = new Date(Integer.parseInt(jTextField4.getText()), Integer.parseInt(jTextField16.getText()), Integer.parseInt(jTextField17.getText()));  
        Date end = new Date(Integer.parseInt(jTextField5.getText()), Integer.parseInt(jTextField18.getText()), Integer.parseInt(jTextField19.getText()));
        statement = connection.createStatement();
        preparedStatement1 = connection.prepareStatement("insert into sportmangg(customer_code,"
             + "sportman_code, start, finish, salary,amount,box salary,private salary, food salary, "
             + "other salary, bime salary, number) "
             + "values (? ,?, ? , ?, ?, ?, ?, ?, ?, ?, ?, ?");
      preparedStatement1.setString(1,jTextField15.getText());
     preparedStatement1.setString(2, jTextField1.getText());
     preparedStatement1.setDate(3, start);
     preparedStatement1.setDate(4, end);
     preparedStatement1.setInt(5, Integer.parseInt(jTextField6.getText()) );
     preparedStatement1.setInt(6,Integer.parseInt(jTextField14.getText()) );
     preparedStatement1.setInt(7, Integer.parseInt(jTextField7.getText()));
     preparedStatement1.setInt(8, Integer.parseInt(jTextField8.getText()));
     preparedStatement1.setInt(9, Integer.parseInt(jTextField9.getText()));
     preparedStatement1.setInt(10, Integer.parseInt(jTextField11.getText()));
     preparedStatement1.setInt(11, Integer.parseInt(jTextField10.getText()));
     preparedStatement1.setInt(12, Integer.parseInt(jTextField20.getText()));
     preparedStatement1.executeUpdate();

但它有这个错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'salary,private salary, food salary, other salary, bime salary, number) values ('' at line 1

有什么问题?

【问题讨论】:

  • @diEcho,这是 java 不是 javascript
  • 您添加了赏金,但请您说明为什么您的两个答案不适用?
  • 我按了它错误。在取消之前我该怎么办?
  • 您无法取消赏金。如果您的问题得到解答,您应该接受最佳答案。

标签: java mysql prepared-statement


【解决方案1】:

您确实不应该在字段名称中包含空格。尝试用 ``

包围它

【讨论】:

  • 或者只是用下划线_替换空格并忘记`
【解决方案2】:

包含空格的列名非常是个坏主意。

如果你必须有它们,用反引号括起来:

`private salary`

【讨论】:

  • 好的,我已经编辑过了。我从来没有在 StackOverflow 的 markdown 语法中找到将文字反引号放入内联代码格式的方法,因此我必须创建一个缩进的新行,就像块代码一样。
【解决方案3】:

您在 SQL 查询的最后一行漏掉了),所以它应该是:

+ "  values (? ,?, ? , ?, ?, ?, ?, ?, ?, ?, ?, ?   )";

【讨论】:

    【解决方案4】:

    也许你可以试试这个:
    https://github.com/stuparmihailo/util4j/releases/tag/v1.0
    这是一个简单的项目,并且有很好的创建语句的方法:
    String query = "INSERT INTO table VALUES (?,?,?,?,?,?,?)"; PreparedStatement stmt = con.prepareStatement(query); StatementUtil.fill(stmt, 45, "text", 2, null, new Date(), false, 3.5);

    【讨论】:

      【解决方案5】:

      您应该用 private_salary 替换私人薪水,并继续使用可接受的列名称约定。

      【讨论】:

        【解决方案6】:

        列名或表名不应包含空格。通过下划线加入它们。并使它们大写......这些不是规则,而是使用数据库对象的公认方式。如果无法在数据库中更改名称,并且您遇到了一些薪水之类的问题,那么some salary 应该会有所帮助。

        【讨论】:

          【解决方案7】:

          麦迪; 我认为你要做的就是:

          1. 更改名称 以空间命名的列(私人工资, 餐饮工资,其他工资,bime 薪水)或者通过下划线替换空格 (由命名约定推荐)或由 周围带有重音字符的名称:

            `box 工资`, `私人工资`, `伙食工资`, `其他工资`, `bime 工资`

          2. 修正这一行添加最后的括号

            + "值(?,?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?");

            必须说:

            + "值 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);");

          3. 1234563像这样:
          String sqlString = "";
          sqlString += " insert into sportmangg";
          sqlString += " (customer_code, sportman_code, start, finish,";
          sqlString += " salary, amount, box_salary, private_salary,";
          sqlString += " food_salary, other_salary, bime_salary, number)";
          sqlString += " values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);";
          preparedStatement1 = connection.prepareStatement(sqlString);
          

          (或者如果你使用 StringBuffer 使用 append 方法)

          【讨论】:

            猜你喜欢
            • 2011-07-13
            • 2014-06-30
            • 1970-01-01
            • 2019-07-02
            • 1970-01-01
            • 1970-01-01
            • 2011-06-02
            • 1970-01-01
            相关资源
            最近更新 更多