Rueckgabewert einer Stored Procedure + JDBC

  • Hi. ich hab derzeit das Problem, dass ich den Rueckgabewert, der sich durch das Ausfuehren einer Stored Procedure ergibt nicht in meiner Java Application abrufen kann.

    Info:
    Database: MS-SQLServer 2000
    JDBC Driver: Microsoft SQL Server 2000 Driver for JDBC
    Java vs. 1.5

    Die SP soll den letzten verwendeten Identity Wert einer Tabelle @tb zurueckliefern. Die Berechnung fuer diesen Index stimmt. So sieht die SP aus:

    Code
    CREATE PROCEDURE proc_getLastIdentityValue @tb varchar(20)
    AS
    DECLARE @lastIndex varchar(20)
    --for testing
    INSERT INTO tbRegion (RegionName,ISOCODE2,ISOCODE3) Values ('myRegion','MM','MMM')
    set @lastIndex = IDENT_CURRENT(@tb)
    return @lastIndex
    GO

    Wenn ich nun die SP in meiner Application starte erhalte ich aber immer nur ein leeres ResultSet. Die SP wird jedoch ausgefueht da das INSERT erfolgreich durchgefuehrt wird! So sieht der Java Code aus:

    Code
    String query = "EXEC proc_getLastIdentityValue @tb=?";
    CallableStatement cstmt = conn.prepareCall(query);
    cstmt.setString(1,"myTable");
    ResultSet rs = cstmt.executeQuery(); //rs ist nach executeQuery() NULL

    Tja vielleicht kann mir da jemand aus weiter helfen.

  • Habs endlich irgendwie hingebogen. Was so ein Hatscher quer durch die Stadt nicht alles fuer Eingebungen bringt ;). Bin zwar mit der Art, wie es geloest ist nicht zufrieden aber es geht zumindest mal. Es sollte ja auch durch das Deklarieren eines OUTPUT Wertes in der SP funktionieren. Aber das hab ich bis jetzt nicht herausgefunden. Vielleicht kann mir das ja jemand stecken, der sich bei Ms-SQL etwas besser auskennt als ich. Mein derzeitiger funktionierender Loesungsweg:

    Code fuer SP:

    Code
    CREATE PROCEDURE proc_getLastIdentityValue @tb varchar(30)
    AS
    DECLARE @lastIndex varchar(20)
    SET @lastIndex = IDENT_CURRENT(@tb)
    SELECT @lastIndex
    GO


    Javacode:

    Code
    CallableStatement cstmt = conn.prepareCall(query);
    cstmt.setString(1,"myTable");
    ResultSet rs = cstmt.executeQuery(); //beinhaltet nun den hoechsten ID
  • Tja also meine Selbstgespraeche fruchten anscheinend! Und fuer den Fall, dass mal jemand dasselbe Problem hat is hier der Code:

    SP:

    Code
    CREATE PROCEDURE proc_getLastIdentityValue @tb varchar(30) output
    AS
    SET @tb = IDENT_CURRENT(@tb)
    GO

    Javacode:

    Code
    CallableStatement cstmt = conn.prepareCall(query);
    cstmt.setString(1,"tbRegion");
    cstmt.registerOutParameter(1,Types.VARCHAR);
    cstmt.execute();
    String id = cstmt.getString(1);

    lg

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!