2012-05-21 37 views
3

騾子3 JDBC端點例外,我想插入一個字符串到使用JDBC騾出站端點SQL Server數據庫。查詢是:當有效載荷是其中一個選擇語句的WHERE子句中與SQL Server

INSERT INTO ife VALUES (#[payload:java.lang.String], 0) 

的查詢工作,當我在地方有效載荷表達的硬編碼值。但是,它插入語句像上面列出的一樣,失敗了。我已經包含下面的例外以及流xml配置。任何建議/幫助將不勝感激!

ERROR 2012-05-21 11:37:00,122 [[ife].IFE_InboundFlow1.stage1.02]  org.mule.exception.DefaultMessagingExceptionStrategy: 
******************************************************************************** 
Message    : Failed to route event via endpoint:  DefaultOutboundEndpoint{endpointUri=jdbc://insert, connector=JdbcConnector 
{ 
    name=Database__JDBC_ 
    lifecycle=start 
    this=11e5f 
    numberOfConcurrentTransactedReceivers=4 
    createMultipleTransactedReceivers=false 
    connected=true 
    supportedProtocols=[jdbc] 
    serviceOverrides=<none> 
} 
, name='endpoint.jdbc.insert', mep=ONE_WAY, properties={queryTimeout=-1,  queries=merged: {insert=INSERT INTO ife VALUES (#[payload:java.lang.String], 0)}},  transactionConfig=Transaction{factory=null, action=INDIFFERENT, timeout=0},  deleteUnacceptedMessages=false, initialState=started, responseTimeout=10000,  endpointEncoding=UTF-8, disableTransportTransformer=false}. Message payload is of type:  String 
Code     : MULE_ERROR-42999 
-------------------------------------------------------------------------------- 
Exception stack is: 
1. com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near '?'.(SQL  Code: 0, SQL State: + null) (com.microsoft.sqlserver.jdbc.SQLServerException) 
    com.microsoft.sqlserver.jdbc.SQLServerException:190 (null) 
2. com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near '?'. Query:  INSERT INTO ife VALUES (?, 0) Parameters: [30076](SQL Code: 0, SQL State: +  null) (java.sql.SQLException) 
    org.apache.commons.dbutils.QueryRunner:540 (null) 
3. Failed to route event via endpoint:  DefaultOutboundEndpoint{endpointUri=jdbc://insert, connector=JdbcConnector 
{ 
    name=Database__JDBC_ 
    lifecycle=start 
    this=11e5f 
    numberOfConcurrentTransactedReceivers=4 
    createMultipleTransactedReceivers=false 
    connected=true 
    supportedProtocols=[jdbc] 
    serviceOverrides=<none> 
} 
, name='endpoint.jdbc.insert', mep=ONE_WAY, properties={queryTimeout=-1, queries=merged: {insert=INSERT INTO ife VALUES (#[payload:java.lang.String], 0)}}, transactionConfig=Transaction{factory=null, action=INDIFFERENT, timeout=0}, deleteUnacceptedMessages=false, initialState=started, responseTimeout=10000, endpointEncoding=UTF-8, disableTransportTransformer=false}. Message payload is of type: String (org.mule.api.transport.DispatchException) 
    org.mule.transport.AbstractMessageDispatcher:107 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/transport/DispatchException.html) 
-------------------------------------------------------------------------------- 
Root Exception stack trace: 
com.microsoft.sqlserver.jdbc.SQLServerException: com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near '?'. 
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:190) 
at com.microsoft.sqlserver.jdbc.SQLServerParameterMetaData.<init>(SQLServerParameterMetaData.java:426) 
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.getParameterMetaData(SQLServerPreparedStatement.java:1532) 
+ 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything) 

這裏的XML配置:

<spring:beans> 
     <spring:bean id="Bean" name="Bean" class="org.enhydra.jdbc.standard.StandardDataSource" doc:name="Bean"> 
      <spring:property name="driverName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/> 
      <spring:property name="url" value="jdbc:sqlserver://localhost:1433;instanceName=SQLEXPRESS;databaseName=test;user=test;password=test;"/> 
     </spring:bean> 
    </spring:beans> 
<jdbc:connector name="Database__JDBC_" dataSource-ref="Bean" validateConnections="true" queryTimeout="-1" pollingFrequency="0" doc:name="Database (JDBC)"/> 
<flow name="test"> 
    <jdbc:outbound-endpoint exchange-pattern="one-way" queryKey="insert" responseTimeout="10000" mimeType="text/plain" queryTimeout="-1" connector-ref="Database__JDBC_" doc:name="Database (JDBC)"> 
           <jdbc:query key="insert" value="INSERT INTO ife VALUES (#[payload:java.lang.String], 0)"/> 
          </jdbc:outbound-endpoint> 
</flow> 
+0

你能設置'-Dmule.verbose.exceptions = TRUE;並增加日誌級別調試和共享擴展日誌?你還使用什麼Mule版本?最後,你是否稱之爲「測試」流程? –

+0

我使用的Eclipse靛藍服務發佈2.至於設置冗長騾子3.1.1 IDE插件,我還設置調試log4j.properties已經所以我真的不知道你的意思,在這一點上。另外,我將這個流程作爲Eclipse中的mule應用程序運行。我對騾仍然很陌生,所以請耐心等待。 – user1408370

+0

很酷,所以當你調用'test'流程時,你應該在控制檯中看到很多DEBUG消息(你怎麼做那個btw?)。你能發佈這些日誌條目嗎? –

回答

1

也許你需要附上#[有效載荷:java.lang.String中在單引號?您可以看到它試圖發出查詢:

INSERT INTO ife VALUES (?, 0); 

哪一個不起作用。

INSERT INTO ife VALUES ('#[payload:java.lang.String]', 0)? 
2

它的工作對我來說,當我刪除了單引號:

#[payload:java.lang.String]