Java 结果集不包含行吗?

Java 结果集不包含行吗?,java,sql,database,oracle,jdbc,Java,Sql,Database,Oracle,Jdbc,我提出以下问题 SELECT A.FIRST_NAME AS EMP_FIRST_NAME, A.LAST_NAME AS EMP_LAST_NAME, A.EMAIL_ID AS EMP_EMAIL_ID, A.EMPLOYEE_TYPE AS EMP_EMPLOYEE_TYPE, A.SPECIAL_INSTRUCTIONS AS EMP_SPECIAL_INSTRUCTIONS, B.FIRST_NAME AS HR_FIRST_NAME

我提出以下问题

SELECT
    A.FIRST_NAME AS EMP_FIRST_NAME,
    A.LAST_NAME AS EMP_LAST_NAME, 
    A.EMAIL_ID AS EMP_EMAIL_ID,
    A.EMPLOYEE_TYPE AS EMP_EMPLOYEE_TYPE,
    A.SPECIAL_INSTRUCTIONS AS EMP_SPECIAL_INSTRUCTIONS, 
    B.FIRST_NAME AS HR_FIRST_NAME,
    B.LAST_NAME AS HR_LAST_NAME,
    B.FAX_NUMBER AS HR_FAX_NUMBER,  
    B.EMAIL_ID AS HR_EMAIL_ID 
FROM
    HR_EMPLOYEE A ,
    HR_REP B
WHERE
    A.HR_REP= B.REP_ID
    AND 
    A.USER_ID='FOSTER'
当我在Java中使用

ResultSet rs = statement.executeQuery(query);
我应该正好排一排

所以我这么做

if(rs.next())
{
  rs.getString("xxx");
  rs.getString("yyy");
} 
但是
rs.next()
始终返回false,表示未提取任何行

我复制同一个查询并在Oracle的编辑器中运行,然后得到输出

所以这个查询是正确的。为什么会这样

请参阅Oracle中的输出

注意:

当我触发一个表查询,即no join时,
rs.next()
返回true。 我在Java工作了很长时间,但从未遇到过这样的问题。请帮忙

更新:

完整代码:

@Component
@Service
public class GeneralUserImp implements GeneralUserService{

    private final Logger log = LoggerFactory.getLogger(this.getClass());

    @Reference
    ConnectionProvider connectionProvider;

