java web后端读取access数据库时日期出错的解决方法
环境:eclispse,数据库access,驱动ucanaccess 5.0.1
开始时用以下语句获取access里记录表的记录总数,语句并没有报错,结果也正确,但是后来传入的String sql改变之后,就报错,竟然自作主张把传入的日期字符串YYYY-MM-DD更改成Timestamp0('YYYY-MM-DD')这样的格式。因此ucanaccess报错:unknown token。
读取数据库的函数:
1 public int getTotal(String sql)throws Exception{ // 给定带count (*)的SQL字符串,返回记录总数量 2 this.openConnection(); 3 PreparedStatement ps = this.connection.prepareStatement(sql); 4 ResultSet rs = ps.executeQuery(); 5 rs.next(); 6 int count=rs.getInt(1); 7 this.closeConnection(); 8 return count; 9 }
传入的sql字符串:
String count = "select count (*) from 状态变更 where 工号='" + num + "'and (日期 between #" + start + "# and #" + end + "#)"; accessDao dao=new accessDao(); int number=dao.getTotal(count); System.out.println(number);
导致这个报错的原因不明。解决的方法是更改传入的SQL语句,用java.sql.Date.valueOf()方法将日期字符串处理一下。改成下面的样子:
String count = "select count (*) from 状态变更 where 工号='" + num + "'and (日期 between #" + java.sql.Date.valueOf(start) + "# and #" + java.sql.Date.valueOf(end) + "#)"; accessDao dao=new accessDao(); int number=dao.getTotal(count); System.out.println(number);
需要注意的是java.sql.Date.valueOf()这个方法只接收YYYY-MM-DD这样格式的日期字符串,不接收YYYY/MM/DD这样的日期字符串。
浙公网安备 33010602011771号