2016-09-21 10 views
1

SAPからのデータを取得しており、その応答に従ってMYSQL DBテーブルのフラグを更新しています。しかし、私の質問は毎回私にエラーを与えました。 JAVAとSAP間の接続は問題ありません。私はSAPにデータを送ることができます。それは働いている。SAPからデータを取得する際のMySQLサーババージョンのSQL構文エラー

  • 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) 
+0

あなたが受け取ったエラーメッセージや私たちと共有しようとしていることを知りたいと思っていますか? – Shadow

+1

テーブル名が一重引用符で囲まれています。引用符を削除します。 –

+0

これを使用してください: '' + table.getName()+ "where FLAG = 'X')からのSELECT REFNO"; ' –

答えて

0

あなたのSQL文で引用符を削除する文字列値 'ZSLPOSMSTBL'の代わりに、あなたのテーブル名ZSLPOSMSTBL

から選択しようとしている、それが動作するはずです。

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

**" com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorExceptionというエラーが発生しました:テーブル 'po_sms.ZSLPOSMSTBL'が存在しません "** –

+0

したがって、 'table.getName()'は存在しないテーブル名を返します – Ivaro18

関連する問題