JFinal 在sqlite执行建表语句不成功

JFinal在Sqlite执行建表语句不成功,用原始的jdbc可以成功,不知道是什么问题

评论区

JFinal

2018-06-12 10:09

代码、 sql 、异常信息一样都没有, 神仙也难猜了

songsong123

2018-06-12 14:15

@JFinal 没有异常信息,控制台能打印出执行的SQL,但是数据库就是没有表

songsong123

2018-06-12 14:16

@JFinal String sql="DROP TABLE IF EXISTS `file_info`;"
+"CREATE TABLE 'file_info' ("
+"'id' INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"
+"'name' TEXT(200),'path' TEXT(200));";

JFinal

2018-06-12 15:25

@songsong123 去掉 sql 后面的分号, 每次只执行一条 sql
Db.update("DROP TABLE IF EXISTS `file_info`");

String sql = "CREATE TABLE 'file_info' ("
+"'id' INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"
+"'name' TEXT(200),'path' TEXT(200))");

Db.update(sql);

JDBC 可以执行,而 jfinal 下不能执行,有可能是 druid 这类第三方对中间有分号的语句可能有所保护,防止 sql 注入

还有一个办法是用纯 JDBC 的方式获取一个 DataSource,然后将这个对象传入 ActiveRecordPlugin(dataSource), 这样的话中间就没有第三方了

jfinal 数据库操作在本质上就是 JDBC

JFinal

2018-06-12 15:25

@songsong123 记得搞定后回来分享一下

songsong123

2018-06-13 08:32

@JFinal 分开执行也一样没有效果,纯jdbc有表建起来,怀疑是druid屏蔽了DDL语句,不知道怎么配置

JFinal

2018-06-13 09:25

@songsong123 用纯 JDBC 的 API 去创建一个 DataSource 对象,然后传给 ActiveRecordPlugin 构造方法,用这种方式去创建 ActiveRecordPlugin 对象

这样就跳过了 druid 了,应该可以

热门反馈

扫码入社