CallableStatement Probleme

Gossi

Bekanntes Mitglied
Hiho liebe Community,

Ich habe vor kurzem bereits ein Problem mit CallableStatements gehabt(klick mich).

Nun habe ich das ja hinbekommen, stehe nun aber vor einem neuen Problem:
Das Statement wird auf der Datenbank nicht ausgeführt, hierzu hab ich nun 2 Fragen:

1. Gibt es eine Möglichkeit sich das Statement nach dem setzen der Parameter ausgeben zu lassen?

Wenn ich also eine Prozedur habe:
SQL:
DECLARE
    steuerID NUMBER := ?;
BEGIN
    WFLPROD.DS_PKG.set_steuer(?,?,?,?,?,steuerID);
    ? := steuerID;
END;

Möchte ich mir sowas ausgeben lassen:
Code:
DECLARE
    steuerID NUMBER := 0;
BEGIN
    WFLPROD.DS_PKG.set_steuer(8,1,10,2,-1,steuerID);
    ? := steuerID;
END;
Das letzte Fragezeichen steht dabei für den Ausgangsparameter der aus der DB kommt (die Prozedur legt einen neuen Eintrag an und gibt die steuerId zurück falls die steuerId vorher 0 ist, ansonsten wird die alte steuerId zurückgegeben).

2. Woran könnte es liegen, dass das Statement nicht ausgeführt wird, hier nochmal nen bissl Code:

Die Methode getCallableStatement
[JAVA=367]
private void getCallableStatement(final String sql) {
cs = connection.prepareCall(sql);
}
[/code]

Der Aufruf (java)
[JAVA=252]
String sql = getSqlBefehl("UPDATE_STEUER");
this.getCallableStatement(sql);
cs.setInt(1, steuer.getProfile().getId());
cs.setInt(2, steuer.getBefehlId());
cs.setInt(3, steuer.getReihenfolge());
cs.setInt(4, steuer.getStplZustandIdBefor().getId());
cs.setInt(5, steuer.getStplZustandIdNach().getId());
cs.setInt(6, steuer.getId());
cs.registerOutParameter(7, Types.NUMERIC);
cs.executeUpdate();
connection.commit();
steuer.setId(cs.getInt(7));
cs.close();
[/code]

Der Prozedurenaufruf (in Java: getSqlBefehl("UPDATE_STEUER"))
SQL:
DECLARE
    steuerID NUMBER := ?;
BEGIN
    WFLPROD.DS_PKG.set_steuer(?,?,?,?,?,steuerID);
    ? := steuerID;
END;

Die Prozedur:
SQL:
    PROCEDURE SET_STEUER
      (
        profileID       IN number,
        befehlID        IN number,
        nummer          IN number,
        stplZustandVor  IN number,
        stplZustandNach IN number,
        steuerID        IN OUT number
      ) AS
      counter number;
    BEGIN
      IF steuerID = 0 THEN
        select ds_steuer_seq.nextval into steuerid from dual;
        INSERT
        INTO ds_steuer VALUES
          (
            profileid,
            befehlid,
            (SELECT max(r)+1
                FROM
                  (
                      SELECT 0 r FROM dual UNION
                      SELECT nvl(reihenfolge,0) r FROM ds_steuer WHERE profile_id = profileid
                  )
            ),
            stplzustandvor,
            stplzustandnach,
            steuerID
          );
      ELSE
      select steuerid into steuerid from dual;
        UPDATE ds_steuer
           set profile_id            = profileid,
               befehl_id             = befehlid,
               reihenfolge           = nummer,
               stpl_zustand_id_bevor = stplzustandvor,
               stpl_zustand_id_nach  = stplzustandnach
         WHERE steuer_id             = steuerid;
      END IF;
    END SET_STEUER;

Hoffe das sind nun nicht zuviele Fragen und ich freue mich schon auf die (hoffentlich) hilfreichen Antworten.

MfG
Gossi :)
 
Zuletzt bearbeitet:

Deros

Bekanntes Mitglied
1) kommt auf die DB an unter oracle wäre es:
SQL:
dbms_output.put_line(steuerID)

