动态加载的数据源 没有关联sql文件,在只有sql 和record 怎么查询

String sql="select * from userwhere id=#(id)";

Record record=new Record();

record.set("id", 266);

 源:Db.use("oracle_" + d_id);

怎么查询 ?

评论区

JFinal

2018-02-01 16:10

Db.use(...).find(sql, paras);

188085240

2018-02-01 16:18

SqlPara sqlPara = Db.use(……).getSqlPara()这里我没有key ,获取不了paras;直接这样Db.use("oracle_" + d_id).find("select * from t_cp_file where keyid=#p(keyid)",record); 就错了。。求教

JFinal

2018-02-01 16:22

where keyid=#(keyid) 这个是什么用法? 这个不是在模板中,而是在 java 源代码中

改为:where keyid=?

188085240

2018-02-01 16:22

我这个sql 在数据库存放的,而用户访问,只给对应参数;sql也是用户动态存进去的,能有什么办法来查询吗

JFinal

2018-02-01 16:30

实现一下 ISource 接口, 完成从数据库读取模板内容的功能:
public class DbSource implements ISource {
...
}

然后再实再一下 ISourceFactory,完成 DbSource 的构建:
public class DbSourceFactory implements ISourceFactory {
...
}

配置生效:
activeRecordPlugin.getEngine().setSourceFactory(new DbSourceFactory());

最后在 java 代码中就可以这样来用了:
SqlPara sp = getSqlPara(key);
Db.use(...).find(sp);

注意,以上只是示例,里头有些细节需要你自己完善,单步调试搞清楚原理

188085240

2018-02-01 16:34

波大大,可能我表述的不太清楚,问题是这样的:用户录了一个sql 存放在数据库了,在用的时候只传入参数,我能不能用模板来解决这个问题。
例:用户传入的sql是(模板sql):String sql="select * from user where id=#p(id)"; ,用的时候只有参数 xxx?id=6
那么我怎么来用模板来启动这个sql,肯定是不能用where id=? 因为不确定参数位置

188085240

2018-02-01 16:35

谢谢啦 我去试试,

JFinal

2018-02-01 16:41

@188085240 sql 管理的模板引擎默认用的 FileSource,这个就代表从文件中读取 sql 模板内容,而你可以模仿 FileSource 写一个 DbSource,改而从数据库读 sql 模板内容

做到上面的程度以后,剩下的用法就完全一样了

当然,你存放在数据库中的 sql 模板内容要与存放 sql 文件模板中的内容在格式上要一样,例如下面的格式:
#sql(...)
select * from ...
#end

看下 ActiveRecordPlugin 那一章的 sql 管理相关文档

热门反馈

扫码入社