Aufrufen der gespeicherten Java-Prozedur in Java-Programm

Was ich tun sollte, ist, eine gespeicherte Java-Prozedur zu erstellen und sie später aus einem Java-Programm heraus aufzurufen.

Ich habe Probleme beim Ausführen des JAVA-Programms - JDBCPiemers (unten) mit 1 Parameter (ich muss den String Nosaukums rausholen). Fehler: "Ungültiger Spaltenname".

Das Aufrufen der Prozedur in ORACLE funktioniert einwandfrei.

Dies ist meine gespeicherte Prozedur, die ich in die Datenbank geladen habe.

import java.sql.*;
import java.io.*;

public class BeerBeer {

  public static void getBreweryInfo (int Raz_ID) 
    throws SQLException 
    { String sql = 
      "SELECT Nosaukums FROM Alus_razotaji WHERE ID = ?";//vaicajums
    try { Connection conn = DriverManager.getConnection("jdbc:default:connection:"); // Izveidojam savienojumu ar datubāzi
      PreparedStatement apstmt = conn.prepareStatement(sql);
      apstmt.setInt(1, Raz_ID); 
      ResultSet rset = apstmt.executeQuery();// SQL vaicājuma izpildīšana

      rset.close();
      apstmt.close(); //Savienojuma aizvēršana
      } 
    catch (SQLException e) {System.err.println(e.getMessage()); //Kļūdu izvadīsana
    }  
  }
}

Ich habe folgendes Paket mit Orakel erstellt.

CREATE OR REPLACE PACKAGE BeerBeer AS
PROCEDURE getBreweryInfo(Raz_ID number);
END BeerBeer;

CREATE OR REPLACE PACKAGE BODY BeerBeer AS
PROCEDURE getBreweryInfo(Raz_ID number) AS Language Java
NAME 'BeerBeer.getBreweryInfo(int)';
END BeerBeer;

Dies ist mein Java-Programm, in dem ich die Prozedur aufrufe. Ich kann es jedoch nicht zum Laufen bringen. Ich erhalte die Fehlermeldung: "Ungültiger Spaltenindex"

package client;

import java.sql.*;

public class JDBCPiemers {
    // Norādam URL draiverim un datu bāzei
    static final String JDBC_DRIVER = "oracle.jdbc.OracleDriver";
    static final String DB_URL = "jdbc:oracle:thin:@localhost:1521:ORCL";
    // Izveidojam norādi uz datu bāzes lietotājvārdu un paroli
    static final String USER = "SYSTEM";
    static final String PASS = "asdasd";
    private String sql;

    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Connection conn = null;
        CallableStatement stmt = null;
        try {
            //Reģistrējam JDBC draiveri
            Class.forName("oracle.jdbc.driver.OracleDriver");
            System.out.println("Izveidojam savienojumu ar datubazi ...");
            conn = DriverManager.getConnection(DB_URL, USER, PASS);
            // Vaicājuma izveide
            System.out.println("Komandas veidosana...");
            String SQL = "{CALL BeerBeer.getBreweryInfo (?)}";
            stmt = conn.prepareCall(SQL);
            int Raz_ID = 4;
            stmt.setInt(1, Raz_ID);
            stmt.registerOutParameter(2, java.sql.Types.VARCHAR);
            System.out.println("Izpildam JAVA glabajamo proceduru ...");
            // Vaicājuma izpilde
            stmt.execute();
            //Izgustam Alus_razotaja nosaukumu ar getXXX metodi.
            String Razotajs = stmt.getString(2);
            System.out.println("Izvadam rezultatus ...");
            System.out.println("Identifikatoram NR. " +Raz_ID + " atbilst Alus_Razotajs ar nosaukumu  '" + Razotajs + "'" );            
            stmt.close();
            conn.close(); }
            catch(SQLException se) {
                //Kludu apstrade JDBC
                se.printStackTrace(); }
            catch(Exception e) {
                //Kludu apstrade klasei Class.forName
                e.printStackTrace(); }
            finally {
                // Bloks, lai aizvērtu resursus
                try {if(stmt!=null)
                stmt.close(); }
            catch(SQLException se2) {} 
                try {if(conn!=null)
                conn.close(); }
                catch(SQLException se) {se.printStackTrace(); }
                //finally bloka beigas
            } // try 
            System.out.println("Darbu beidzam."); }}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage