Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“线程中的异常”;“主要”;java.sql.SQLException:缺少定义_Java_Oracle_Jdbc - Fatal编程技术网

“线程中的异常”;“主要”;java.sql.SQLException:缺少定义

“线程中的异常”;“主要”;java.sql.SQLException:缺少定义,java,oracle,jdbc,Java,Oracle,Jdbc,我已经完成了下面的示例JDBC程序,该程序检索用户详细信息。现在我感到惊讶的是,从同一个可调用语句中,我得到了相同输出参数索引的不同结果集。理想情况下,它应该返回相同的ResultSet对象 当我得到结果集时,我将光标-1移动到0 我正在使用从同一输出参数的另一个结果集检索数据 列名然后我得到以下异常 , 线程“main”java.sql.SQLException中的异常:缺少定义 有人知道为什么我们从callable语句中为相同的输出索引得到两个不同的结果集吗?根据CallableSateme


我已经完成了下面的示例JDBC程序,该程序检索用户详细信息。现在我感到惊讶的是,从同一个可调用语句中,我得到了相同输出参数索引的不同结果集。理想情况下,它应该返回相同的ResultSet对象

  • 当我得到结果集时,我将光标-1移动到0
  • 我正在使用从同一输出参数的另一个结果集检索数据 列名然后我得到以下异常
  • ,

    线程“main”java.sql.SQLException中的异常:缺少定义


    有人知道为什么我们从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));