Finally got it to run.The problem was: DYNAMIC RESULT SETS 4.
Took it out and it ran ok.
Cheers
IkeAbalogu wrote:
>
> A call to the stored procedure returns this exception:
> ERROR 42X50. No method was found that matched the method call
> storedprocedures.UpdatePreBalanceSP.UpdatePreviousBalanceSP(java.sql.ResultSet[]),
> tried all combinations of object and primitive types and any possible type
> conversion for any parameters the method call may have. The method might
> exist but it is not public and/or static, or the parameter types are not
> method invocation convertible.
> Please help.
>
> BTW:Thanks for all your help.I really really appreciate all of them.
> JAVA CODE FOR THE PROCEDURE:
> package storedprocedures;
>
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.PreparedStatement;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.Statement;
>
> import database.StationDBConnection;
>
> public class UpdatePreBalanceSP {
> //static StationDBConnection con = new StationDBConnection();
>
> // public static void main(String[] args) {
> // new UpdatePreBalanceSP();
> // UpdatePreBalanceSP.UpdatePreviousBalanceSP();
> // }
>
> public static void UpdatePreviousBalanceSP(){
> Connection conn;
> int supplyID = 0;
> int dipid = 0;
> int prevBalance =0;
> int balance = 0;
> try {
> conn =
> DriverManager.getConnection("jdbc:default:connection");
>
> String q1 ="select fk1_supplyid, dipid from
> PRODUCTQUANTMONITOR where
> dipid=" +
> "(select max(dipid) from
> PRODUCTQUANTMONITOR)";
> //q1 returns supplyid and dipid
> PreparedStatement ps1 = conn.prepareStatement(q1);
> ResultSet rs1 = ps1.executeQuery();
> if (rs1.next()){
> supplyID = rs1.getInt("fk1_supplyid");
> dipid = rs1.getInt("dipid");
> }
> rs1.close();
> ps1.close();
>
> String q2 = "select balance from PRODUCTQUANTMONITOR
> " +
> "where fk1_supplyid = ? and
> dipid < ? " +
> "order by dipid desc " +
> "FETCH FIRST ROW ONLY";
>
> PreparedStatement ps2 = conn.prepareStatement(q2);
> ps2.setInt(1, supplyID);
> ps2.setInt(2, dipid);
> ResultSet rs2 = ps2.executeQuery();
> if (rs2.next()){
> balance = rs2.getInt("balance");
> }
> rs2.close();
> ps2.close();
>
> if(balance == 0){
> String q3 = "SELECT QUANTITY FROM APP.PRODUCTSUPPLY
> WHERE SUPPLYID
> =?";
> PreparedStatement ps3 = conn.prepareStatement(q3);
> ps3.setInt(1, supplyID);
> ResultSet rs3 = ps3.executeQuery();
> if (rs3.next()){
> balance = rs3.getInt("QUANTITY");
> }
> }
> prevBalance = balance;
> String q4 = " UPDATE PRODUCTQUANTMONITOR SET
> PREVIOUS_BALANCE
> ="+prevBalance +
> " WHERE FK1_SUPPLYID
> ="+supplyID +
> " AND DIPID ="+dipid;
> Statement st = conn.createStatement();
>
> st.executeUpdate(q4);
> updateSold(dipid, conn);
> conn.close();
>
> } catch (SQLException e) {
> // TODO Auto-generated catch block
> e.printStackTrace();
> }finally{
> //con.closeConnection();
> }
>
> }
>
> private static void updateSold(int dipid, Connection conn) {
>
> try {
> String q = " SELECT PREVIOUS_BALANCE,BALANCE FROM
> PRODUCTQUANTMONITOR"
> +
> " WHERE DIPID ="+dipid;
> Statement st =
> conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
> ResultSet.CONCUR_UPDATABLE);
> Statement st1 = conn.createStatement();
> ResultSet rs = st.executeQuery(q);
> while(rs.next()){
> int sold =
> rs.getInt("previous_balance")-rs.getInt("balance");
> String s =" UPDATE PRODUCTQUANTMONITOR SET
> QUANTITYSOLD ="+sold +
> " WHERE DIPID ="+dipid;
> st1.executeUpdate(s);
> }
>
> st.close();
> st1.close();
> } catch (SQLException e) {
> // TODO Auto-generated catch block
> e.printStackTrace();
> }
> }
>
> }
>
>
> CALL sqlj.install_jar('c:\previousbalance.jar', 'APP.UPDATEDIPRECORD', 0);
>
> CALL
> SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.database.classpath','APP.UPDATEDIPRECORD');
>
> VALUES SYSCS_UTIL.SYSCS_GET_DATABASE_PROPERTY('derby.database.classpath');
> confirms the property has been set
>
> CREATE PROCEDURE UPDATEDIPRECORD()
> PARAMETER STYLE JAVA
> LANGUAGE JAVA
> DYNAMIC RESULT SETS 4
> EXTERNAL NAME
> 'storedprocedures.UpdatePreBalanceSP.UpdatePreviousBalanceSP';
>
> Call UPDATEDIPRECORD();
>
> A call to the stored procedure returns this exception:
> ERROR 42X50. No method was found that matched the method call
> storedprocedures.UpdatePreBalanceSP.UpdatePreviousBalanceSP(java.sql.ResultSet[]),
> tried all combinations of object and primitive types and any possible type
> conversion for any parameters the method call may have. The method might
> exist but it is not public and/or static, or the parameter types are not
> method invocation convertible.
> Please help.
>
> BTW:Thanks for all your help.I really really appreciate all of them.
>
>
> Rick Hillegas-3 wrote:
>>
>> On 6/28/11 4:45 AM, IkeAbalogu wrote:
>>> I am trying to find websites with tutorial on derby stored procedures.i
>>> find
>>> the reference manual article confusing.
>>> Thanks
>> There is also some material in the Developer's Guide:
>> http://db.apache.org/derby/docs/10.8/devguide/devguide-single.html#cdevspecial
>>
>> ...and some material on the Derby wiki:
>> http://wiki.apache.org/db-derby/DerbySQLroutines
>>
>> In addition, the Derby scores demo shows how to write functions and
>> procedures. In your Derby release, look at demo/programs/scores/README
>>
>> Hope this helps,
>> -Rick
>>
>>
>
>
--
View this message in context:
http://old.nabble.com/stored-procedure-tutorial-help-tp31945511p31980071.html
Sent from the Apache Derby Users mailing list archive at Nabble.com.