Ray-Yan 2017-04-02 13:22 采纳率: 100%
浏览 919

Dao执行了两遍导致数据查询结果不准确

如题,我的Dao层代码如下(感觉没毛病......):

 public class MessageDao {
    public ArrayList<Message> queryMessageList(String command,String description){
        ArrayList<Message> messageList = new ArrayList<Message>();
        Message message = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/micro_message","root","root");
            StringBuilder sql = new StringBuilder("select ID,COMMAND,DESCRIPTION,CONTENT from message where 1=1 ");
            ArrayList<String> paramList = new ArrayList<String>();
            if(command!=null && !command.trim().equals("")){
                System.out.println("command不为空");
                sql.append(" and COMMAND=? ");
                paramList.add(command);
            }
            if(description!=null && !description.trim().equals("")){
                System.out.println("description不为空");
                sql.append(" and DESCRIPTION LIKE '%' ? '%' ");
                paramList.add(description);
            }
            PreparedStatement statement = conn.prepareStatement(sql.toString());
            for(int i=0;i<paramList.size();i++){
                System.out.println(paramList.get(i));
                statement.setString(i+1, paramList.get(i));
            }
            ResultSet rs = statement.executeQuery();

            while(rs.next()){
                message = new Message();
                message.setId(rs.getInt("ID"));
                message.setCommand(rs.getString("COMMAND"));
                message.setContent(rs.getString("CONTENT"));
                message.setDescription(rs.getString("DESCRIPTION"));
                messageList.add(message);
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return messageList;
    }
}

然后执行查询后,网页上没有显示查询的信息,经过在控制台打印输出,查询的对象集合为空,如下截图:
图片说明
上面打印了两次,但我只执行了一次(点击了一次查询按钮,问题应该在这里.....)
各位大神,技术控能找到问题出在哪儿吗??求赐教!!!下面是其他层相关代码供参考。

service层代码

 public class ListService {
    public ArrayList<Message> queryMessageList(String command,String description){
        MessageDao messageDao = new MessageDao();
        return messageDao.queryMessageList(command, description);
    }
}

servlet代码:

 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置编码,获取页面的值,向页面传值
        request.setCharacterEncoding("utf-8");
        String command = request.getParameter("command");
        String description = request.getParameter("description");
        request.setAttribute("command", command);
        request.setAttribute("description", description);
        //查询消息列表
        ListService listService = new ListService();
        request.setAttribute("messageList", listService.queryMessageList(command, description));
        System.out.println(listService.queryMessageList(command, description));
        //跳转
        request.getRequestDispatcher("/WEB-INF/jsp/back/list.jsp").forward(request, response);
    }

jsp:

 <form action="<%= basePath %>ListServlet" id="mainForm" method="post">
            <div class="right">
                <div class="current">当前位置:<a href="javascript:void(0)" style="color:#6E6E6E;">内容管理</a> &gt; 内容列表</div>
                <div class="rightCont">
                    <p class="g_title fix">内容列表 <a class="btn03" href="#">新 增</a>&nbsp;&nbsp;&nbsp;&nbsp;<a class="btn03" href="#">删 除</a></p>
                    <table class="tab1">
                        <tbody>
                            <tr>
                                <td width="90" align="right">指令名称:</td>
                                <td>
                                    <input type="text" name="command" class="allInput" value="${command}"/>
                                </td>
                                <td width="90" align="right">描述:</td>
                                <td>
                                    <input type="text" name="description" class="allInput" value="${description}"/>
                                </td>
                                <td width="85" align="right"><input type="submit" class="tabSub" value="查 询" /></td>
                            </tr>
                        </tbody>
                    </table>

                    ......
  • 写回答

1条回答 默认 最新

  • 寻梦csdn 2017-04-05 00:59
    关注

    你sql语句不正确,你的循环中应向paramList中加入具体的参数值,而不是sql语句。可以吧for循环去掉,在两个判断参数的if语句拼接你的sql

    评论

报告相同问题?

悬赏问题

  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题