数据库中 停车信息表的设计建议
问题:如果实现车辆进场 自动记录进入时间,离开收费的时候,A.自动记录离开时间,B.计算停车时间(单位:小时)。
实现方法有两种:
方法一:由JAVA代码来获取时间:
由JAVA代码来获取时间,并以字符串的方式存储到数据库中。JAVA读取数据库中的字符串并做类型转换为日期型。计算两个日期的时间间隔。
操作建议如下:
1、--创建停车信息表
create table parkingInfo
(
id int auto_increment primary key, --序号作为主键
cno varchar(10) not null , --车牌编号
inDate varchar(20) not null, --停车时间,用字符串的方式来存储时间如 YYYY-MM-DD HH:MM:SS
outDate varchar(20) default null --离开时间,默认值为null。
)
2、JAVA代码中 用 Date 或 Calendar类 获取时间。
3、JAVA 代码中 计算时间间隔。(单位小时,四舍五入)
long betweenDays = (long)(( inDate - outDate) / (1000 * 60 * 60 ) + 0.5);
相关参考网址:http://blog.csdn.net/cynhafa/article/details/8053166
方法二:由SQL代码来获取时间:
1、 创建停车信息表
–创建停车信息表
create table parkingInfo
(
id int auto_increment primary key, --序号作为主键
cno int not null , --车牌编号,切记若有会员表,则作为外码要与会员表中车牌编号字段名称和类型一直。
inDate datetime not null, --停车时间,字段类型为datetime(时间日期型)不能为空
outDate datetime default null --离开时间,默认值为null
)
2、车辆停车(入库)的时候,只需要更新车牌号和入库时间即可。
例如 川A2546 停车:
insert into parkingInfo (cno,inDate) values ("川A2546",now())
注意:
A.now() 是SQL语句中的函数 表示获取当前的日期和时间。若只获取日期 则SQL函数为curdate().若只获取时间,则SQL函数为 curtime(). 可以用语句做测试 select curdate()
B.id 为自动增长字段,不需要插入值。 入库的时候不知道出库时间因此不能插入出库时间。
3、查询某个车辆是否出库。
分析:要考虑同一个车牌的车辆 多次进入停车场。则停车信息表中就会有该车牌的多条记录。
但是,只要该车辆离开停车场,那么离开时间就一定不会为空(null)。换句话说,若某个记录 只有进场时间,而离开时间为空(null)则一定说明 该车一定还没有离开。
因此有如下操作。
A、 查询某个车是否离开,例如查询 川A2546的是否离开
select * from parkingInfo where rno="川A2546” and outDate is null
B、查询目前停车场一共停了多少辆车。(占用了多少停车位)
select count(id) from parkingInfo where returnDate is null
说明 count 是SQL语句中的统计函数,表示统计有多少条记录。
C、查询某个车在停车场停过多少次(离开才算一次)
select count(id) from parkingInfo where rno="川A2546" and outDate is not null
4、车辆出库的时候 只需要更新没有出库的车辆信息的离开时间outDate就可以了
例如 川A2546出库
update parkingInfo set returnDate=now() where rno="川A2546" and outDate is null
5、统计某个车辆总共停车多少时间。SQL语句
例如,当川A2546出库时候 自动计算停了多少小时
select timestampdiff(“hour”,inDate,outDate) from parkingInfo where rno="川A2546"
说明 timestampdiff是SQL语句中计算时间间隔的函数。可以参考以下网址