sql >> Databáze >  >> RDS >> Oracle

Volání uložené procedury Java v programu Java

Chcete-li vrátit hodnotu, potřebujete, aby to byla funkce, nikoli procedura:

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

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

Pak se váš balíček změní na:

CREATE OR REPLACE PACKAGE BODY BeerBeer AS
  FUNCTION getBreweryInfo(Raz_ID number) RETURN varchar2 AS Language Java
  NAME 'BeerBeer.getBreweryInfo(int) return java.lang.String';
END BeerBeer;

A vy tomu říkáte něco jako:

        String SQL = "{CALL ? = BeerBeer.getBreweryInfo (?)}";
        stmt = conn.prepareCall(SQL);
        int Raz_ID = 4;
        stmt.registerOutParameter(1, java.sql.Types.VARCHAR);
        stmt.setInt(2, Raz_ID);
        System.out.println("Izpildam JAVA glabajamo proceduru ...");
        // Vaicājuma izpilde
        stmt.execute();
        //Izgustam Alus_razotaja nosaukumu ar getXXX metodi.
        String Razotajs = stmt.getString(1);

Všimněte si, že parametr out je nyní index 1, protože je to návrat z funkce, takže hodnota, kterou předáte, je nyní index 2. Vše samozřejmě netestováno...



  1. Jaký je nejlepší způsob implementace Polymorphic Association na SQL Server?

  2. ekvivalent `show create table` v Oracle SQL

  3. MySQL - Výběr dat z více tabulek se stejnou strukturou, ale s různými daty

  4. Jak přečíslovat primární index