Oracle SQLException捕获到无效的列索引
有人能帮我解决这个错误吗:我尝试了不同的方法来解决这个错误,但没有成功 这里是一个包和过程以及一个java文件,我从中调用该过程。 我第一次尝试调用程序。我以前从未使用过程序 所以如果有人能告诉我出了什么问题,我将不胜感激Oracle SQLException捕获到无效的列索引,oracle,stored-procedures,cursor,jdbc-odbc,callable-statement,Oracle,Stored Procedures,Cursor,Jdbc Odbc,Callable Statement,有人能帮我解决这个错误吗:我尝试了不同的方法来解决这个错误,但没有成功 这里是一个包和过程以及一个java文件,我从中调用该过程。 我第一次尝试调用程序。我以前从未使用过程序 所以如果有人能告诉我出了什么问题,我将不胜感激 package.sql create or replace package proj2 as procedure show_students; procedure show_courses; end;
package.sql
create or replace package proj2 as
procedure show_students;
procedure show_courses;
end;
/
procedures.sql
set serveroutput on;
create or replace package body proj2 as
procedure show_courses is
cursor co1 is
select * from courses;
co1_rec co1%rowtype;
begin
if(not co1%isopen)then
open co1;
end if;
fetch co1 into co1_rec;
while co1%found loop
dbms_output.put_line(co1_rec.dept_code||','||co1_rec.course#||','||co1_rec.title);
fetch co1 into co1_rec;
end loop;
close co1;
end show_courses;
end;
mydemo2.java
import java.sql.*;
import oracle.jdbc.*;
import java.math.*;
import java.io.*;
import java.awt.*;
import oracle.jdbc.pool.OracleDataSource;
public class mydemo2 {
public static void main (String args []) throws SQLException {
try
{
//Connection to Oracle server
OracleDataSource ds = new oracle.jdbc.pool.OracleDataSource();
ds.setURL("jdbc:oracle:thin:@grouchoIII.cc.binghamton.edu:1521:ACAD111");
Connection conn = ds.getConnection("uname", "password");
OracleResultSet rs = null;
// CallableStatement cs = conn.prepareCall("{call proj2.show_students}");
OracleCallableStatement cs = (OracleCallableStatement)conn.prepareCall("{call proj2.show_courses}");
cs.registerOutParameter(1, OracleTypes.CURSOR);
cs.executeQuery();
rs = (OracleResultSet)cs.getObject(1);
// System.out.println("hi");
while(rs.next())
{
// String dept_code = rs.getString("dept_code");
// int course_no = rs.getInt("course#");
// String title = rs.getString("title");
// System.out.format(dept_code+","+course_no+","+title);
// System.out.println("success");
System.out.println(rs.getString(1)); }
//close the result set, statement, and the connection
rs.close();
cs.close();
conn.close();
}
catch (SQLException ex) { System.out.println ("\n*** SQLException caught ***\n" + ex.getMessage());}
catch (Exception e) {System.out.println ("\n*** other Exception caught ***\n");}
}
}
javac mydemo2.java
java mydemo2
*** SQLException caught ***
Invalid column index
您正在调用一个不返回任何游标的存储过程,但java代码假定该过程调用正在打开一个游标进行迭代。还要注意,DBMS_输出在服务器上缓冲,通常不会通过JDBC调用看到。下面是一个示例,说明您正在尝试执行的操作在发布本文之前,我已经看到了这个示例。您是说我必须在过程中添加游标作为out参数吗?是的,这就是我要说的。你能给我一个例子吗?我应该在我的过程中做些什么更改,这样我就可以通过迭代游标从过程中调用它了?我包含的链接中有一个完整的例子。