codefollower

Results 201 comments of codefollower
trafficstars

我知道原因,肯定是 mybatis plus 在得到 PreparedStatement 后用 setObject(1, java.time.LocalDateTime.now()) 这种方式执行了,lealone 没有把 LocalDateTime 自动转成 java.sql.Timestamp,而是变成一个字节数组了,所以就错了。 java.time.LocalDateTime 是比较新的日期时间类。

lealone 目前不支持 java.time.LocalDateTime 这类 JSR 310 日期时间API

mybatis plus 我不知道是否可以给具体的数据库方言配置不同的参数,毕竟不是所有数据库都要支持各种 jdk 新的类的, 框架为了兼容各种数据库就得自己做适配,比如数据库不支持 JSR 310,那框架就用 setString、setLong 替换 setObject 即可。

> > lealone 目前不支持 java.time.LocalDateTime 这类 JSR 310 日期时间API > > 那我先研究一下mybatis 看怎么解决 mybatis-3.5.11\src\main\java\org\apache\ibatis\type 里面有 LocalDateTypeHandler、LocalDateTimeTypeHandler、LocalTimeTypeHandler 为不同的数据库微调一下,使用不同的 TypeHandler,把里面的 setObject 换成 setString 或 setLong 即可,getObject 也要改一下。

它可能想省事直接让数据库的 jdbc 驱动在 setObject 里自己去转换,mysql、postgresql 新一点的 jdbc 驱动在 setObject 方法内部就对 java.time 包中的各种类做了转换,还是挺繁琐的。

我看了一下 h2 数据库的新版本,它也支持 java.time 的类了,技术难度不大,就是很繁琐,这是它的其中一个工具类 [JSR310Utils](https://github.com/h2database/h2database/blob/master/h2/src/main/org/h2/util/JSR310Utils.java) lealone 的后续小版本再看看要不要支持 java.time,目前大多数应用还是用 java.sql 中的日期时间 api 多一些。

确认一下进程有没有杀死

出现那个异常就是还有进程在锁住文件,进程还没有杀死。

可以在命令行中用 -port 指定新的端口,或者在 lealone.yaml 配置文件中修改 port 参数。

mysql 的一些 sql 语句细节还没有全部实现,最近的工作是支持 enum 类型,下一步会把 dml/ddl 语句逐条过一遍,查缺补漏,把一些语法细节都解析了,能实现的就实现,不需要实现的解析完语法后就直接忽略,这样就不会报告语法错误了。