日期:2014-05-20  浏览次数:20744 次

非常纳闷的SQL语句在oracle中执行失败,不知道为什么?
queryStr = " select * from VIP_SMGROUP where SENDDT>='"+ksrq+"' AND SENDDT <='"+jsrq+"' ";
//queryStr1 = " select * from VIP_SMGROUP ";

DBConnManager db = new DBConnManager();
Connection conn = db.getConnection("Oracle");
Statement stmt = null;
ResultSet rs = null;

  try {
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
ArrayList<SMGroupLog> smgrouplogquerylist = new ArrayList<SMGroupLog>();

while (rs.next()) {
System.out.println("有记录");  
SMGroupLog smgrouplog = new SMGroupLog();
smgrouplog.setSerial_num(rs.getString(1));
System.out.println("姓名"+rs.getString(2));  
smgrouplogquerylist.add(smgrouplog);
}
  System.out.println("记录条数"+smgrouplogquerylist.size());  

} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

非常妖怪,字段"SENDDT"是VARCHAR2类型,变量是String类型的
使用变量queryStr的SQL语句,就是执行结果为空,而语句queryStr1对应的语句正常,实际上queryStr的SQL语句是有记录的
其语句在oracle中执行正常有结果

是什么缘故呢?一个string变量参数比较而已呀?

------解决方案--------------------
日期格式不对吧
SQL code

"select * from VIP_SMGROUP where SENDDT between to_date('"+ksrq+"','yyyy-mm-dd') and to_date('"+jsrq+"','yyyy-mm-dd')"

------解决方案--------------------
探讨

谢谢你的指导和批评.
我在建立表的时候,该date类型还是date类型的,并没有说这个类型不好
发送时间之所以使用19位的VARCHAR2类型,目的是用在页面上,用户输入的日期格式都是字符串获得的,所以我想不转化为date类型而可以直接比较
现在我数据库里面存放的是字符串格式的,比如: '20120426 12:30:59'
这样的字符串在java中居然比较失败,我很纳闷

------解决方案--------------------
探讨

"日期比较的时候,把后台传进来的参数直接转换成字符串 处理就行了,sql写成 XXXX where startDate >='2012 23:12:34'就行了,肯定比你用字符串方便多了。"

你这还是使用字符串比较呀,我就是这样比较的,失败了

我们单位涉及到大量的数据,日期都是使用varchar2来设计的

你说出现了一堆问题,比较上的,什么情况会出现什么问题?