2)

executeUpdate

public int executeUpdate()
throws SQLException

Executes the SQL statement in this PreparedStatement object, which must be an SQL INSERT, UPDATE or DELETE statement; or an SQL statement that returns nothing, such as a DDL statement.

Returns:
either (1) the row count for INSERT, UPDATE, or DELETE statements or (2) 0 for SQL statements that return nothing
Throws:
SQLException - if a database access error occurs or the SQL statement returns a ResultSet object
 

Gossi

Bekanntes Mitglied
[...]
2)

executeUpdate

public int executeUpdate()
throws SQLException

Executes the SQL statement in this PreparedStatement object, which must be an SQL INSERT, UPDATE or DELETE statement; or an SQL statement that returns nothing, such as a DDL statement.

Returns:
either (1) the row count for INSERT, UPDATE, or DELETE statements or (2) 0 for SQL statements that return nothing
Throws:
SQLException - if a database access error occurs or the SQL statement returns a ResultSet object

Also, ich habs mal getestet, bei executeUpdate(), bekomme ich eine 1 zurück (also laut deiner Beschreibung den riow count.

Nehme ich cs.execute() , bekomme ich hingegegen false. -.-
 

Deros

Bekanntes Mitglied
dann probier doch mal "cs.executeQuery()"

edit: quatsch cs.execute müsste reichen willst ja kein resulset zurückhaben sondern nur den out-parameter. Wo kommt da dann bitte "false" zurück?!?

edit: achso als return, klar
wieder direkt aus der api in die du auch ruhig mal gucken darfst :
"Returns:
true if the first result is a ResultSet object; false if the first result is an update count or there is no result "

aber das problem seh ich trotzdem nicht, willst doch nix als return-wert sondern nur den out-parameter
 
Zuletzt bearbeitet:

Gossi

Bekanntes Mitglied
dann probier doch mal "cs.executeQuery()"

edit: quatsch cs.execute müsste reichen willst ja kein resulset zurückhaben sondern nur den out-parameter. Wo kommt da dann bitte "false" zurück?!?

edit: achso als return, klar
wieder direkt aus der api in die du auch ruhig mal gucken darfst :
"Returns:
true if the first result is a ResultSet object; false if the first result is an update count or there is no result "

aber das problem seh ich trotzdem nicht, willst doch nix als return-wert sondern nur den out-parameter

Richtig, aber CallableStatement.execute() gibt ja true oder false zurück wenns erfolgreich ist oder fehlgeschlagen, oder hab ich mich da so extrem verlesen?

PS: Die Api hab ich auch offen, da schaue ich ja grad nach :rtfm:, aber die bringt mich auch net soviel weiter :bahnhof:
 

Deros

Bekanntes Mitglied
wenn was fehlschlägt? wenn ein Fehler auftritt kommt eine SQLException. kommt bei der zeile
Java:
steuer.setId(cs.getInt(7));
irgendein unerwartetes ergebnis oder was ist jetzt das problem??
 

Gossi

Bekanntes Mitglied
wenn was fehlschlägt? wenn ein Fehler auftritt kommt eine SQLException. kommt bei der zeile
Java:
steuer.setId(cs.getInt(7));
irgendein unerwartetes ergebnis oder was ist jetzt das problem??

Aso, nein, das Problem ist, das sich in der DB nichts tut, er also das Statement quasi garnicht ausführt, die Prozedur habe ich schonmal getestet, die Funktioniert eigentlich.....
 

Deros

Bekanntes Mitglied
öhhh...kein plan was übergibst du denn an die funktion und was kommt als id zurück? was heißt eigentlich funktioniert die funktion? tut sie es oder tut sie es nicht?
ansonsten mal ein
SQL:
EXCEPTION
    WHEN OTHERS THEN steuerID := -50
unten an deine prozedur hängen....kann sonst nur noch raten was du falsch machst :bahnhof:
 

Gossi

Bekanntes Mitglied
öhhh...kein plan was übergibst du denn an die funktion und was kommt als id zurück? was heißt eigentlich funktioniert die funktion? tut sie es oder tut sie es nicht?
ansonsten mal ein
SQL:
EXCEPTION
    WHEN OTHERS THEN steuerID := -50
unten an deine prozedur hängen....kann sonst nur noch raten was du falsch machst :bahnhof:

Also, funktionieren tut die Funktion, hab sie eben nochmals getestet, sie tut alles was ich von ihr will, solange Java ausm Spiel bleibt, ich werd nu einfach meine alte Lösung wieder aufn produktionsserver stellen, die hat einwandfrei funktioniert und dieser Abschnitt geht in 2 Wochen an meinen Kollegen wenn der ausm Urlaub wieder da is, also zwei weiter Wochen mit meinem unperformanten sch*** :pueh:

Ich programmiere für sowas definitiv noch net lange genug, wenn nen Fehler kommt ohne Exception, der sich net durch ne einfache if-Abfrage lösen lässt bin ich echt immer aufgeschmissen :D, sorry das ich dir die Zeit gestohlen habe, aber trotzdem danke für die Hilfe :toll:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Gossi CallableStatement Ungültiger Spaltenindex Datenbankprogrammierung 2
K CallableStatement Datenbankprogrammierung 4
TH260199 Java-Programm. Probleme bei der Umsetzung von einer Kontaktverwaltung. Datenbankprogrammierung 7
Zrebna Probleme bei Überführung von SQL-Code in eine HQL-Abfrage Datenbankprogrammierung 3
Kirby.exe Probleme mit docker-compose.yml Datenbankprogrammierung 4
B Probleme mit Datenbankverbindung Datenbankprogrammierung 2
N java SQL JAR - Probleme Datenbankprogrammierung 18
S probleme mit dem jdbc treiber Datenbankprogrammierung 1
T Oracle Probleme bei getTableName Datenbankprogrammierung 8
B Probleme mit java.sql.SQLException: ResultSet closed Datenbankprogrammierung 21
D Probleme bei Einsteiger Aufgabe SQL Datenbankprogrammierung 2
M JAVA Derby INSERT probleme Datenbankprogrammierung 12
Z MySQL Probleme mit resultSet executQuery Datenbankprogrammierung 3
H Probleme mit Unicodedarstellung in Derby DB Datenbankprogrammierung 1
M MySQL probleme beim "Generate Tables from Entities" Datenbankprogrammierung 9
L Probleme mit DriverManager.getConnection(..) - Endlosschleife, Java Absturz, Keine Exception Datenbankprogrammierung 4
S Derby/JavaDB Probleme beim anlegen einer embedded DB Datenbankprogrammierung 13
P Probleme mit meinem 1. Hibernate Beispiel Datenbankprogrammierung 3
W Probleme mit AND und OR Datenbankprogrammierung 5
D DB Tabelle in JTable anzeigen - Probleme Datenbankprogrammierung 8
D Probleme bei der Erzeugung einer Tabelle Datenbankprogrammierung 15
L MySQL Probleme mit PreparedStatement für SQL-Abfrage in Java Datenbankprogrammierung 2
R Derby/JavaDB Insert Statement Probleme Datenbankprogrammierung 14
L Derby/JavaDB Derby macht Probleme Datenbankprogrammierung 4
B HSQLDB Probleme mit Select...Where Abfrage Datenbankprogrammierung 16
M Probleme mit Triggering Datenbankprogrammierung 2
F DB2 Probleme mit dem DriverManager Datenbankprogrammierung 4
S Derby/JavaDB OpenJPA, @oneToMany und Probleme Datenbankprogrammierung 2
I MySQL Probleme mit kyrillischen Zeichen Datenbankprogrammierung 2
A Derby/JavaDB Probleme beim Einbinden Datenbankprogrammierung 2
S Probleme mit INSERT Befehl Datenbankprogrammierung 11
R isLast() Probleme bei Pervasive Datenbankprogrammierung 5
S Probleme mit localhost Datenbankprogrammierung 14
M Oracle Probleme mit dem anbinden einer Oracle 10g Datenbank Datenbankprogrammierung 27
J MySQL Hibernate: Probleme beim Speichern von OneToMany - Datensätzen Datenbankprogrammierung 2
P Hibernate -> Probleme bei n:m-Relation und JUnit Datenbankprogrammierung 10
J Probleme mit Datenbankzeiger Datenbankprogrammierung 19
A Probleme mit auf DB2 Express zugreiffen Datenbankprogrammierung 6
N Probleme beim Aufruf aus der DB Datenbankprogrammierung 7
M Probleme bei Select in Schleife Datenbankprogrammierung 7
G Probleme mit Datenbankanbindung Datenbankprogrammierung 3
R Probleme mit Insert Datenbankprogrammierung 2
P Probleme mit Oracle Timestamp Datenbankprogrammierung 3
klattiator Hibernate - Probleme bei Konfiguration Datenbankprogrammierung 3
F Probleme mit entfernter DB und Hibernate Zeichensatz Datenbankprogrammierung 3
G Probleme mit der Schnittstelle H1bernate/Eclipse Datenbankprogrammierung 6
A Probleme mit Jar-File in ein Jar-File Datenbankprogrammierung 8
O Derby Performance Probleme? Datenbankprogrammierung 4
V Probleme beim Öffnen "einiger" SuperbaseTabellen p Datenbankprogrammierung 8
G Probleme beim Methodenaufruf einer EJB Datenbankprogrammierung 10
ARadauer hibernate probleme Datenbankprogrammierung 13
Y Probleme mit H2 und Primary Key Datenbankprogrammierung 4
D Probleme mit mysql-Connection Datenbankprogrammierung 10
G INNODB backup probleme Datenbankprogrammierung 2
S Probleme mit statement.close() Datenbankprogrammierung 10
A Probleme beim Schreiben in eine CSV-Datei aus einer H2-DB Datenbankprogrammierung 2
G Probleme mit Laden des JDBC-Treiber in HSQLDB Datenbankprogrammierung 2
T Probleme mit Date in H2 Datenbank Datenbankprogrammierung 2
4 Probleme mit Select abfrage Datenbankprogrammierung 4
N Probleme mit Access-DB bei einem Webserver Datenbankprogrammierung 5
T Diverse JDBC Probleme (inner join, rs.last(), update) Datenbankprogrammierung 2
R Probleme mit Datensätzen in MySql DB Datenbankprogrammierung 3
B Oracle Driver Probleme Datenbankprogrammierung 2
I Probleme bei MySQL - Replikation Datenbankprogrammierung 2
R Probleme mit ausführbarem Jar Archiv Datenbankprogrammierung 9
F Probleme mit Jar Datei Datenbankprogrammierung 3
S String probleme Datenbankprogrammierung 3
R Probleme mit der Verbindung zum localhost Datenbankprogrammierung 12
S Probleme bei der Installation von MySQL 5.0 Datenbankprogrammierung 4
A Probleme mit ResultSet und getString(i) Datenbankprogrammierung 13
G Probleme mit Access und Join Datenbankprogrammierung 3
N Probleme mit "nur vorwärts gerichtete ResultSet" Datenbankprogrammierung 7
M Daten von MySQL nach MSSql probleme beim schreiben Datenbankprogrammierung 3
S JDBC-Anfänger und Probleme beim Treiberfinden etc. Datenbankprogrammierung 4
T Probleme beim Verbindungsaufbau zum SQL 2000 Datenbankprogrammierung 2
G Probleme mit Datenbankeinträge Datenbankprogrammierung 4
G Probleme mit Treiber (connector) Datenbankprogrammierung 20
thE_29 getBytes() - russland/bulgarien -- andere Codecs Probleme Datenbankprogrammierung 8
E Probleme mit JDBC und Executable-Jar Datenbankprogrammierung 2
G Probleme mit MySQL - Anmeldung Datenbankprogrammierung 2
P Probleme mit NullPointerException Datenbankprogrammierung 5
K MySQL: Probleme mit dem Verbinden per IP-Adresse Datenbankprogrammierung 6
T Probleme mit Datenbank Datenbankprogrammierung 6

Ähnliche Java Themen

Neue Themen


Oben