最近因为公司框架的限制只能使用jdbc,不能使用hibernate,所以只能使用jdbc进行关联查询,很久没搞java了,忘记了很多,
在这里对不懂的、遗忘的java内容做个纯粹的记录,好了,闲话不多说,方法大概如下:
一对多关联查询:
1.查询主表的所有记录List.
2.遍历List,查询出所有的从表记录xqList,并在内部遍历xqList,讲xqList的记录add到List里面即可。
String sql = "select * from T_WDRZ t where t.name=? and t.rq like ? and t.is_deleted='0'";
List<Wdrz> list = getBaseDBDAO().queryForList(sql, Wdrz.class, name, rq);
if (list != null && list.size() > 0) {
for (Wdrz wdrz : list) {
String xqSql = "select * from T_WDRZ_XQ t where t.rzid = ?";
List<WdrzXq> xqList = getBaseDBDAO().queryForList(xqSql,WdrzXq.class,wdrz.getId());
if (xqList != null && xqList.size() > 0) {
for (WdrzXq wdrzXq : xqList) {
wdrz.getWdrzXq().add(wdrzXq);
}
}
}
}
注:Wdrz实体类中有个List<WdrzXq>集合。
java开发常见问题:
1.java.sql.SQLException: 无效的列索引
“无效的列索引”其实是个低级的错误,原因无非几个:
1、sql串的?号数目和提供的变量数目不一致:
例如:jdbcTemplate.update(sql, new Object[] {newState,oldState});
如果sql里面有1个?号,Object[]送了2个,就会报错。
2、sql串里的?号书写不正确
英文?和中文?有时难以区分。
3、sql串的?号用''括了起来。 把单引号去掉即可。
例如:sql=”UPDATE abc SET abc.name=’?’ WHERE abc.id=’?’”;
把”去掉就可以了。
4,遇到这种情况select*from user where info like %?%;
虽然这是sql的写法,但是在jdbc 中需要改成 select*from user where info like ?;
如ps.setString(“%”+value+“%”);
2.使用jdbc需要注意:
1).代码中sql语句 ,注意点:
? 不能用单引号 括起来,否则会报 无效的列索引.?
字段中有下划线 需要加下划线.is_deleted
2).实体类中:
数据库字段有下划线的,实体类中都采用驼峰命名法,如: private String isDeleted.
如果没有下划线,在实体类中都使用小写,如下:
数据库字段 实体类字段
IS_DELETED isDeleted
ISDELETED isdeleted
不管是jdbc还是hibernate,都是这个规则。
安卓前端也是这样的,同时安卓前端和后台实体类要一致,否则取不到值。
注意:如果使用的是hibernate进行查询,则在代码中写sql语句,可以不用加下划线,如:isDeleted.