簡體   English   中英

無效的列名(JDBC)

[英]Invalid column name (JDBC)

我已經嘗試修復我的代碼了一段時間了。 我找不到我在這里想念的東西。 我已經嘗試了很多東西。 替換名稱,將SELECT語句從例如SELECT name ... FROM wage_java A " to "SELECT a.name ... FROM wage_java A 那似乎對我沒有幫助。 SQLDeveloper總是給我一個輸出: http : //i.imgur.com/jQQYLq2.png希望有人可以幫助我。

import java.sql.*;

public class WageK{
    public static void getWage (int w_id, java.lang.String[] w_name, 
    java.lang.String[] w_lname, int[] w_wage, int[] w_mnr, int[] wages_calc)
  throws SQLException {
        try{
          Connection conn = DriverManager.getConnection("jdbc:default:connection:"); 
          PreparedStatement pstmt = null;  
          ResultSet rs = null;

          java.lang.String sql = "Select a.name, a.last_name, a.wage, a.month_nr, 
          Value(A).wages_calc() as emp_wage " + "From wage_java A " + "Where A.ID = ?";
          pstmt = conn.prepareStatement(sql);
          pstmt.setInt(1, w_id); 
          rs = pstmt.executeQuery();

          if (rs.next()) { 
              w_name[0] = rs.getString("name");
              w_lname[0] = rs.getString("last_name");
              w_wage[0] = rs.getInt("wage");
              w_mnr[0] = rs.getInt("month_nr");
              wages_calc[0] = rs.getInt("wages_calc");
          } else {
              w_name[0] = "0";
              w_lname[0] = "0";
              w_wage[0] = 0;
              w_mnr[0] = 0;
              wages_calc[0] = 0;        
          }
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        }
    }
}

PL / SQL包裝器:

Create or replace procedure getWage (w_id IN NUMBER, nm OUT VARCHAR2, 
lnm OUT VARCHAR2, wg OUT NUMBER, mnth OUT NUMBER, 
wages_calc OUT NUMBER) AS language Java name 'WageK.getWage
(int, java.lang.String[],java.lang.String[],int[], int[], int[])';

嘗試獲取數據:

set serveroutput ON;
call  DBMS_JAVA.SET_OUTPUT(2000);

declare
nm VARCHAR2(20);
lnm VARCHAR2(20);
wg Number;
mnth Number;
wages_calc Number;

BEGIN
  getWage(1, nm, lnm, wg, mnth, wages_calc);
  dbms_output.Put_line('Wage of employees:');
  dbms_output.Put_line('  ' || wages_calc);
end;
wages_calc[0] = rs.getInt("wages_calc");

應該

wages_calc[0] = rs.getInt("emp_wage");

您在查詢中提供了別名emp_wage ,因此,如果要使用列名,則需要在JDBC代碼中使用別名。

退后一步,我看不到您為什么要在這里使用Java存儲過程而不是PL / SQL存儲過程。 而且,如果您要使用Java存儲過程,那么我不明白為什么要使用數組而不是標量值-PL / SQL包裝程序僅返回標量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM