“线程中的异常”;“主要”;java.sql.SQLException:缺少定义
“线程中的异常”;“主要”;java.sql.SQLException:缺少定义,java,oracle,jdbc,Java,Oracle,Jdbc,我已经完成了下面的示例JDBC程序,该程序检索用户详细信息。现在我感到惊讶的是,从同一个可调用语句中,我得到了相同输出参数索引的不同结果集。理想情况下,它应该返回相同的ResultSet对象 当我得到结果集时,我将光标-1移动到0 我正在使用从同一输出参数的另一个结果集检索数据 列名然后我得到以下异常 , 线程“main”java.sql.SQLException中的异常:缺少定义 有人知道为什么我们从callable语句中为相同的输出索引得到两个不同的结果集吗?根据CallableSateme
我已经完成了下面的示例JDBC程序,该程序检索用户详细信息。现在我感到惊讶的是,从同一个可调用语句中,我得到了相同输出参数索引的不同结果集。理想情况下,它应该返回相同的ResultSet对象
有人知道为什么我们从callable语句中为相同的输出索引得到两个不同的结果集吗?根据CallableSatement API,表达式应该是这样的
{call <procedure-name>[(<arg1>,<arg2>, ...)]}
您是否尝试过检查是否只有引用不同(可能是由于代理或脏状态,因为您在第二个`getObject()'之前执行了
next()
)?试一试
也允许使用特定于数据库的方法来执行存储过程(不需要使用JDBC
调用
-escape。是执行存储过程的Oracle方法吗结果为FALSE。另外,当尝试使用第二个引用获取fetch col时,您将得到异常。我编写代码时考虑到它们指向堆上的同一对象。但两个引用都指向不同的对象。ops,我的错误!异常被抛出,因为您正在读取相同的列两次(我在String username=resultUserDetails1.getString(COL\u NAME\u USER\u NAME);
!)上的错误。检查新代码并写入注释系统。输出结果
{call <procedure-name>[(<arg1>,<arg2>, ...)]}
CallableStatement callProcedure = connection.prepareCall("{call ADMIN_USER.Fetch_User_Details(?,?)}");
ResultSet resultUserDetails = (ResultSet) callProcedure.getObject(2);
ResultSet resultUserDetails1 = (ResultSet) callProcedure.getObject(2);
System.out.println(resultUserDetails);
System.out.println(resultUserDetails1);
// Check ref or object equality
System.out.println(resultUserDetails == resultUserDetails1);
System.out.println(resultUserDetails.equals(resultUserDetails1));
resultUserDetails.next();
String username = resultUserDetails.getString(COL_NAME_USER_NAME);
resultUserDetails1.next();
String username1 = resultUserDetails1.getString(COL_NAME_USER_NAME);
System.out.println(username);
System.out.println(username1);
// We read the same username or we are reading first and second username?
// If the are different probably resultset is the same, just with different
// reference
System.out.println(resultUserDetails.equals(resultUserDetails1));