2012-12-07 58 views
0

我在我的程序下面的SQL语句:Java的SQL语句不给出错误没有一个结果

"SELECT ANTAL_KALD,BESVARET_25_SEK,((BESVARET_25_SEK/nullif(ANTAL_KALD,0))*100) as answer_percent,TIDSPUNKT,QUEUE " 
       +"FROM KS_DRIFT.PERO_NKM_KØ_OVERSIGT WHERE TIDSPUNKT BETWEEN '"+start.getYear()+"-"+start.getMonthOfYear()+"-"+start.getDayOfMonth()+ 
       "' AND '"+end.getYear()+"-"+end.getMonthOfYear()+"-"+end.getDayOfMonth()+ 
       "'"; 

这并不给我任何结果集

测试System.out.println(rs.next())false

然而当我在我的数据库中写道如下:

select QUEUE, 
ANTAL_KALD, 
BESVARET_25_SEK, 
((BESVARET_25_SEK/nullif(ANTAL_KALD,0))*100) as answer_percent, 
TIDSPUNKT 
from KS_DRIFT.PERO_NKM_KØ_OVERSIGT Where TIDSPUNKT BETWEEN '2012-12-01' AND '2012-12-02' ORDER BY QUEUE 

我得到了结果..那么问题是什么?它没有给我一个错误或任何

+3

发布您的JDBC代码,为什么你使用简单的语句,使自己容易SQL注入?使用已准备好的状态 – PermGenError

+0

您的查询看起来不一样 –

+0

我会打印并确保开始和结束都是有效的日期。 – kosa

回答

1

假设startendjava.sql.Date对象(若没有请转换),我建议你用PreparedStatementsetDate()设置如下日期:

String sql = "SELECT ANTAL_KALD,BESVARET_25_SEK, "+ 
       " ((BESVARET_25_SEK/nullif(ANTAL_KALD,0))*100) as answer_percent, "+ 
       " TIDSPUNKT,QUEUE " 
       +"FROM KS_DRIFT.PERO_NKM_KØ_OVERSIGT "+ 
       " WHERE TIDSPUNKT BETWEEN ? AND ?"; 
    PreparedStatement qStmt=connection.prepareStatement(sql); 
    qStmt.setDate(1, start); 
    qStmt.setDate(1, end); 


    ResultSet rs = qStmt.executeQuery(); 

编辑:从乔达DateTime对象获得java.sql.Date,请做以下:

java.sql.Date startDate = new java.sql.Date(start.toDate().getTime()); 
    java.sql.Date endDate = new java.sql.Date(end.toDate().getTime()); 

在查询中使用这些转换的对象。

+0

开始和结束是乔达时间我可以通过那些没有转换? –

+0

@MarcRasmussen请参考最新的答案。 –