aus Java eine MSSQLServer - Prozedur starten

Status
Nicht offen für weitere Antworten.

wikinger222

Mitglied
Hallo,

ich habe im MSSQLServer eine Prozedur geschrieben, welche ich nun mithilfe von Jave aufrufen möchte.
Nun habe ich bisher leider nichts gefunden, was ich auch für mein Problem anwenden konnte.
Die Datenbankverbindung steht schon. Ich kann von Java heraus auch schon auf die Datensätze zugreifen. Nun möchte ich zB. ein Button, welche die Prozedur mit den Parametern startet.

meine Prozedur:

CREATE PROCEDURE Person_loeschen_rückgängig @Ergebnis varchar(255) OUTPUT, @PEID int
AS
BEGIN

--DECLARE @Ergebnis varchar(255)
--DECLARE @PEID int
--SET @PEID=1
if EXISTS(SELECT PEID FROM PERSON_DELETE WHERE PEID = rtrim(CONVERT(char(255),@PEID)))
begin
IF NOT EXISTS(SELECT PEID FROM PERSON WHERE PEID = rtrim(CONVERT(char(255),@PEID))) --wenn PEID nicht existiert, dann fahre fort
begin
SET @Ergebnis = 'Person existiert in Tabelle "PERSON_DELETE" und wird wieder hergestellt.'
SET IDENTITY_INSERT PERSON ON --IDENTITY wird vorübergehend deaktiviert, damit auch die alte PEID beibehalten werden kann
INSERT INTO PERSON (PEID,PEVORNAME,PENACHNAME,PETELEFON,PEEMAIL) SELECT @PEID,PEVORNAME,PENACHNAME,PETELEFON,PEEMAIL FROM PERSON_DELETE WHERE PERSON_DELETE.PEID=@PEID
SET IDENTITY_INSERT PERSON OFF
DELETE FROM PERSON_DELETE WHERE PEID = rtrim(CONVERT(char(255),@PEID))
end
ELSE
begin
print 'Sorry, in der Tabelle PERSON gibt es schon einen Datensatz mit der selben PEID wie ihn der wiederherzustellende Datensatz hat. Wiederherstellung abgebrochen.'
end
end
ELSE
begin
SET @Ergebnis = 'Person existiert nicht in Tabelle "PERSON_DELETE" und wird nicht wieder hergestellt.'
end
END




der Aufruf der Prozedur vom SQLServer aus:

DECLARE @Ergebnis varchar(255)
EXECUTE Person_loeschen_rückgängig @Ergebnis OUTPUT, 3
print @Ergebnis




Für Eure Hilfe bin ich Dankbar :)
Gruß
 

Energie

Mitglied
Hallo Wikinger,

genau vor diesem problem steh ich momentan auch.

Habe es versucht mit:

CallableStatement cs = prepareCall("{excecute PROZEDURNAME Variable1, Variable2}");

Wobei der Aufruf der Variablen mir nicht klar erscheint.
...und nicht nur der ;-)

Bin für jede Hilfe dankbar :applaus:
 
G

Guest

Gast
wikinger222 hat gesagt.:
Hallo,

ich habe im MSSQLServer eine Prozedur geschrieben, welche ich nun mithilfe von Jave aufrufen möchte.
Nun habe ich bisher leider nichts gefunden, was ich auch für mein Problem anwenden konnte.
Die Datenbankverbindung steht schon. Ich kann von Java heraus auch schon auf die Datensätze zugreifen. Nun möchte ich zB. ein Button, welche die Prozedur mit den Parametern startet.

meine Prozedur:

CREATE PROCEDURE Person_loeschen_rückgängig @Ergebnis varchar(255) OUTPUT, @PEID int
AS
BEGIN

