wso2 dss mysql错误

时间:2013-10-22 08:31:39

标签: wso2 wso2dss

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

  

DS错误消息:错误输入   'SQLQuery.processStoredProcQuery'DS代码:DATABASE_ERRORSource数据   服务:-Name:CustomerDSLocation:\ CustomerDS-1.0.0.dbsDescription:   N / ADefault命名空间:http://ws.wso2.org/dataserviceCurrent请求   名称:op1Current Params:{Name =?,NID =?}嵌套异常:-DS Fault   消息:'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//

1 个答案:

答案 0 :(得分:0)

在查询q1中,调用getCustomer(?,?,?,?)需要4个参数,在输入映射列表中只有2个输入参数(仅IN)。这必须是此例外的原因。请参阅this教程。