SolarWinds 네트워크 성능 데이터베이스 (MS SQL 2005)에서 데이터를 검색하려고하는데, Orion 데이터베이스 관리자에서 대화 형으로 완벽하게 작동하는 쿼리는 JDBC를 통해 실행할 때 행을 반환하지 않습니다. 어떤 아이디어?JDBC 쿼리는 행을 반환하지 않지만 대화 형 쿼리는 수행합니까?
쿼리 자체가 충격적입니다 (MS-SQL 날짜/시간 처리가 싫어서 날짜/시간별 조인에 대해 이와 같이 쿼리를 수행한다고 생각합니다). 잘라 내기 및 붙여 넣기 println에 의해 쿼리 출력을 붙여 넣을 수 있습니다. 그리고 그것은 잘 작동하지만 아직 내 프로그램에서는 아무런 결과도 반환하지 않습니다 (예외는 발생하지 않습니다).
JDBC는 쿼리를 구문 분석하지 않으므로 쿼리 복잡성은 중요하지 않다고 가정합니다. 단지 백엔드로 전달할 것입니다.
String qtext = new String("select rd.nodeid, rd.hr, rd.response, rd.loss, cd.cpu, cd.mem, bd.nomem, bd.smmiss, bd.mdmiss, bd.bgmiss, bd.lgmiss, bd.hgmiss" + " from" +
" (select nodeid, DATEPART(hh, DateTime) as hr, round(avg(AvgResponseTime), 0) as response, round(avg(PercentLoss), 0) as loss" +
" from ResponseTime_Detail" +
" where DateTime >= " + today + " and DateTime < " + tomorrow +
" group by nodeid, DATEPART(hh, DateTime)" +
") as rd" +
" left outer join" +
" (select nodeid, DATEPART(hh, DateTime) as hr, round(avg(AvgLoad), 0) as cpu, bound(avg(AvgPercentMemoryUsed), 0) as mem" +
" from CPULoad_Detail" +
" where DateTime >= " + today + " and DateTime < " + tomorrow +
" group by nodeid, DATEPART(hh, DateTime)" +
") as cd" +
" on rd.nodeid = cd.nodeid and rd.hr = cd.hr" +
" left outer join" +
" (select nodeid, DATEPART(hh, DateTime) as hr, round(avg(BufferNoMem), 0) as nomem, round(avg(BufferSmMiss), 0) as smmiss, round(avg(BufferSmMiss), 0) as mdmiss," +
" round(avg(BufferBgMiss), 0) as bgmiss, round(avg(BufferLgMiss), 0) as lgmiss, round(avg(BufferHgMiss), 0) as hgmiss" +
" from CiscoBuffers_Detail" +
" where DateTime >= " + today + " and DateTime < " + tomorrow +
" group by nodeid, DATEPART(hh, DateTime)" +
") as bd" +
" on rd.nodeid = bd.nodeid and rd.hr = bd.hr" +
" order by rd.nodeid, rd.hr;");
System.out.println("Query from hell = [" + qtext + "]");
st = sol.db.createStatement();
System.out.println("Created statement");
rs = st.executeQuery(qtext);
System.out.println("Executed statement");
while (rs.next()) {
....
}
귀하의 제안에 감사드립니다. 이 문제는 날짜/시간의 해석과 관련이 있다고 생각합니다. 제안 된대로 PreparedStatement를 사용하고 쿼리가 작동했습니다.
당신은 어떤 JDBC 문제를 배제하기 위해 다람쥐 SQL (http://squirrel-sql.sourceforge.net/)를 통해 실행을 시도 할 수 . –
지금 작동하면 가장 가까운 대답을 수락하는 것이 가장 좋습니다. 귀하의 경우 PreparedStatement 사용을 제안한 답변을 수락해야합니다. 그렇지 않으면, 사람들은 당신에게 대답을하려고하지만, 당신은 이미 그 문제를 해결했습니다. 시간을 절약하십시오. –