1 听波总说是ojdbc 这个jar包版本问题 我以前用的ojdbc14 我换成6了之后 还是存在这个问题 所以我重写了jfinal源码里面的方法 也就是第二种方法
2 下面是我重写的类
package com.syhz.model;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;
import com.jfinal.kit.StrKit;
import com.jfinal.plugin.activerecord.generator.MetaBuilder;
import com.jfinal.plugin.activerecord.generator.TableMeta;
/**
* 重写jfinal生成主键规则
* @author String
*
*/
public class MyMetaBuilder extends MetaBuilder{
public MyMetaBuilder(DataSource dataSource) {
super(dataSource);
// TODO Auto-generated constructor stub
}
@Override
public void buildPrimaryKey(TableMeta tableMeta) throws SQLException{
ResultSet rs = dbMeta.getPrimaryKeys(conn.getCatalog(), null, tableMeta.name);
String primaryKey = "";
int index = 0;
while (rs.next()) {
/*if (index++ > 0) {
primaryKey += ",";
}*/
primaryKey = rs.getString("COLUMN_NAME");
}
if (StrKit.isBlank(primaryKey)) {
throw new RuntimeException("primaryKey of table "" + tableMeta.name + "" required by active record pattern");
}
tableMeta.primaryKey = primaryKey;
rs.close();
}
}
使用的话是在 2 generator.setMetaBuilder(new MyMetaBuilder(dataSource2)); 用自己重写的MyMetaBuilder
之所以标记1 2 是要先用1来获取 因为按照常理来说 自己都会单独写一个连接数据库的方法 如果用自己写的方法 在这里直接用的话 会报错 说 数据已经连接 也就是重复连接的意思 所以我是这么做的