当我在SQL Developer中运行Person Pers_ID并且同一查询没有从Java JDBC连接返回任何值时,此查询返回记录,并为Person Pers_ID创建最小时间戳。
你能帮忙吗?
select PERS_ID,CODE,BEG_DTE
from PRD_HIST H
where PERS_ID='12345'
and CODE='ABC'
and CRTE_TSTP=(
select MIN(CRTE_TSTP)
from PRD_HIST S
where H.PERS_ID=S.PERS_ID
and PERS_ID='12345'
and EFCT_END_DTE is null
)
Java代码
public static List<String[]> getPersonwithMinCreateTSTP(final String PERS_ID,final String Category,final Connection connection){
final List<String[]> personRecords = new ArrayList<String[]>();
ResultSet resultSet = null;
Statement statement = null;
String PersID=null;
String ReportCode=null;
String effBegDate=null;
try{
statement = connection.createStatement();
final String query="select PERS_ID,CODE,EFCT_BEG_DTE from PRD_HIST H where PERS_ID='"+PERS_ID+"'and CODE='"+Category+"'and CRTE_TSTP=(select MIN(CRTE_TSTP) from PRD_HIST S where H.PERS_ID=S.PERS_ID and PERS_ID='"+PERS_ID+"' and EFCT_END_DTE is null)";
if (!statement.execute(query)) {
//print error
}
resultSet = statement.getResultSet();
while (resultSet.next()) {
PersID=resultSet.getString("PERS_ID");
ReportCode=resultSet.getString("CODE");
effBegDate=resultSet.getString("EFCT_BEG_DTE");
final String[] personDetails={PersID,ReportCode,effBegDate};
personRecords.add(personDetails);
}
} catch (SQLException sqle) {
CTLoggerUtil.logError(sqle.getMessage());
}finally{ // Finally is added to close the connection and resultset
try {
if (resultSet!=null) {
resultSet.close();
}if (statement!=null) {
statement.close();
}
} catch (SQLException e) {
//print error
}
}
return personRecords;
}
答案 0 :(得分:1)
从您的java程序中打印出您的SQL SELECT语句并将其粘贴到SQL * Plus中,看看发生了什么。您可能没有将变量设置为您认为的自己。事实上,当你打印SELECT语句而不运行它时,你很可能会看到错误 - 需要大写时的小写值等等。
如果您仍然看不到它,请在此处发布您的Java代码中的实际查询。
答案 1 :(得分:0)
我带着类似的问题来到这里 - 只是以为我会为其他人发布我的解决方案 - 我在插入后没有运行“COMMIT”(通过sqlplus) - doh!
答案 2 :(得分:0)
数据库表有记录但JDBC客户端无法检索记录。 表示JDBC客户端没有select权限。请在命令行上运行以下查询:
grant all on emp to hr;