程序错误:列索引无效

时间:2013-12-13 10:17:54

标签: java oracle stored-procedures

我应该做的是创建一个Java存储过程,然后从Java程序中调用它。

我在执行JAVA程序时遇到问题 - JDBCPiemers(下面)有1个参数(我需要输出String Nosaukums)。错误:“列名无效”。

我确信返回String Razotajs有问题,因为在定义的过程中只有1个参数,但是我不知道如何修复它。

调用ORACLE中的过程可以正常工作。

这是我在数据库中加载的存储过程。

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
    }  
  }
}

我用oracle创建了一个以下的包。

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;

这是我的Java程序,我在其中调用了该过程。但是我无法让它发挥作用。我收到错误:“列索引无效”

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."); }}

0 个答案:

没有答案