Java程序和Oracle数据库调用相同的SQL查询语句,结果却不同
2013-04-19 14:57
633 查看
package org.programming.student; import java.sql.*; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; public class StudentsManagerImpl implements StudentsManager { public ArrayList<Student> getStudentList(java.util.Date beginDate, java.util.Date endDate) { String sql = "select stu_id, class_name, c.class_id, stu_name, sex, birthday, contactTel, address"+ " from students stu join class c on stu.class_id = c.class_id "+ "where stu.birthday between ? and ?"; Connection conn = null; PreparedStatement psmt = null; ResultSet res = null; ArrayList<Student> stu_list = new ArrayList<Student>(); try { conn = DBUtil.getConnection(); psmt = conn.prepareStatement(sql); psmt.setDate(1, new java.sql.Date(beginDate.getTime())); psmt.setDate(2, new java.sql.Date(endDate.getTime())); res = psmt.executeQuery(); while(res.next()) { Student student = new Student(); student.setStudentId(res.getString("stu_id")); student.setName(res.getString("stu_name")); student.setSex(res.getString("sex")); student.setBirthday(res.getDate("birthday")); student.setContactTel(res.getString("contacttel")); student.setAddress(res.getString("address")); Clas clas = new Clas(); clas.setClassName(res.getString("class_name")); clas.setClassId(res.getString("class_id")); student.setClas(clas); stu_list.add(student); } } catch(SQLException e) { e.printStackTrace(); } return stu_list; } public static void main(String[] args) throws ParseException { StudentsManagerImpl stu_manager = new StudentsManagerImpl(); ArrayList<Student> list = stu_manager.getStudentList(new SimpleDateFormat("yyyy-mm-dd").parse("1988-01-01"), new SimpleDateFormat("yyyy-mm-dd").parse("1992-11-2")); System.out.println("符合条件的学生人数为:"+list.size()); for(Iterator<Student> iterator = list.iterator();iterator.hasNext();) { Student stu = iterator.next(); System.out.println(stu.getName()); } } }
在控制台输出的结果:
students整张表:
select * from students order by birthday;
调用和上述Java程序中相同的SQL语句:
alter session set nls_date_format = 'yyyy-mm-dd';
select stu_id, class_name, c.class_id, stu_name, sex, birthday, contactTel, address from students stu join class c on stu.class_id = c.class_id where stu.birthday between '1988-01-01' and '1992-11-2';
上述SQL语句在数据库中所得结果:
在使用用java程序调用时,满足条件的学生人数只有5个,而在Oracle数据库中调用相同的SQL语句却得到6个满足条件的学生(这个是正确的),对比一下,是少了学生“旺财”,这搞的我很郁闷。后来将我的问题发到论坛后,经过大家的指点,最终发现了我问题所在:方法SimpleDateFormat()的日期模式写错了,在类SimpleDateFormat的日期模式中,Month in year应该是大写“M”,而我写成了小写,这样一来就成了Minute
in hour。小小的书写错误,竟造成了整个业务逻辑上的错误,真是“差之毫厘谬以千里”啊!大家要引以为戒。
另外,为什么在这种错误之下还能查询出看似不赖的结果,由于我水平有限的很,自己百思不得其解。还希望大家能多多指教!
相关文章推荐
- 在项目中,多个方法会调用相同的sql语句,怎么解决各个方法的不同sql查询,解决冲突。
- java jdbc调用oracle的函数或过程返回SQL语句查询的结果集
- 用一条SQL语句查询一张表得到不同条件的多个结果
- Sql语句中,Contains与Like查询结果不相同的问题
- 同一条SQL语句在程序查询的结果和数据库查询的结果不一致
- MySQL的一个一条SQL语句查询所有不同种类产品的一部分结果实例的SQL语句
- SQL SERVER 2000 的企业管理器与查询分析器对于同一SQL语句有两个不同查询结果!
- 可以方便的将SQL语句的执行结果显示成表格结果的JAVA类,可以用于不同的数据显示
- sql语句里有中文字符,JDBC查询不出来结果
- php如何判断SQL语句的查询结果是否为空?
- oracel sql语句:查询时间段中开始时间与结束时间相同的数据
- JAVA中ResultSet的getInt获取SQL查询结果中的Int数值
- oracle数据库SQL查询语句练习三
- C语言学习4: 函数返回值与传入参数,关于函数值传递和类型隐性转换,变量不同的作用域,static变量,多文件编译例如两个C文件,显示函数调用语句跳转,递归,斐波那契数列,多文件编译相同变量的问题。
- SQL一次性查询一个字段不同条件下的统计结果
- 项目中sql语句使用max函数,但查询结果与需求不符!
- Access和sql查询语句的不同;Delphi中的双引号是没有的。
- oracle数据库查询日期sql语句(范例)、向已经建好的表格中添加一列属性并向该列添加数值、删除某一列的数据(一整列)
- Delphi在程序中“拼SQL语句”获取结果
- Oracle数据库 —— SQL之select语句(4) 多表查询