i++

2016-07-19 11:02

问题我自己改好了。我来反遗是因为我不想该JFINAL的源代码。我有代码洁癖。如果可以把修改的代码放到我项目的ext包里,就为所谓,但这个情况不行。要改DbPro.java。在public int[] batchSave(List modelList, int batchSize) 里改,或在 private int[] batch(Config config, Connection conn, String sql, String columns, List list, int batchSize)里改。希望下个版本能改好。

i++

2016-07-19 10:01

@JFinal
List userList = new ArrayList();
userList.add(new User().set("userid","seq_user_id.nextval").set("username","jfinal"));
userList.add(new User().set("userid","seq_user_id.nextval").set("username","redis"));
Db.batchSave(userList ,2);试了一样的错。User类我没有用javaBean的set get(不喜欢,就是烦用那些get,set才用JFINAL的,但现在jfinal,又开始加入了baseBean,哎)
再有如你所说。要是DAO.set共享了。那只有一个User对象了。那也不会报错的。只会对数据库产生两个username=redis的记录。但我这个举例确实不该这么用

i++

2016-07-19 09:36

例如:oracle表名:t_user pk:userid 自增序列名:seq_user_id 对应model:User
字段有:userid username
List userList = new ArrayList();
userList.add(User.DAO.set("userid","seq_user_id.nextval").set("username","jfinal"));
userList.add(User.DAO.set("userid","seq_user_id.nextval").set("username","redis"));
Db.batchSave(userList ,2);
////////////////////////
public class User extends Model {
private static final long serialVersionUID = 4827606126715970198L;
public static final User DAO = new User();
}

报错:
INFO - Sql: insert into t_user(username, userid) values(?, seq_user_id.nextval)
ERROR - com.jfinal.plugin.activerecord.ActiveRecordException: java.sql.SQLException: 无效的列索引
at com.jfinal.plugin.activerecord.DbPro.batch(DbPro.java:981)
at com.jfinal.plugin.activerecord.DbPro.batchSave(DbPro.java:1068)
at com.jfinal.plugin.activerecord.Db.batchSave(Db.java:546)

Sql语句只有一个问号。但batchSave(DbPro.java:1068)中columns="userid,username"
有两个字段,最终
pst.setObject(j + 1, value);两次。
是我哪里用法不对?
@JFinal