Day7: search project by keyword

来源:互联网 发布:西安 广告算法工程师 编辑:程序博客网 时间:2024/06/03 17:21

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

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

  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

0 0