NutzCN Logo
问答 mysql使用myisam引擎插入报错(事务相关)
发布于 2964天前 作者 laizhiming 1855 次浏览 复制 上一个帖子 下一个帖子
标签:

用的nutz-1.4.54.r2版本jar
用的是Infobright,基于mysql衍生的数据仓库。
有些业务表用的是BRIGHTHOUSE引擎(只查询、没有增删改,数据也只能load进去),其他表用的MyISAM引擎。

insert的时候报以下错误

Exception in thread "AWT-EventQueue-0" org.nutz.dao.DaoException: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: The storage engine for the table doesn't support SAVEPOINT

求解决办法
看了org.nutz.dao.impl.sql.run.NutDaoRunner的源码,里面有代码如下:

Transaction t = Trans.get();
        // 有事务
        if (null != t) {

我要是不需要事务呢,需要怎么配置,才能使得Trans.get()为null。
dao.js配置如下:

var ioc = {
	dataSource:{
		type:"org.apache.commons.dbcp.BasicDataSource",
		events:{
			depose:"close"
		},
		fields:{
			driverClassName:"com.mysql.jdbc.Driver",
			url:"jdbc:mysql://127.0.0.1:3306/dbtest?useUnicode=true&characterEncoding=gbk",
			username:"root",
			password:"12345"
		}
	},
	dao : {
		type : "org.nutz.dao.impl.NutDao",
		args : [{refer:'dataSource'}]
	}
	
}

谢谢!

5 回复

完全不需要事务?

@wendal 嗯,可以完全不需要,因为Infobright没有innodb引擎。
那样是不是那块代码注释掉就可以了?

@laizhiming 是的,nutdao有setRunner方法,设置为你修改过的版本就可以了

@wendal 好的,谢谢,我试试看。

@wendal 非常感谢,按照您的思路,解决了。以后若有问题再来请教。

原来在DaoRunner.java的注释里就有说明呢,都怪我,没仔细看源码。

如果你不喜欢事务模板的方式,你可以实现一个新的 DaoRunner 并通过 NutDao 的 setRunner 方法 设置进来,你的 Dao 的数据执行行为将焕然一新。 
添加回复
请先登陆
回到顶部