Java Servlet SQL 表

标签 java sql servlets jdbc

我遇到的问题是我要创建一个 servlet,它将从三个表 (SQL) 获取数据并将它们打印在 html 表中。

表的结构如下:

博客评论:

row id (auto increments), 
blogger id, 
entry_tstamp, 
t_stamp, 
comment, 
author_id, 

博客条目:

row id(auto increments), 
blogger_id, 
timestamp, 
entry, 

博客信息:

row id(auto increments), 
blogger_id, 
name, 
email address, 
image, 
password, 

博客条目是原始帖子,博客评论与该帖子相关。我正在尝试创建一个表格,该表格将显示博主详细信息,后跟第一行中的帖子(来自 blog_entries),第二行及其下方显示该博客的相关评论。

我正在尝试使用 while 语句(如下所示)。我必须使用 while 语句来首先获取初始博客文章和博主 ID,然后使用第二个 while 语句来显示与之相关的评论。

当它经历第二个 while 循环时,我遇到了一些困难,它取消了第一个 while 循环(一次增量后),然后转储第二个 while 循环的内容。

有谁知道是否有更好的方法来实现这个?我应该使用比较循环吗?而且我确信我的编码是错误的。谁能告诉我哪里出错了?

谢谢。

代码:

        try {
            Class.forName("org.sqlite.JDBC");
            con = DriverManager.getConnection("jdbc:sqlite:E:/My Documents/NetBeansProjects/co2509blog.sqlite");
            stmt = con.createStatement();
            //String temp = "SELECT entry, name, email, image, comment from blog_comments C, blog_entries E, blogger_info I where E.blogger_id = I.blogger_id  AND I.blogger_id = C.author_id ORDER BY E.timestamp";
            //String temp = "SELECT entry, name, email, image from blog_entries E, blogger_info I where E.blogger_id = I.blogger_id ORDER BY E.timestamp";
            //String temp = "SELECT entry, name, email, image, comment from blogger_info I JOIN blog_entries E ON I.blogger_id = E.blogger_id JOIN blog_comments C ON I.blogger_id = C.author_id WHERE  E.timestamp = C.entry_tstamp ORDER BY E.timestamp";
            String query = "SELECT name, image, email, entry FROM blogger_info I, blog_entries E WHERE I.blogger_id = E.blogger_id ORDER BY E.timestamp";
            String query2 = "SELECT name, image, email, comment FROM blogger_info I, blog_entries E, blog_comments C WHERE I.blogger_id = C.author_id AND E.timestamp = C.entry_tstamp ORDER BY E.timestamp";
            rs = stmt.executeQuery(query);


            //rs2 = stmt.executeQuery(secondQuery);
            // displaying records
            int rowCount = 0;
            int rowCount2 = 0;

            out.println("<P ALIGN='center'><TABLE BORDER=5>");
            ResultSetMetaData rsmetadata = rs.getMetaData();
            int columnCount = rsmetadata.getColumnCount();
            // table header
            out.println("<TR>");
            for (int i = 0; i < columnCount; i++) {
                out.println("<TH>" + rsmetadata.getColumnLabel(i + 1) + "</TH>");
            }
            out.println("</TR>");
            {
                while (rs.next()) {
                    rowCount++;
                    out.println("<TR>");
                    for (int i = 0; i < columnCount; i++) {
                        out.println("<TD>" + rs.getString(i + 1) + "</TD>");
                    }
                    rowCount2++;
                    rs2 = stmt.executeQuery(query2);
                    ResultSetMetaData rsmetadata2 = rs2.getMetaData();
                    int columnCount2 = rsmetadata2.getColumnCount();

                    rsmetadata2 = rs2.getMetaData();
                    out.println("</TR>");
                    while (rs2.next()) {
                        rowCount2++;
                        out.println("<TR>");
                        for (int j = 0; j < columnCount2; j++) {
                            out.println("<TD>" + rs2.getString(j + 1) + "</TD>");
                        }

                    }

                }
                out.println("</TR>");
            }
            out.println("</TABLE></P>");

        }

最佳答案

以下行重用第一个查询的语句:

rs2 = stmt.executeQuery(query2);

作为副作用,第一个结果集 (rs) 被关闭。

要修复此问题,您需要为内部查询创建单独的语句:

stmt2 = con.createStatement();

..

rs2 = stmt2.executeQuery(query2);

但是,如果您可以将两个查询合并为一个查询,效率会更高。

关于Java Servlet SQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13879326/

相关文章:

java - 无法连接到服务器(错误 404)

sql - 一个查询中的两个计数与相反的 where 条件

sql - 为什么不喜欢 SQL?

servlets - 如何使用 spring-boot 更改过滤器中的 Controller 响应以使整个 API 的响应结构保持一致

java - ActionListener 无法从公共(public)类引用数组?

java - Selenium Chromedriver 无法通过 LinkText 找到元素,但 Geckodriver 可以

java - NetLogo vs. Repast Simphony?

java - 有效/无效的非 ASCII 字符和无效的 ASCII 字符

sql - 获取 sql 列使用的 XML 模式

javascript - .fail 中的 JQuery/$.ajax/alert,但成功了