0

我在尝试测试 wso2 dss 上的数据服务时收到此错误

DS 错误消息:“SQLQuery.processStoredProcQuery”中的错误 DS 代码:DATABASE_ERRORSource 数据服务:-名称:CustomerDSLocation:\CustomerDS-1.0.0.dbsDescription:N/ADefault 命名空间:http ://ws.wso2.org/dataserviceCurrent请求名称: op1Current Params: {Name=?, NID=?}嵌套异常:-DS 错误消息: 'createProcessedPreparedStatement'DS 代码中的错误: UNKNOWN_ERRORNested 异常:-java.sql.SQLException: 参数索引 3 超出范围 (1, 0)

有什么建议么?

编辑:bds文件如下,这是wso2文档中提到的一个示例案例。

<data name="CustomerDS">                  
   <config id="default">                              
      <property name="org.wso2.ws.dataservice.driver">com.mysql.jdbc.Driver</property>                              
      <property name="org.wso2.ws.dataservice.protocol">jdbc:mysql://localhost:3306/CustomersDatabase</property>                              
      <property name="org.wso2.ws.dataservice.user">root</property>                              
      <property name="org.wso2.ws.dataservice.password">root</property>               
   </config>               
   <query id="q1" useConfig="default">                              
      <sql>call getCustomer(?,?,?,?)</sql>                              
      <result element="Entries" rowName="Entry">                                             
         <element name="Flag" column="Flag" xsdType="xs:integer" optional="true" />                                             
         <element name="Customer" column="Customer" xsdType="xs:string" optional="true" />                              
      </result>                              
      <param name="NID" sqlType="STRING" ordinal="1" />                              
      <param name="Name" sqlType="STRING" ordinal="2" />                              
      <param name="Flag" sqlType="INTEGER" type="OUT" ordinal="3" />                              
      <param name="Customer" sqlType="STRING" type="OUT" ordinal="4" />               
   </query>               
   <operation name="op1">                              
      <call-query href="q1">                                             
         <with-param name="NID" query-param="NID" />                                             
         <with-param name="Name" query-param="Name" />                              
      </call-query>               
   </operation>
</data>

什么对我有用!

我在http://svn.wso2.org/repos/wso2/people/kasun/wso2con_2013/starbucks_2.0/dss/StarbucksDataService.dbs找到了参考代码

最终为我工作的过程调用是(过程本身会发生变化)

    <data name="CustomerDS">                  
   <config id="default">                              
      <property name="org.wso2.ws.dataservice.driver">com.mysql.jdbc.Driver</property>                              
      <property name="org.wso2.ws.dataservice.protocol">jdbc:mysql://localhost:3306/CustomersDatabase</property>                              
      <property name="org.wso2.ws.dataservice.user">root</property>                              
      <property name="org.wso2.ws.dataservice.password">root</property>               
   </config>               
   <query id="q1" useConfig="default">                              
      <sql>call getCustomer(?,?)</sql>                              
      <result element="Entries" rowName="Entry">                                             
         <element name="Flag" column="Flag" xsdType="xs:integer" optional="true" />                                             
         <element name="Customer" column="Customer" xsdType="xs:string" optional="true" />                              
      </result>                              
      <param name="NID" sqlType="STRING" ordinal="1" />                              
      <param name="Name" sqlType="STRING" ordinal="2" />                              
      <param name="Flag" sqlType="INTEGER" type="OUT" ordinal="3" />                              
      <param name="Customer" sqlType="STRING" type="OUT" ordinal="4" />               
   </query>               
   <operation name="op1">                              
      <call-query href="q1">                                             
         <with-param name="NID" query-param="NID" />                                             
         <with-param name="Name" query-param="Name" />                              
      </call-query>               
   </operation>
</data>

目前暂定的工作程序是:

DELIMITER // 
CREATE procedure getCustomer(NID varchar(200),Name varchar(200))  
BEGIN 
DECLARE id varchar(200); 
DECLARE flag int;
SET Flag = 0;
SET id = CONCAT(NID, '_' ,  Name); 

INSERT INTO Customer(NID, Name, customerID) VALUES(NID, Name, id); 

select flag, customerid from customer where customerID = id;
END//
4

1 回答 1

1

在查询 q1 调用 getCustomer(?,?,?,?) 接受 4 个参数,在输入映射列表中只有 2 个输入参数(仅限 IN)。这一定是这个异常的原因。请参考教程。

于 2013-10-23T09:05:51.923 回答