--DECLARE @Ergebnis varchar(255)
--DECLARE @PEID int
--SET @PEID=1
if EXISTS(SELECT PEID FROM PERSON_DELETE WHERE PEID = rtrim(CONVERT(char(255),@PEID)))
begin
IF NOT EXISTS(SELECT PEID FROM PERSON WHERE PEID = rtrim(CONVERT(char(255),@PEID))) --wenn PEID nicht existiert, dann fahre fort
begin
SET @Ergebnis = 'Person existiert in Tabelle "PERSON_DELETE" und wird wieder hergestellt.'
SET IDENTITY_INSERT PERSON ON --IDENTITY wird vorübergehend deaktiviert, damit auch die alte PEID beibehalten werden kann
INSERT INTO PERSON (PEID,PEVORNAME,PENACHNAME,PETELEFON,PEEMAIL) SELECT @PEID,PEVORNAME,PENACHNAME,PETELEFON,PEEMAIL FROM PERSON_DELETE WHERE PERSON_DELETE.PEID=@PEID
SET IDENTITY_INSERT PERSON OFF
DELETE FROM PERSON_DELETE WHERE PEID = rtrim(CONVERT(char(255),@PEID))
end
ELSE
begin
print 'Sorry, in der Tabelle PERSON gibt es schon einen Datensatz mit der selben PEID wie ihn der wiederherzustellende Datensatz hat. Wiederherstellung abgebrochen.'
end
end
ELSE
begin
SET @Ergebnis = 'Person existiert nicht in Tabelle "PERSON_DELETE" und wird nicht wieder hergestellt.'
end
END




der Aufruf der Prozedur vom SQLServer aus:

DECLARE @Ergebnis varchar(255)
EXECUTE Person_loeschen_rückgängig @Ergebnis OUTPUT, 3
print @Ergebnis




Für Eure Hilfe bin ich Dankbar :)
Gruß

 

wikinger222

Mitglied
Hallo noch einmal,

