发帖    主题    评论    推荐    标签    作者    订阅    查搜    注册   登陆   关注
 
面向对象 设计模式 领域驱动设计 企业架构 框架 开发教程 微服务 大数据 扩展性 并发编程 事件驱动 分布式 CQRS

请教petstore中GenericCatalogDAO中的一个问题!

2002-11-05 10:52
赞助商链接

请教petstore中GenericCatalogDAO中的一个问题!


private PreparedStatement buildSQLStatement(Connection connection, Statement sqlStatement, String[] parameterValues)
throws SQLException {
StringBuffer buffer = new StringBuffer();
int totalParameterValueNb = parameterValues != null ? parameterValues.length : 0;


for (int i = 0; i < sqlStatement.fragments.length; i++) {


if (sqlStatement.fragments[i].variableOccurrence) {
while (totalParameterValueNb > 0 && totalParameterValueNb >= sqlStatement.fragments[i].parameterNumber) {
buffer.append(sqlStatement.fragments[i].text);
totalParameterValueNb -= sqlStatement.fragments[i].parameterNumber;
}
} else {
buffer.append(sqlStatement.fragments[i].text);
totalParameterValueNb -= sqlStatement.fragments[i].parameterNumber;
}
}

if (totalParameterValueNb > 0) {
System.err.println("Number of values doesn't match number of parameters: " +
totalParameterValueNb + "/" + parameterValues.length);
}



PreparedStatement statement = connection.prepareStatement(buffer.toString(),ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
if (parameterValues != null) {
for (int i = 0; i < parameterValues.length; i++) {
statement.setString(i + 1, parameterValues[i]);
}
}
return statement;
}

以上方法中的以下代码段
for (int i = 0; i < sqlStatement.fragments.length; i++) {


if (sqlStatement.fragments[i].variableOccurrence) {
while (totalParameterValueNb > 0 && totalParameterValueNb >= sqlStatement.fragments[i].parameterNumber) {
buffer.append(sqlStatement.fragments[i].text);
totalParameterValueNb -= sqlStatement.fragments[i].parameterNumber;
}
} else {
buffer.append(sqlStatement.fragments[i].text);
totalParameterValueNb -= sqlStatement.fragments[i].parameterNumber;
}
}

去掉while 循环语句功能会发生变化吗?
在SQL的.xml配置文件中每个sqlfragment标记中的VARIABLE的含义是什么(如下)?
<SQLStatement method="SEARCH_ITEMS">
<SQLFragment parameterNb="4">
select catid, a.productid, name, a.itemid, b.image, b.descn, attr1,
attr2, attr3, attr4, attr5, listprice, unitcost
from (((item a join item_details b on a.itemid=b.itemid)
join product_details c on a.productid=c.productid)
join product d on d.productid=c.productid and b.locale = c.locale)
where b.locale = ? and ((lower(name) like ? or lower(catid) like ? or lower(b.descn) like ?)
</SQLFragment>
<SQLFragment parameterNb="3" occurrence="VARIABLE">
or (lower(name) like ? or lower(catid) like ? or lower(b.descn) like ?)
</SQLFragment>
<SQLFragment parameterNb="0">
)
</SQLFragment>
</SQLStatement>
十分感谢!

2002-11-05 21:22

1.3.1的DAO比1.3要复杂多。
我没仔细看过,觉得这是在玩SQL语句的组合游戏,不知哪位有过研究?

赞助商链接

赞助商链接

返回顶部

移动版 关于本站 使用帮助 联系管理员 最佳分辨率1366x768
OpenSource JIVEJDON Powered by JdonFramework Code © 2002-20 jdon.com