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”)代码>