NutzCN Logo
问答 拼接sql拿不到结果集。
发布于 2780天前 作者 qq_30fdbc0f 1551 次浏览 复制 上一个帖子 下一个帖子
标签:

代码如下:运行正常但结果集为空,生成的sql直接复制到数据库工具中可以查出结果,求解:
public QueryResult getCoursewareList(int curPage, int pageSize, String courseId, String... type){
String sqlStr = "select a.ID,a.FILE_ID,a.TITLE,b.EXTENSION,b.FILE_SIZE,b.PLAY_URL,b.DOWNLOAD_URL from COURSE_COURSEWARE_NEW a,RESOURCES_MAPPING_NEW b where a.FILE_ID = b.FILE_ID and a.COURSE_ID = b.COURSE_ID and a.COURSE_ID = @courseId";
if(!Lang.isEmpty(type)){
sqlStr = sqlStr + " and b.EXTENSION in(@type)";
}
sqlStr = sqlStr + " order by b.REG_DATE";
Sql sql = Sqls.create(sqlStr);
sql.params().set("courseId", courseId);
if(!Lang.isEmpty(type)){
sql.params().set("type", type);
}
sql.setCallback(Sqls.callback.records());
Pager pager = this.nutDao.createPager(curPage, pageSize);
pager.setRecordCount((int) Daos.queryCount(this.nutDao, sql.toString()));
sql.setPager(pager);
this.nutDao.execute(sql);
return new QueryResult(sql.getList(Record.class), pager);
}

8 回复

type传数组

来自炫酷的 NutzCN

@wendal 传String[] type也不行,但
if(!Lang.isEmpty(type)){
String types = "";
for(String s: type){
types = types + "'" + s + "',";
}
types = types.substring(0, types.length() - 1);
sqlStr = sqlStr + " and b.EXTENSION in(" + types + ")";


就可以拿到。最后执行的sql和传数组的一模一样啊。

@qq_30fdbc0f 不一样的

@type是按参数的方式传,并不是直接拼入sql

来自炫酷的 NutzCN

@wendal 直接拼入可以拿到结果集,但按参数的方式传拿不到结果集,两者生成的sql都一样,都能在数据库软件中查出正确的结果。求求救

@wendal 要看就得看输出的prepStatment sql,带问号那条sql

如果type对应的位置只有一个问号,那么就是当成单一参数

解决方法:

低版本的nutz,改成$type,以变量方式拼入sql,但需要注意防止注入

如果是高版本的nutz,type为数组时,问号的数量跟type数组长度会一致,结果理应正确

来自炫酷的 NutzCN

@wendal 版本:Nutz1.r.57,第二条语句是传数组生成的,复制到数据库工具中正确运行并得到正确结果,但程序中却得不到结果集:
select a.ID,a.FILE_ID,a.TITLE,b.EXTENSION,b.FILE_SIZE,b.PLAY_URL,b.DOWNLOAD_URL from COURSE_COURSEWARE_NEW a,RESOURCES_MAPPING_NEW b where a.FILE_ID = b.FILE_ID and a.COURSE_ID = b.COURSE_ID and a.COURSE_ID = ? and b.EXTENSION in(?,?) order by b.REG_DATE;
select a.ID,a.FILE_ID,a.TITLE,b.EXTENSION,b.FILE_SIZE,b.PLAY_URL,b.DOWNLOAD_URL from COURSE_COURSEWARE_NEW a,RESOURCES_MAPPING_NEW b where a.FILE_ID = b.FILE_ID and a.COURSE_ID = b.COURSE_ID and a.COURSE_ID = '2010-2011-1-70000212-0' and b.EXTENSION in('txt','pdf') order by b.REG_DATE;

@qq_30fdbc0f 数据带空格之类的问题吧,试试jdbc api去查, 走dao.run方法

来自炫酷的 NutzCN

@wendal 好,谢谢wendal,我试试去

添加回复
请先登陆
回到顶部