import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import oracle.jdbc.OracleCallableStatement;
import oracle.jdbc.OraclePreparedStatement;
import oracle.jdbc.OracleTypes;
import oracle.jdbc.oracore.OracleType;
public class JDBCTest {
public static void main(String[] args) {
Connection conn = null;
CallableStatement call = null;
ResultSet rs = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = " jdbc:oracle:thin:@172.18.9.24:1521:ORCL";
String user = "scott";
String password = "tiger";
conn = DriverManager.getConnection(url, user, password);
String sql = "{ call queryempinfo(?,?,?,?)}";
call = conn.prepareCall(sql);
call.setInt("eno",7934);
call.registerOutParameter("pname", OracleTypes.VARCHAR);
call.registerOutParameter("psal", OracleTypes.NUMBER);
call.registerOutParameter("pjob", OracleTypes.VARCHAR);
call.execute();
//取出结果
String name = call.getString("pname");
double sal = call.getDouble("psal");
String job = call.getString(4);//该处用了下标取值
System.out.println(name + "\t" + sal + "\t" + job);
} catch (Exception e) {
e.printStackTrace();
}finally {
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(call!=null){
try {
call.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
原因:
所以,当我们在给过程设置参数信息或取值的时候,不能够同时使用下标和名称来指定对应参数。