    public Employee getEmployee(String userId) throws Exception{
        Connection connection=null;
        Statement statement=null;
        ResultSet resultSet= null;

        try{
            connection = connectionProvider.getConnection();
            log.info("****************** connection ::>> "+connection);

            statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
            log.info("****************** statement ::>> "+statement);

            String query = "SELECT A.FIRST_NAME AS EMP_FIRST_NAME,A.LAST_NAME AS EMP_LAST_NAME, A.EMAIL_ID AS EMP_EMAIL_ID,A.EMPLOYEE_TYPE AS EMP_EMPLOYEE_TYPE,A.SPECIAL_INSTRUCTIONS AS EMP_SPECIAL_INSTRUCTIONS," + 
                " B.FIRST_NAME AS HR_FIRST_NAME,B.LAST_NAME AS HR_LAST_NAME,B.FAX_NUMBER AS HR_FAX_NUMBER,  B.EMAIL_ID AS HR_EMAIL_ID"+
                " FROM HR_EMPLOYEE A ,HR_REP B WHERE  A.HR_REP= B.REP_ID AND A.USER_ID='FOSTER'"; // This doesn't work 

            //String query = "SELECT SPECIAL_INSTRUCTIONS FROM HR_EMPLOYEE  WHERE  USER_ID='"+userId+"'"; this works

            log.info("The Query ::"+query);
            resultSet   = statement.executeQuery(query);

        log.info("****************************************) ");         


            if(resultSet.next())
            {
                log.info("-------------------FINE-----------------------------");
                Employee employee= new Employee();              
                employee.setFirstName(resultSet.getString("EMP_FIRST_NAME"));
                employee.setLastName(resultSet.getString("EMP_LAST_NAME"));
                employee.setUserId(resultSet.getString("USER_ID"));
                employee.setSpecialInstructions(resultSet.getString("SPECIAL_INSTRUCTIONS"));
                employee.setEmailId(resultSet.getString("EMP_EMAIL_ID"));
                employee.setEmployeeType(resultSet.getInt("EMP_EMPLOYEE_TYPE"));
                employee.setOfferLetter(null);
                employee.setNonCompeteLetter(null); // Need to be changed later
                employee.setSpecialInstructions(resultSet.getString("EMP_SPECIAL_INSTRUCTIONS"));

                HRRepresentative representative = new HRRepresentative();
                representative.setFirstName(resultSet.getString("HR_FIRST_NAME"));
                representative.setLastName(resultSet.getString("HR_LAST_NAME"));
                representative.setEmailId(resultSet.getString("HR_EMAIL_ID"));
                representative.setFaxNumber(resultSet.getString("HR_FAX_NUMBER"));

                employee.setHrRepresentative(representative);

                return employee;

            }
            log.info("---------------Nothing in ResultSet------------------------------------");
            return null;


        }
        catch(Exception exception)
        {
            log.info("---------------Catch ---------------------------------");
            log.error("VideoJet Exception::", exception );
            throw exception;
        }
        finally
        {
            log.info("--------------------FINAKLYY----------------------------");
            DatabaseUtils.closeConnections(connection, statement, resultSet);
        }


    }

问题在于您的结果集。可更新的CONCUR\u

根据oracle的结果集限制

要生成可更新的结果集,请执行以下操作:

查询只能从单个表中选择,不能包含任何 加入操作

部分:结果集限制和降级规则


您可以删除该标志以继续。

我发现了错误@桑吉夫,你错了。我在可更新的结果集中激发了连接,它起作用了

这实际上是我的错误

我用蟾蜍的编辑器修改了B.REP_ID,但我没有提交。因此,当我在编辑器中启动查询时,它显示了修改后的结果(但仍然没有提交数据)。但当我使用JavaJDBC启动查询时,它显示不存在,因为我没有提交。当我提交时,实际的数据库得到了反映,然后我启动了JavaQuerty(JDBC),它工作了

我们所学到的总是 但是您可以在Java中的可更新状态中触发多个连接查询
@Sanjeev您所说的适用于非常古老的JDBC规范。

您能否共享完整的java代码(特别是包含查询本身的部分)?如果查询是正确的,那么要查找的逻辑位置就是连接问题。您是否连接到正确的服务器?到正确的数据库?连接是否对要读取的表具有权限?是的,先生,我使用正确的凭据连接到正确的数据库。。所有其他服务和控制器使用相同的连接提供程序,并且工作正常。此外,如果触发非联接查询,则会得到一个不为空的结果集。多个表查询出现问题。。。!!是否尝试在from子句中使用内部联接?类似于从HR_员工A加入HR_代表B在A.HR_代表=B.REP_实际上我对加入没有很强的了解。困扰我的一件事是,我在Oracle中复制粘贴了相同的查询,并且运行良好。那么为什么Java的结果集会出现问题呢?我试试内部连接。如果你能帮我加入旅馆,我将不胜感激。听起来不错,但不管用。在此之前,我使用了一个可更新的结果集进行连接,我已经成功了。这是我的另一个服务类发出的查询,它工作正常
resultSet=statement.executeQuery(“选择A.USER_ID,A.FIRST_NAME作为EMP_FIRST_NAME,A.LAST_NAME作为EMP_LAST_NAME,”+“B.FIRST_NAME作为HR_FIRST_NAME,B.LAST_NAME作为HR_LAST_NAME,A.EMAIL_ID作为EMP_EMAIL_ID,”+“A.EMPLOYEE_键入作为EMP_EMP_EMPLOYEE_TYPE从HR_EMPLOYEE A、HR_REP B中键入,其中A.HR_REP=B.REP=B.REP ID和A.EMPLOYEE!=4”)