当前位置: 首页 > 知识库问答 >
问题:

带有PreparedStatement executeUpdate的JDBC,MySQL-DML错误

鲁望
2023-03-14
int ownerUpdateCount = 0;
    PreparedStatement statement = null;
    Connection connection = null;
    try{
        while(featuresIT.hasNext()){
            String feature = (String) featuresIT.next();

            String updateOwnerQuery = "UPDATE `regression_reports` "
                    + "JOIN `feature_testbed_owner_mapping_628` ON (`regression_reports`.Feature='"
                    + feature
                    + "' AND `regression_reports`.Feature = `feature_testbed_owner_mapping_628`.feature_as_on_webpage) "
                    + "SET `regression_reports`.Owner = `feature_testbed_owner_mapping_628`.owner";
            //logger.debug("\n updateOwnerQuery : " + updateOwnerQuery);
            connection = dataSource.getConnection();
            connection.setAutoCommit(true);
            statement = connection.prepareStatement(updateOwnerQuery);
            //ownerUpdateCount += 
            ownerUpdateCount = statement.executeUpdate();
            System.out.println(feature + " ownerUpdateCount : " + ownerUpdateCount);
        }
        logger.debug("\n ownerUpdateCount : " + ownerUpdateCount);
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
           try { if(null!=statement)statement.close();} catch (SQLException e) 
           {e.printStackTrace();}
           try { if(null!=connection)connection.close();} catch (SQLException e) 
           {e.printStackTrace();}
    }

SQLException:不能使用executeQuery()发出数据操作语句。在com.mysql.jdbc.sqlerror.createsQlException(sqlerror.java:1078)在com.mysql.jdbc.sqlerror.createsQlException(sqlerror.java:989)在com.mysql.jdbc.sqlerror.createsQlException(sqlerror.java:975)在com.mysql.jdbc.sqlerror.createsQlException(sqlerror.java:920)在.tomcat.dbcp.dbcp.delegatingStatement.executeQuery(delegatingStatement.java:208)在org.apache.tomcat.dbcp.dbcp.delegatingStatement.executeQuery(delegatingStatement.java:208)在com.n7k.regarsion.regarsionDao.updateRegreportSDB(regarsionDao.java:71)在com.n7k.regarsion.regarsionServlet.doPost(

此错误仅在循环的第一次迭代中发生。任何调试其原因的建议。

String updateFeaturesQuery = "INSERT INTO `regression_reports` "
                    + "(Feature, `Report`, `P`, `F`, `Remarks`) VALUES ('"
                    + feature + "','" + report + "'," + pass + "," + fail
                    + ") " + "ON DUPLICATE KEY UPDATE `Report` = '"
                    + report + "', `P` = " + pass + ", `F`= " + fail
                    + ", `Remarks` = " + remarks + ";";

       connection = dataSource.getConnection();
       statement = connection.prepareStatement(updateFeaturesQuery);

       Line#73 
       featureUpdateCount = statement.executeUpdate(updateFeaturesQuery);

错误:

上面的执行给出了这个错误。手动执行相同的查询不会给我带来任何错误。

共有1个答案

杭泉
2023-03-14

此处完全缺少备注列,

// No `Remarks` even though you included it in the list. `F`, `Remarks`)
 "," + fail /* + Remarks! */ + ") " + "ON DUPLICATE KEY UPDATE `Report` = '"

您的列备注在这里没有转义,

+ ", `Remarks` = '" + remarks + "';";

但是您应该使用绑定参数或字符串stringescapeutils#escapesql(String),因为您的代码容易受到sql注入的攻击。

 类似资料:
  • 问题内容: 我一直在这里,这里和这里阅读有关使用优势的信息 如果我理解正确,那么JDBC将把尽可能多的查询打包到单个网络包中,从而降低了网络开销。我对吗? 然后引起我注意的是,在MySQL服务器中为定义的值可能会导致查询问题(查询未在服务器上执行)。 所以我的第二个问题是,JDBC是否知道分配给它的值,并因此使数据包小于为其定义的值,或者这是开发人员必须考虑的事情? 如果我理解不对,请也通知我。

  • 问题内容: 如何在Windows中使用JDBC代码连接到基于Microsoft Access的数据库? Type-1和Type-4类型的驱动程序应编写什么语法? 对于我们使用的每种类型的驱动程序,以上语法是否有所不同?我们如何定义和识别我们使用的驱动程序类型? 如果可能,然后还为oracle指定要加载的驱动程序语法。 问题答案: 您可以通过以下方式使用JDBC-ODBC桥: 然后,您可以使用以下形

  • 这以前被问过一次,但解决方案并没有解决问题。我正在创建一个JUnit测试: 上述测试调用的查询是: 错误:

  • 本文向大家介绍MySQL DML语句整理汇总,包括了MySQL DML语句整理汇总的使用技巧和注意事项,需要的朋友参考一下 DML操作是指对数据库中表记录的操作,主要包括表记录的插入(insert)、更新(update)、删除(delete)和查询(select),是开发人员日常使用最频繁的操作。 1.插入(insert) 格式1. 格式2. 不用指定字段名称,但是value值需与表字段严格对应.

  • DML

    在本章中,我们将讨论如何在Salesforce中执行不同的数据库修改功能。 有两个说我们可以执行功能。 DML声明 DML是为执行插入,更新,删除,复制,恢复记录,合并记录或转换引导操作而执行的操作。 DML是Apex中最重要的部分之一,因为几乎每个业务案例都涉及对数据库的更改和修改。 数据库方法 您可以使用DML语句执行的所有操作也可以使用数据库方法执行。 数据库方法是可用于执行DML操作的系统

  • 问题内容: 我在000webhost上创建了一个mySQL数据库,我想将其连接到我的Java程序中,但是某种程度上驱动程序没有接收套接字。这是我的代码: 其中a4931569_users是数据库,Users是表。请帮我。 问题答案: 000webhost中的MySQL不允许您从外部应用程序进行连接,而只能从其域中托管的页面内进行连接。 请检查:如何从计算机连接到MySQL?