2012-09-05 60 views
0

我與DBreport介體輸出語法錯誤問題,但我看不到任何錯誤的SQL語句WSO2 ESB序列數據庫更新

<sequence xmlns="http://ws.apache.org/ns/synapse" name="_dbcount"> 
    <dblookup> 
     <connection> 
     <pool> 
      <password>1234</password> 
      <user>root</user> 
      <url>jdbc:mysql://localhost:3306/new_db</url> 
      <driver>com.mysql.jdbc.Driver</driver> 
     </pool> 
     </connection> 
     <statement> 
     <sql> 
      <![CDATA[   select * from consume where username= ? and id_api+ ?]]></sql> 
      <parameter value="riccardo" type="VARCHAR" /> 
      <parameter value="1" type="INTEGER" /> 
      <result name="result_use" column="use" /> 
      <result name="result_user" column="username" /> 
     </statement> 
     </dblookup> 
     <dbreport> 
     <connection> 
      <pool> 
       <password>1234</password> 
       <user>root</user> 
       <url>jdbc:mysql://localhost:3306/new_db</url> 
       <driver>com.mysql.jdbc.Driver</driver> 
       <property name="autocommit" value="false" /> 
      </pool> 
     </connection> 
     <statement> 
      <sql> 
       <![CDATA[UPDATE consume SET use=21 WHERE username='riccardo' AND id_api='1']]></sql> 
      </statement> 
     </dbreport> 
     <log level="custom"> 
      <property xmlns:ns="http://org.apache.synapse/xsd" xmlns:ns3="http://org.apache.synapse/xsd" name="result for client" expression="get-property('result_user')" /> 
      <property xmlns:ns="http://org.apache.synapse/xsd" xmlns:ns3="http://org.apache.synapse/xsd" name="result for use" expression="get-property('result_use')" /> 
     </log> 
     </sequence> 

第一DB查找工作正常,但在在DBreport第二個SQL語句不能更新值:

ERROR - DBReportMediator Error execuring insert statem 
ent : UPDATE consume SET use='21' WHERE username='riccardo' AND id_api='1' again 
st DataSource : jdbc:mysql://localhost:3306/new_db 
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 'use='21' WHERE username='riccardo' AND id_api= 
'1'' at line 1 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)... 

我的表如下所示:

消耗(INT ID,VARCHAR用戶名,INT id_api,INT使用) 用戶(INT ID,VARCHAR用戶名,VARCHAR密碼)

千恩萬謝

編輯我認爲有與DBREPORT和DBLOOKUP介質上的MySQL數據庫寫入時的主要問題,讀書是好的,但更新和插入的不愉快... 告訴我,如果我錯了

+0

would not use = '21'? – Ratha

+0

你知道我如何限制在API管理器中使用特定的API?而不是限制層次,但像限制用戶Bob將10次調用「API發送文本」並停止。 – nuvio

+0

我試圖解決序列和代理在「API SND TEXT」之前調用,但它變得更糟了,這些調解器不能真正更新或插入MySql數據庫中的任何東西,我認爲這是一個主要的錯誤。最好的辦法是直接控制API MANAGER中的API使用,但不知道如何...... – nuvio

回答

0

Nuvio,

我想這個問題出現的原因在DBReport調停的東西沒有錯。在通過報告的堆棧跟蹤和序列配置時,我可以看到您已將「use」定義爲列名稱。我不太清楚你是如何創建一個名爲「use」的數據庫列的,因爲它是一個MySQL關鍵字,並且每當在SQL查詢中有一個關鍵字作爲列或任何其他用戶定義屬性時,MySQL查詢編譯器應該拋出一個SQLException 。使用非關鍵字名稱代替「使用」列可以解決您的問題。

乾杯, Prabath

+0

是的,謝謝我已經意識到,但我通過爲我的要求創建一個班調解員來解決問題,無論如何,我會接受你的答案。 – nuvio