我在servlet中创建一个名为“论坛”的项目。
    但我坚持查询以从数据库中获取有关给定主题的结果...
    我制作了一个名为index的servlet,当我单击该主题时,其中有一个主题。我收到某种错误,例如MessageDisplayed servlet的“ where子句”中的Unknown列“ pepsi” ...我认为查询中存在问题...
    索引servlet的编码为:

@WebServlet("/Index")
public class Index extends HttpServlet {
    private static final long serialVersionUID = 1L;
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        String url = "jdbc:mysql://localhost:3306/df";
        String driver = "com.mysql.jdbc.Driver";
        String USER = "root";
        String PASS = "root";
        try {
            Class.forName(driver);
            Connection conn = (Connection) DriverManager.getConnection(url, USER, PASS);
            out.print("<html><body>");
            out.print("<a href='PostTopic'><input type='submit' value='Post New Topic'></a><br><br>");
            String sql = "select topic_name from topic";
            PreparedStatement ps = conn.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
            while(rs.next()){
                String topic_name = rs.getString("topic_name");
                HttpSession session = request.getSession();
                session.setAttribute("topic_name", topic_name);

                out.print("<a href='MessageDisplayed'>");
                out.print(topic_name);out.print("</a>");
                out.print("<br>");
            }

            out.print("</body></html>");


        } catch (Exception e) {
            out.print(e.getMessage());
        }
        out.close();
    }

}


而MessageDisplayed servlet的编码为:

public class MessageDisplayed extends HttpServlet {
    private static final long serialVersionUID = 1L;
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
         String url = "jdbc:mysql://localhost:3306/df";
         String driver = "com.mysql.jdbc.Driver";
         String USER = "root";
         String PASS = "root";
        try{
            Class.forName(driver);
            Connection conn = (Connection) DriverManager.getConnection(url, USER, PASS);
            HttpSession session = request.getSession();
            String topic = (String) session.getAttribute("topic_name");
            String sql = "select user_name,comment from comments where topic_name="+topic;
            PreparedStatement ps = conn.prepareStatement(sql);
        //  ps.setString(1, topic);
            ResultSet rs = ps.executeQuery();
            while(rs.next()){
                String name = rs.getString("user_name");
                String comment = rs.getString("comment");
                out.print("<html><body>");
                out.print("Name : "+name);out.print("<br>");out.print("Message : "+comment);out.print("<br>");
                out.print("</body></html>");
            }
        }
        catch(Exception e){
            out.print(e.getMessage());
        }
        out.close();
    }

}


该数据库有2个表主题表(topic_id,topic_name)和注释表(comment_id,comment,user_name,topic_id),插入工作正常。
但我无法获取结果
请尽快帮助我。

最佳答案

我认为这行是错误的

String sql = "select user_name,comment from comments where topic_name="+topic;


此外,您使用的方式也不是使用PreparedStatement的正确方式。

用这种方式

PreparedStatement ps = conn.prepareStatement("select user_name,comment from comments where topic_name=?");
ps.setString(1,topic);

关于java - 卡在创建查询以从数据库中获取结果吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20312150/

10-12 00:37
查看更多