2014-11-24 141 views
0

我一直在尝试修复我的代码很长一段时间了。我找不到我在这里失踪的东西。我尝试了很多东西。替换名称,更改SELECT语句,例如,SELECT name ... FROM wage_java A " to "SELECT a.name ... FROM wage_java A。这似乎没有帮助我。 SQLDeveloper总是给我一个输出:http://i.imgur.com/jQQYLq2.png 希望有人能帮助我。列名无效(JDBC)

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; 

回答

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

应该

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

你”在您的查询中提供了一个别名emp_wage,所以如果您想使用列名,您需要在JDBC代码中使用别名。

退一步,我看不出为什么你想在这里使用Java存储过程而不是PL/SQL存储过程。如果你打算使用Java存储过程,我不明白你为什么要使用数组而不是标量值 - 你的PL/SQL包装器只是返回标量。

+0

谢谢。它像一个魅力。如果你想知道我为什么使用Java存储过程 - 这是一项任务。我会研究你正在谈论的标量值。无论如何,再次感谢你。 @Justin – 2014-11-24 05:44:49