ich denke, dass Energie schon auf dem richtigen Wege ist.
Aber jede Variante, die ich probierte, klappt nicht :-(

Bitte, bitte, Hilfe ...
 

Bleiglanz

Gesperrter Benutzer
? = call Person_loeschen_rückgängig ?

dann setInt(1,wertfürpeid)

dann executen

dann getString(1)
 

wikinger222

Mitglied
Hallo,

habe einmal versucht folgenden Code zu modifizieren. Nur er spuckt mir eine Fehlermeldung aus "FALSCHER SYNTAX IN DER NÄHE VON CALL"

Fehlermeldung in der Zeile:
...
callStmt.execute();
System.out.println("TEST8a");
...


Wie händle ich das mit den beiden Parametern?
- String sql = "CALL Person_loeschen_rückgängig (?, ?)";
(Wobei 'Person_loeschen_rückgängig' der Name der Prozedur ist)
Der erste der beiden Fragezeichen ist der Rückgabeparameter der Prozedur vom Typ varchar. Der zweite ist vom Typ int.




VOLLSTÄDIGER CODE:

Code:
import java.sql.*;              // JDBC classes 

class Procedure
{
  public static void main(String argv[])
  {
    Connection con = null;
    // URL is jdbc:db2:dbname
    String url = "jdbc:odbc:SQLServer_Projekt";
				
    try
    {
      System.out.println("TEST1a");

      // Datenbank-Treiber laden
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    }
    catch (Exception e)
    {
      System.out.println("TEST1b");
      System.out.println("\nError loading DB2 Driver...\n");
      e.printStackTrace();
    }



    try
    {
      System.out.println("TEST2a");
      // Verbindung zur Datenbank aufbauen
      con = DriverManager.getConnection(url);   

      // Autocommit ausschalten
      con.setAutoCommit(false);                                           

      // Abteilungsname festlegen
//      String dept = "ADMINISTRATION SYSTEMS";
int peid = 4;
//      System.out.println("Abteilung " + dept);

      System.out.println("TEST3a");
      // Anzahl der Projekte in der aktuellen Abteilung ermitteln
int num = callProjectNumber(con, peid);
      System.out.println("TEST10a");

System.out.println("Rückgabe ---" + num+ "---");

//      if (num > 0) {   // Gibt es Projekte in der Abt.?
//         System.out.println("Projekte:");

         // alle Projekte der Abteilung ausgeben
//         callProjects(con, dept);
//      }

      // Informationen ueber die Angestellten der Abteilung ausgeben
//      callEmployees(con, dept);

//      System.out.println("");

      // Beenden der Transaktion und schliessen der Verbindung
      con.commit();
      con.close();
    }
    catch (Exception e)
    {
      try
      { 
        con.rollback();
        con.close();
      } 
      catch (Exception x) 
      { } 
      e.printStackTrace ();
    }
  }

  //--- Bestimmen der Anzahl der Projekte einer Abteilung ---
  public static int callProjectNumber(Connection con, int peid)
  {
  	System.out.println("TEST4a");
    int outNum = 0;
    try {

      // CALL-Anweisung fuer PROJECT_NUMBER vorbereiten
      String sql = "CALL Person_loeschen_rückgängig (?, ?)";
      CallableStatement callStmt = con.prepareCall(sql);
      System.out.println("TEST5a");

      // Ausgabe-Parameter registrieren (OUT-Parameter)
      callStmt.registerOutParameter (2, Types.INTEGER);


	  System.out.println("TEST6a");
      // Parameter (Abt.name) uebergeben (IN-Parameter)
      callStmt.setInt (1, peid);

	  System.out.println("TEST7a");
      // Stored Procedure aufrufen
      callStmt.execute();

	  System.out.println("TEST8a");
      // AusgabeParameter bestimmen
      outNum = callStmt.getInt(2);
    }
    catch (SQLException e)
    {
       System.out.println("TEST8b (catch)");
       System.out.println(e);
    }

	System.out.println("TEST9a");
    return(outNum);
  }
}
 

Bleiglanz

Gesperrter Benutzer
kannst du nicht lesen?

siehe meinen post oben

rückgabeparameter vorne, in der form "?=call methodenname"

hast du kein Buch zur Hand wo das drinsteht? Treiberdoku??
 

Energie

Mitglied
sorry Bleiglanz, lesen kann ich, aber ich verstehe (noch) nicht, was du meinst.
"?=call name_der_SQL_Prozedur"

Wenn du es bitte erklären könntest?
 

Bleiglanz

Gesperrter Benutzer
Code:
CallableStatement proc =
    connection.prepareCall("{ ? = call ichbinzufauldiedokuzulesen (?) }");
 

wikinger222

Mitglied
Hallo Bleiglanz, bei meinem oben geposteten Source entsteht in der Zeile 100 'callStmt.execute();' ein Fehler.
Und ich weiß nicht, wie ich diesen beseitigen kann.

Wenn mir da jemand einen Tip geben kann, wäre ich dankbar. Und hoffentlich einen Schritt weiter.

Gruß vom wikinger


PS: habe deinen letzten Post erst jetzt gelesen ...
 

wikinger222

Mitglied
Hallo, habe eine Lösung gefunden ...
Danke für deinen Tip.


("{ ? = call ichbinzufauldiedokuzulesen (?) }")

Hier das erste ?= wird nur belegt, wenn in der Prozedur mit Return zB ein int-Wert zurückgegeben wird.
Aber in meiner prozedur gibt es kein return.


Meine funktionierende Lösung:

Code:
import java.sql.*;              // JDBC classes 

class Projekt3
{
  public static void main(String argv[])
  {
    Connection con = null;
    // URL is jdbc:db2:dbname
    String url = "jdbc:odbc:SQLServer_Projekt";
				
    try
    {
      //System.out.println("TEST1a");

      // Datenbank-Treiber laden
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    }
    catch (Exception e)
    {
      System.out.println("\nError loading DB2 Driver...\n");
      e.printStackTrace();
    }


    try
    {
      //System.out.println("TEST2a");
      // Verbindung zur Datenbank aufbauen
      con = DriverManager.getConnection(url);   

      // Autocommit ausschalten
      con.setAutoCommit(false);                                           

int peid = 3;

      //System.out.println("TEST3a");
      // Anzahl der Projekte in der aktuellen Abteilung ermitteln
	  String Ergebnis = ProzedurAufruf(con, peid);
      //System.out.println("TEST10a");

	  System.out.println(Ergebnis);

      // Beenden der Transaktion und schliessen der Verbindung
      con.commit();
      con.close();
    }
    catch (Exception e)
    {
      try
      { 
        con.rollback();
        con.close();
      } 
      catch (Exception x) 
      { } 
      e.printStackTrace ();
    }
  }

  //--- Bestimmen der Anzahl der Projekte einer Abteilung ---
  public static String ProzedurAufruf(Connection con, int peid)
  {
  	//System.out.println("TEST4a");
   // int outNum = 0;
    String Ergebnis="_";
    try {

      // CALL-Anweisung fuer PROJECT_NUMBER vorbereiten
      //String sql = "{? = call Person_loeschen_rückgängig (?, ?)}"; //Das erste ?= wird belegt, wenn in der Prozedur mit Return zB ein int-Wert zurückgegeben wird.
	  String sql = "{call Person_loeschen_rückgängig (?, ?)}";
      CallableStatement callStmt = con.prepareCall(sql);
      //System.out.println("TEST5a");

      // Ausgabe-Parameter registrieren (OUT-Parameter)
      callStmt.registerOutParameter (1, Types.VARCHAR);


	  //System.out.println("TEST6a");
      // 2.Parameter (PEID) uebergeben (IN-Parameter)
      callStmt.setInt (2, peid);

	  //System.out.println("TEST7a");
      // Stored Procedure aufrufen
      callStmt.execute();

	  Ergebnis = callStmt.getString(1);

	  //System.out.println("TEST8a");
      // AusgabeParameter bestimmen
      //outNum = callStmt.getInt(1);
    }
    catch (SQLException e)
    {
       //System.out.println("TEST8b (catch)");
       System.out.println(e);
    }

	//System.out.println("TEST9a");
    return(Ergebnis);
    //ProzedurAufruf = Ergebnis;
  }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Zrebna Wie mittels Hibernate eine Join-Tabelle als eigene Java-Klasse erstellen? Datenbankprogrammierung 5
berserkerdq2 Was genau muss ich bei date eingeben, wenn ich in Java eine Spalte definiere, die date ist? Datenbankprogrammierung 1
B Wie kopieren ich eine Spalte von einer Tabelle in eine andere Tabelle SQLite durch java code? Datenbankprogrammierung 26
H suche eine Login system Bibliothek für Java Datenbankprogrammierung 5
Dimax MySQL Maximale Datenlänge für eine Spalte einer Datenbank in java ermitteln Datenbankprogrammierung 15
N Wie in Java Zugriffe und Updates auf eine Datenbank regeln ? Datenbankprogrammierung 1
C Mit jsp über Java eine DB Abfrage durchführen --> java.lang.ClassNotFoundException Datenbankprogrammierung 4
DStrohma MS SQL Server 2005 + Java: Immer nur eine aktive Verbindung erlaubt? Datenbankprogrammierung 5
R Connection Problem für eine externe DB mit Java (JDBC) Datenbankprogrammierung 9
D Werte mit java programm in eine Datenbank einlesen Datenbankprogrammierung 7
M Mit Java .txt-Datei in eine Datenbank einlesen lassen Datenbankprogrammierung 33
D Java auf eine Accessabfrage Datenbankprogrammierung 6
B Benutzeroberfläche für eine Oracle-DB mit JAVA erstellen Datenbankprogrammierung 4
Juelin Java und MySQL MariaDB - WHERE-Klausel Datenbankprogrammierung 17
P Reicht finally nicht um DB connections zu schließen in (altem) Java? Datenbankprogrammierung 4
A Java DB Server lässt sich nicht starten Datenbankprogrammierung 3
TheSkyRider MySQL Datenbankzuordnung in Verbindung mit Java Datenbankprogrammierung 7
U SQL Server mit Java verbinden Datenbankprogrammierung 5
D SQLite Datenbank in Android Studio (Java) durchsuchen Datenbankprogrammierung 3
TH260199 Java-Programm. Probleme bei der Umsetzung von einer Kontaktverwaltung. Datenbankprogrammierung 7
S Das printen der Ausgabe des Oracle-SQL-Statements in der Java-Eclipse-Konsole funktioniert nicht Datenbankprogrammierung 6
Zrebna Noobfrage: Konvertierung von SQL-Datentyp 'timestamp with time zone' in Java-Datentyp Datenbankprogrammierung 3
Zrebna Lediglich interne DB-Verbindungen (Connections) auslesen - mittels Java Datenbankprogrammierung 4
berserkerdq2 Was kann passieren, wenn ich in java einstelle, dass der Fremdschüssel ein Attribut ist, welches selber kein Primärschlüssel ist? Datenbankprogrammierung 4
berserkerdq2 Foreign key einstellen java Datenbankprogrammierung 4
nikgo Java SQL Ausgabe in Liste o.ä. abspeichern um mit dem Ergbnis "zu arbeiten"? Datenbankprogrammierung 5
S Datenbankprogrammierung in Java unter NetBeans 12 funktioniert nicht! Datenbankprogrammierung 1
Beginner22 Zugriff auf Datenbank aus Java über mariadb Datenbankprogrammierung 3
S ODBC Treiber in Java Editor einbinden Datenbankprogrammierung 3
H Oracle Resize eines Images in Java und Rückgabe des Image als BLOB an die Oracle Datebank Datenbankprogrammierung 14
H Java Class zum komprimieren von Jpeg-Images zum Einbinden in Oracle DB - Bild als blob (in und out) Datenbankprogrammierung 23
V SQLite java.sql.SQLException: no such column: Datenbankprogrammierung 18
D Daten aus der Firebase-Echtzeitdatenbank abfragen und in Variablen speichern (JAVA) Datenbankprogrammierung 0
Slaylen Java List Suchen mit eigenem Generischen Datentyp Datenbankprogrammierung 10
N java sql abfrage bestimmer Datumszeitraum Datenbankprogrammierung 9
D SQL Server Android App: 'int java.lang.String.length()' on a null object reference Datenbankprogrammierung 15
P USER Management in SQL übergreifend auf JAVA Programm Datenbankprogrammierung 1
H MySQL Verbindung Datenbank und Eclipse (Java) Datenbankprogrammierung 5
N Java Abfrage über GUI, Daten hinzufügen Datenbankprogrammierung 54
N Java, sql, jar, JDBC-Treiber in Classpath Datenbankprogrammierung 8
N java SQL JAR - Probleme Datenbankprogrammierung 18
N SQL Datenbank Spalte in Java Array Datenbankprogrammierung 2
N SQL-Statement Java Variable in SQL DB einfügen Datenbankprogrammierung 1
S Verbindung von einer Excel Datei zu Java Datenbankprogrammierung 2
T Java Spiel Daten speichern Datenbankprogrammierung 1
C Java MySQL check if value exists in database Datenbankprogrammierung 2
N Sqlite DB mit Java wird auf Linuxsystem nicht gefunden Datenbankprogrammierung 9
L Mybatis Datenbankabfragen in Java Datenbankprogrammierung 1
H MariaDB-Zugriff mittels Java SE Datenbankprogrammierung 3
J Java fügt Datensätze ein aber diese werden nicht richtig abgefragt Datenbankprogrammierung 3
S Datenbank MySQL und Java Datenbankprogrammierung 8
S Beispiel-Blockchain + GUI mit Java erstellen Datenbankprogrammierung 0
P Adressadministration mit Java und mySQL Datenbankprogrammierung 14
Trèfle SQLite SQL-Java Änderungen ausgeben Datenbankprogrammierung 1
A MySQL Select und Insert in Java Datenbankprogrammierung 15
C Derby/JavaDB Auf Variable aus Link in java server page zugreifen Datenbankprogrammierung 4
platofan23 MySQL Java Programm findet Treiber für mySQL auf Debian-Server nicht? Datenbankprogrammierung 11
F MySQL Einfügen von Datensätzen über Java Datenbankprogrammierung 8
B CSV in Java einbinden und Rechnung Datenbankprogrammierung 7
L Speicherverbrauch Java Anwendung mit einer Datenbankanbindung Datenbankprogrammierung 19
X MySQL Java hat keinen Zugriff auf MySQL Datenbankprogrammierung 9
L Java- Zähle alle Werte aus der Tabelle von aktiver Zelle Datenbankprogrammierung 12
S Datenbank/Java true/false Datenbankprogrammierung 8
S Java und SQL-Befehle Datenbankprogrammierung 6
L INSERT INTO Befehl in Java Datenbankprogrammierung 8
L Datenbankprogrammierung mit Java und phpMyAdmin Datenbankprogrammierung 4
Korvinus Java mit Cassandra verbinden Datenbankprogrammierung 18
M SQL-Statement SQL mit Java, Update Fehler Datenbankprogrammierung 1
D Installation von MariaDB in java und eclipse Datenbankprogrammierung 2
H Datenbank Export mit Java Datenbankprogrammierung 3
I MariaDB-Verbindung in JAVA Datenbankprogrammierung 11
L Oracle Datenbank über Java aufrufen Datenbankprogrammierung 29
W Daten in Java intern abfragen Datenbankprogrammierung 1
W MySQL Ausgabe von Datenbank in Java-App Datenbankprogrammierung 6
D Java Datenbanken Datenbankprogrammierung 1
Y H2 H2 foreign key in Spark Java ausgeben Datenbankprogrammierung 1
J Java Eclipse Hilfe beim Programmieren Datenbankprogrammierung 7
K Java Object mit Hibernate in MySQL abspeichern Datenbankprogrammierung 1
R Java-Befehle/Operatoren für copy&paste Datenbankprogrammierung 2
C Mit asm laufende Java Anwendung manipulieren Datenbankprogrammierung 1
W Wie liest dieses Java-Programm der Compiler? Datenbankprogrammierung 3
K Java Datenbank auslesen Datenbankprogrammierung 8
G MySQL Java Problem: Nullpointer Exception obwohl Daten vorhanden sind? Datenbankprogrammierung 2
K HSQLDB .sql Script Aufruf über Java Datenbankprogrammierung 7
B Java Programm und Dantebank umlagern Datenbankprogrammierung 25
B MySQL bplaced Datenbank mit Java ansprechen Datenbankprogrammierung 11
F MySQL Wie kann ich in Java Datensätze aus einer MySQL Datenbank gezielt in einzelne Arrays schreiben? Datenbankprogrammierung 9
F Java Objekte in einer Datenbank speichern Datenbankprogrammierung 4
perlenfischer1984 Java Objecte speichern mit Hibernate ? Datenbankprogrammierung 2
B Probleme mit java.sql.SQLException: ResultSet closed Datenbankprogrammierung 21
O PostgreSQL Java Row Index erhalten Datenbankprogrammierung 1
dzim Cassandra Cluster DB und der Java-Treiber Datenbankprogrammierung 1
H Entity in Java implementieren Datenbankprogrammierung 13
V Fehler beim Generierung Fehler beim Generierung java.lang.ArrayIndexOutOfBoundsException: 0 Datenbankprogrammierung 12
J mySQL- Java Application - Zugriff über Internet Datenbankprogrammierung 3
D MySQL Many to Many Tabellen in Java abbilden? Datenbankprogrammierung 4
P Datanbank für Java-Programmierung Datenbankprogrammierung 10
F Java SQLite Error Datenbankprogrammierung 19
F SQL Datenbank an Java Code anbinden Datenbankprogrammierung 5
J Java 8 und Microsoft Access Database-Dateien(mdb) Datenbankprogrammierung 1

Ähnliche Java Themen

Neue Themen


Oben