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变量参数比较而已呀?
//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变量参数比较而已呀?
解决方案 »
- Scanner.nextLine()的java.util.NoSuchElementException异常如何解决
- 获取java对象的物理地址,然后使用本地接口操作对象可行吗?
- 关于public类
- 怎么设置JTextField的输入焦点
- 该下哪一个eclipse啊?
- 请问:我下了一个ibm公司的java package,如何才能让jdk知道存在这个包,从而不会编译出错?
- 求教:编程问题!
- 怎么暂停该应用程序?在线等.
- 请问,Factory模式在应该怎么理解,在什么情况下应该用它???
- 请问大家用什么开发java程序,我基本上学会了java语法,不知用什么来开发它?
- 使用SMSlib库发短信 出现No response from device错误~
- 高手
另外,是不是和字段的大小写有关系?
变量ksrq是String类型的
难道字符串类型不能直接比较吗?
我的日期时间是转为字符串类型存放在数据库中的,目的就是为了方便比较
目的就是为了方便比较
……………………对于你这句我十分无语,难道数据库的设计人员会设计一个很麻烦的日期类型吗?如果日期型真的那么不方便,谁还会用?ORACLE ,DB2的日期类型早就会删掉了,谁愿意用一个很麻烦的类型?
把日期存成字符型会有很多很多麻烦,会给程序带来很多隐患。
谢谢你的指导和批评.
我在建立表的时候,该date类型还是date类型的,并没有说这个类型不好
发送时间之所以使用19位的VARCHAR2类型,目的是用在页面上,用户输入的日期格式都是字符串获得的,所以我想不转化为date类型而可以直接比较
现在我数据库里面存放的是字符串格式的,比如: '20120426 12:30:59'
这样的字符串在java中居然比较失败,我很纳闷
长度是一致的:
打印出来
开始时间:20120101 00:00:00
结束时间:20120426 23:59:59
查询语句: SELECT * from VIP_SMGROUP WHERE SENDDT BETWEEN '20120101 00:00:00' AND '20120426 23:59:59'
记录条数0之际上,上面的在外面的环境中语句执行出来是有记录的
你说奇怪吗?但是我使用'20120426123059'这样的格式就可以比较了
如果javabean中直接用 new Date() 或者 new Timestamp(System.currentTimeMillis());对日期进行存储,存到数据库里的确很难看,你可以在存储之前格式化一下。最关键的是,无论你是否格式化,数据库都会正确的识日期,也可以正确的进行日期的比较
日期比较的时候,把后台传进来的参数直接转换成字符串 处理就行了,sql写成 XXXX where startDate >='2012 23:12:34'就行了,肯定比你用字符串方便多了。
where st=1 这代表st这个字段类型是 int型
where st='1' 这代表st这个字段类型是 varchar型
XXXX where startDate >='2012 23:12:34'看上去是在比较字符串,但是因为startDate 是timestamp类型的,它在比较的时候是,是按照时间类型比较的,你总不能写成 XXXX where startDate >=2012 23:12:34 吧,这么写它算是个神马类型?
where st=1 和 where st='1' 只是为了能够区分开当 值是纯数字的时候,你想比较的到底是数字,还是字符而已