从 SAP 获取数据时 MySQL 服务器版本中的 SQL 语法错误

Posted

技术标签:

【中文标题】从 SAP 获取数据时 MySQL 服务器版本中的 SQL 语法错误【英文标题】:SQL syntax error in MySQL server version when getting data from SAP 【发布时间】:2016-09-21 11:10:45 【问题描述】:

我正在从 SAP 获取数据,并根据该响应更新 mysql DB 表中的标志。但是我的查询每次都给我一个错误。 JAVA 和 SAP 连接正常。我可以将数据发送到 SAP。这是工作。

tbl_po_data 是我的 MYSQL 表。 table.getName() 是获取我的 SAP 表名。 FLAG 是 SAP 表标志字段。

这是我的方法。

private void tableOparator(Table table) throws Exception 

        pooler = DBPool_POSMS.getInstance();
        dataSource = pooler.getDataSource();
        Connection con = dataSource.getConnection();
        con.setAutoCommit(false);

        qex = new DBTableQueryExcecutre(con);

        for (int i = 0; i < table.getNumRows(); i++) 
            table.setRow(i);

            String sbQuery2 = "update tbl_po_data set status = 'X' where reference_no " + " in (SELECT REFNO from '"
                    + table.getName() + "' where FLAG = 'X')";

            int rcount = qex.runQuery(sbQuery2);
                System.out.println("tbl_po_data Rows -->" + rcount + "Status Updated");
                con.commit();

        

        qex.closeConnections();

    

我的 LOGCAT

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 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 ''ZSLPOSMSTBL' where FLAG = 'X')' at line 1
    at sun.reflect.GeneratedConstructorAccessor1.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.Util.getInstance(Util.java:386)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1054)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4120)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4052)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2503)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2664)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2809)
    at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1811)
    at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1725)
    at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228)
    at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228)
    at DBTableQueryExcecutre.runQuery(DBTableQueryExcecutre.java:52)
    at CreatePO.tableOparator(CreatePO.java:203)
    at CreatePO.sendDataToSap(CreatePO.java:170)
    at CreatePO.run(CreatePO.java:53)
    at java.util.TimerThread.mainLoop(Unknown Source)
    at java.util.TimerThread.run(Unknown Source)

【问题讨论】:

您希望我们使用我们的读心技巧找出您收到的错误信息还是要与我们分享? 您的表名用单引号括起来。删除引号。 使用这个:(SELECT REFNO from " + table.getName() + " where FLAG = 'X')"; 现在我收到一个名为 "com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 表 'po_sms.ZSLPOSMSTBL' 不存在的错误" 【参考方案1】:

您正在尝试从字符串值中进行选择 'ZSLPOSMSTBL' 而不是你的表名ZSLPOSMSTBL

删除 SQL 语句中的引号,它应该可以工作。

"update tbl_po_data set status = 'X' where reference_no " + " in (SELECT REFNO from "
                + table.getName() + " where FLAG = 'X');"

【讨论】:

现在我收到一个名为 "com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 表 'po_sms.ZSLPOSMSTBL' 不存在的错误" 所以,您的table.getName() 返回一个不存在的表名

以上是关于从 SAP 获取数据时 MySQL 服务器版本中的 SQL 语法错误的主要内容,如果未能解决你的问题,请参考以下文章

从 Azure Databricks 查询 SAP 表

从 Nodejs 中的 mySQL 获取数据时如何从 Async/await 函数获取返回值

SAP HANA中的SLT简介

mysql 视图中的 WCF 数据服务超时问题

如何从 SAP BO Universe 数据源中获取表和列?

添加新数据时无法从mysql数据库中获取python中的新数据