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这样的日期字符串。

posted @ 2021-03-26 11:31  wwwzgy  阅读(282)  评论(0)    收藏  举报