发表于: 2018-03-03 21:58:17

1 608


今天做了什么:

main方法之前做的控制台有结果,但是数据库并没有显示记录。

询问师兄后发现我的项目还没有整合spring,而我又没加commit();于是尽管控制台报信息,而且看上去id是逐次递增,但是其实是回滚的结果。

回滚结果上看,即事务递交但是没有commit,数据库在插入记录之后,随程序结束,随即删除之前插入记录。

而后加入了commit();

package com.ev;

import com.ev.pojo.Students;
import com.ev.service.StudentsService;

import java.util.Date;//sql.Date 要区分

public class Main {

public static void main(String args[]) {

StudentsService studentsService = new StudentsService();

       Students students = new Students(new Date(), new Date(), "张三", "male","22","212122212","后端","20181231","东西大学","JAVA-3802","http://www.jnshu.xiabiande.com/1/1","老大最帅", "meiyouren");

       System.out.println(students.toString());

       try {
studentsService.insertStudents(students);
       }catch(Exception ex) {
ex.printStackTrace();
       }

try {
studentsService.deleteStudents(2L);
       }catch (Exception ex) {
ex.printStackTrace();
       }

try {
System.out.println(studentsService.findStudentsById(1L));
       }catch (Exception ex){
ex.printStackTrace();
       }

try {
System.out.println(studentsService.findStudentsByName("刘伟"));
       } catch (Exception ex){
ex.printStackTrace();
       }

try {
studentsService.updateStudents(students);
       }catch (Exception ex){
ex.printStackTrace();
       }
}

}

之后再执行main方法,数据库中也有了记录。

上面的warning一堆查过说是java9的问题,不太影响。


commit()之后close()方法我放在了service层方法try块后的finally中,

12之前是sql语句导入,35开始才是真正写进去了,

之前都是断层回滚。

但是也看出来create_at,update_at两个列参数变成了毫秒数,因为我main方法中insert数据时直接用构造方法插入date(),而实体类中对其getTime()。

而业务逻辑中,这两列应该都是不会被用户接触到,应该是我们在事务进行时的记录。

有几个构想:

1.构建sql语句时,用sql的now()存为bigint格式,就跟之前一样。

2.在构造函数中对Date类型的入参进行转换,变成日期格式存数为Long。

3.参数表中进行操作,取值时就取当前时间。

查了下java的时间。。。感觉因该用DateFormat再用SimpleDateFormat格式化。


1、java.util.Date
表示特定的瞬间,可以精确到毫秒。从 JDK 1.1 开始,应该使用 Calendar 类实现日期和时间字段之间转换,使用 DateFormat 类来格式化和分析日期字符串。Date 中的把日期解释为年、月、日、小时、分钟和秒值的方法已废弃。

2、java.text.DateFormat(抽象类)
DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并分析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期 -> 文本)、分析(文本-> 日期)和标准化。将日期表示为 Date 对象,或者表示为从 GMT(格林尼治标准时间)1970 年,1 月 1 日 00:00:00 这一刻开始的毫秒数。

3、java.text.SimpleDateFormat(DateFormat的直接子类)
SimpleDateFormat 是一个以与语言环境相关的方式来格式化和分析日期的具体类。它允许进行格式化(日期 -> 文本)、分析(文本 -> 日期)和规范化。

SimpleDateFormat 使得可以选择任何用户定义的日期-时间格式的模式。但是,仍然建议通过 DateFormat 中的 getTimeInstance、getDateInstance 或 getDateTimeInstance 来新的创建日期-时间格式化程序。

4、java.util.Calendar(抽象类)
Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。

与其他语言环境敏感类一样,Calendar 提供了一个类方法 getInstance,以获得此类型的一个通用的对象。Calendar 的 getInstance 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化。

5、java.util.GregorianCalendar(Calendar的直接子类)
GregorianCalendar 是 Calendar 的一个具体子类,提供了世界上大多数国家使用的标准日历系统。

GregorianCalendar 是一种混合日历,在单一间断性的支持下同时支持儒略历和格里高利日历系统,在默认情况下,它对应格里高利日历创立时的格里高利历日期(某些国家是在 1582 年 10 月 15 日创立,在其他国家要晚一些)。可由调用方通过调用 setGregorianChange() 来更改起始日期。


听师兄讲过还有唯一索引可能出现的某exception,这些异常的细分都还有问题。

mybatis和其他连接池的结合也有问题。

跟spring整合后,由spring管理应该就好了。


明天打算做什么:

解决create_at,update_at插入问题,

解决日期的输入问题。

建立索引,插入100w数据。


问题:

见上。


收获:

算是可以处理简单的事务了。


返回列表 返回列表
评论

    分享到