使用DBUtils反射虚拟实体(实际数据库没有相对应的表)

来源:互联网 发布:阿里云 图像识别 api 编辑:程序博客网 时间:2024/04/29 04:05

使用dbutils反射虚拟实体(实际数据库没有相对应的表)

比较复杂的SQL语句:

String sql="select scope_unit.name as '单元',SUM(t_question.successNum)/SUM(t_question.num)*100 as '正确率%',SUM(t_question.num) as '完成题目次数' "+ "from t_question,t_scope as scope_section,t_scope as scope_unit "+ "where t_question.scope_pk_scope_id=scope_section.pk_scope_id "+ ......";

创建domain包:

/** * 各单元正确率分析的虚拟表 * @author Nan * */public class NameRateCount {private String ScopeName;//名称private String accuracy;//正确率private String answerCount;//答题次数public String getAnswerCount() {return answerCount;}public void setAnswerCount(String answerCount) {this.answerCount = answerCount;}public String getAccuracy() {return accuracy;}public void setAccuracy(String accuracy) {this.accuracy = accuracy;}public String getScopeName() {return ScopeName;}public void setScopeName(String scopeName) {ScopeName = scopeName;}@Overridepublic String toString() {return "NameRateCount [ScopeName=" + ScopeName + ", accuracy="+ accuracy + ", answerCount=" + answerCount + "]";}}

其中id为年级、教材版本以及科目所对应的唯一标识,可以查出该年级的版本科目的所有单元的名称,正确率,答题次数

List<NameRateCount> lists=getForList(sql, id);

其中getForList核心代码如下:

        /** * 返回 T 所对应的 List  * @param sql * @param args * @return */public List<T> getForList(String sql, Object ... args){try {connection = JdbcUtils.getConnection();//System.out.println(connection);return queryRunner.query(connection, sql, new BeanListHandler<>(clazz), args); } catch (Exception e) {e.printStackTrace();} finally{JdbcUtils.releaseConnection(connection);}return null;}
然而运行结果却报空指针异常:


而且查出来的lists的值为空,然而却有长度。即有查询记录,但值为空。



以上证明,虚拟表的字段的值没有被插入,但实际上有尝试执行插入操作,只不过没成功。

原因可能是sql语句别名与虚拟实体的字段名称不相匹配造成的,试改之:

String sql="select scope_unit.name as ScopeName,SUM(t_question.successNum)/SUM(t_question.num)*100 asaccuracy,SUM(t_question.num) asanswerCount ......“

成功!


myeclise每次修改代码,都要重新发布,好麻烦?

答:Window-Show View-Service





0 0