发表于: 2016-03-06 10:28:25
1 4645
1.测试insertStudent方法,能否往mysql中插入数据。
以前建立的表student中id和age的数据类型均为int(11),且create_at和update_at的数据类型均为datetime,将这四个字段的数据类型均改为INTEGER UNSIGNED,原因是Long类型表示时间简洁且通用,而java中的Long类型对应mysql数据库中的INTEGER UNSIGNED类型。修改命令:“alter table student change id id INTEGER UNSIGNED;”。但是经过反复测试,我发现:如果将数据库中的create_at、update_at这两个字段的数据类型设置为INTEGER UNSIGNED,那么就不能把时间精确到秒存储进去,例如使用函数unix_timestamp("2013-03-15 12:12:23")*1000把时间转化为长整型后,存入数据类型为int(10) unsigned的create_at中会越界,变为4294967295。所以我在数据库中还是以DATETIME的数据类型存放时间。
关于java中Date类型、Long类型和String类型之间的转换,参考:http://www.blogjava.net/algz/articles/324727.html
测试通过,要注意的地方有几点:
(1)在StudentMapper.xml中写insert语句时,应该注意“jdbcType=”后面的数据类型是java数据类型,而不是写mysql中的数据类型,但是所写的java数据类型应该和mysql中的数据类型对应起来,如create_at在数据库中是DATETIME类型,那么就应该写jdbcType=TIMESTAMP,java和mysql数据类型的具体对应关系,参考链接:http://blog.csdn.net/haofeng82/article/details/34857991
(2)在TestStudent.java中,插入语句结束后,应该提交事务,否则数据库中的数据内容将不发生变化。即在sm.insertStudent(s3);语句后应该加上sqlSession.commit();
2.在caojunqi_1数据库中新建一张表student_2,测试当create_at和update_at均为BIGINT时,是否能够存储精确到秒的时间。
在maven项目中改动的地方:
(1)Student.java中的属性数据类型和方法的参数类型和返回值类型;
(2)TestStudent.java中有修改;
(3)StudentMapper.xml中有修改。
测试通过,时间“2007-12-01 23:12:45”被转化成1196521965后存入数据库。
总结:
1.要修改student表中的某个字段的某个值,命令:“update student set create_at = now() where id = 1;”;如果要为某个datetime类型的字段赋值特定时间,可用如下命令:“update student set create_at = str_to_date('2010~11~11 12.09.08','%Y~%m~%d %k.%i.%s') where id = 2;”,命令中的str_to_date函数中的格式并非固定,是可以变的,例如变为:str_to_date('2011-12-13 20:23:32','%Y-%m-%d %k:%i:%s'),也是可以的。
2.在mysql 数据库中,“2013-03-15 12:12:23”转化为列为长整型的函数:select unix_timestamp("2013-03-15 12:12:23")*1000,这里要注意,mysql数据库中的长整型,比java中的长整型少了秒后面的毫秒数,所以要乘以1000,这样只有几毫秒之差;在mysql数据库中,“1252999488000”(java中的long型数据)转化为日期:select from_unixtime(1252999488),在这里注意,要将最后三位去掉。
3.mysql删除一条记录的命令:delete from student where id = 0;
4.Eclipse中注释语句快捷键: 取消注释 Ctrl+\ 注释 Ctrl+/
疑问:
1.设置mysql中的字段数据类型为INTEGER UNSIGNED后,会自动变为int(10) unsigned,它最大能储存10位长的数字,超过10位就会变成4294967295,4294967295是2的32次方减1,那如果我的电脑系统是64位的,会不会变成2的64次方减1?
2.我在现在只能做到这种程度:如果数据库中的create_at字段是BIGINT,那么我在Student.java类中必须把create_at设置为Long类型,二者必须对应,才能在StudentMapper.xml中写对应的插入语句。如果我想这样做:在数据库中create_at字段是BIGINT类型,而在Student.java类中create_at是TIMESTAMP类型,然后在StudentMapper.xml中写插入语句时,先对create_at进行数据类型转换,再插入,可不可以,毕竟我们有unix_timestamp("2013-03-15 12:12:23")这个函数?
评论