Day7: search project by keyword

本文记录了解决项目搜索功能的过程,包括SQL查询、Struts2迭代器使用及LEFT JOIN关键字的应用,最终实现了项目的成功搜索与显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我到实验室,去写关键字项目搜索。

关键字搜索项目的核心语句:

  SELECT * FROM dc_project WHERE dc_project_title LIKE CONCAT("%",keyword,"%");

写后调试,发现bean.Project类的定义与数据库中的不符,同步也修改了CommonService.Search中的赋值部分。

但问题并没有全部解决,网页中的代码如下:

            <s:iterator value="list" status="stat">
            <tr>
                <td><s:property value="#stat.getIndex()+1"/></td>
                <td><s:property value="dc_project_batch_id"/></td>
                <td><s:property value="dc_project_title"/></td>
                <td><s:property value="dc_project_level"/></td>
                <td><s:property value="dc_project_type"/></td>
                <td><s:property value="dc_project_funds"/></td>
                <td><s:property value="dc_project_college"/></td>
                <td><s:property value="dc_project_leader_id"/></td>
                <td><s:property value="dc_project_dc_project_introduce"/></td>
        </tr>
        </s:iterator> <!-- 行迭代 -->

但却并没有打印出应有的信息。

经检验,CommonService.Search中确实完成了对数据库的访问并成功返回值;

action.common.SearchProjectAction中的list返回值也是正确的,但为何不能打印出正确的数据呢?

那就应该是structs跌代器<s:iterator>的问题了。

后来师哥发现原来是没有引用标签库造成的,真是厉害!加上

<%@ taglib uri="/struts-tags" prefix="s"%>

后运行,项目内容被正确显示,大功告成!

之后又写了各种project查询的存储过程,其中多次用到了:LEFT JOIN。

LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。

同时,RIGHT JOIN:

RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。

它们可以避免返回值为空,避免一些未知错误。

所以为了规避空返回值,必须有可以验证查询失败后的校验才行。

但这对getProjectListByKeyword没有影响,因为返回值使用了list接收,即使为空,依然不会出错:

List<Project> list=new ArrayList<Project>();

while (rst.next()) {
Project project = new Project();
list.add(project);

}

project查询总算完成了,调试也已经通过,真的还是蛮开心的。

2016.9.14 Tuesday

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值