sql代码块:
create or replace procedure emp_pro(pro_no in number,pro_name out varchar2) is
begin
    select ename into pro_name from emp where empno = pro_no;
end;Java代码块:
package com.ora;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
public class TestBook {
public static void main(String[] args) {
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:csdn";
String user = "scott";
String password = "tiger";
try {
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, user, password);
CallableStatement cs = conn.prepareCall("{call emp_pro(?,?)");
cs.setInt(1, 7900);
cs.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR);
cs.execute();
String name = cs.getString(2);
System.out.println("雇员编号7900的名字:" + name);
cs.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}抛出的异常:
java.lang.StringIndexOutOfBoundsException: String index out of range: 18
at java.lang.String.charAt(Unknown Source)
at oracle.jdbc.driver.OracleSql.handleODBC(OracleSql.java:1138)
at oracle.jdbc.driver.OracleSql.parse(OracleSql.java:1053)
at oracle.jdbc.driver.OracleSql.getSql(OracleSql.java:310)
at oracle.jdbc.driver.OracleSql.getSqlBytes(OracleSql.java:604)
at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:177)
at oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:950)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1222)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3387)
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3488)
at oracle.jdbc.driver.OracleCallableStatement.execute(OracleCallableStatement.java:3857)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.execut(OraclePreparedStatementWrapper.java:1374)
at com.ora.TestBook.main(TestBook.java:17)请问这是何故?请示下?

解决方案 »

  1.   

    //这句少了一个大括号
    CallableStatement cs = conn.prepareCall("{call emp_pro(?,?)}");
      

  2.   


    --注意看异常提示
    java.lang.StringIndexOutOfBoundsException: String index out of range: 18
    /*
    StringIndexOutOfBoundsException
     public StringIndexOutOfBoundsException(int index)
    用一个参数指定的非法索引创建一新的 StringIndexOutOfBoundsException类
    */