JavaServletSQL表

JavaServletSQL表,java,sql,servlets,jdbc,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)

我遇到的问题是,我要创建一个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_条目),以及该博客的相关评论

我正在尝试使用whilestation(如下所示)。我必须使用while语句来获取初始博客帖子和blogger ID,第二个while语句用来显示与此相关的评论

我有一些困难,因为它通过了第二个while循环,它取消了第一个while循环(在一个增量之后),然后转储了第二个while循环的内容

有人知道有没有更好的方法来实现这一点吗?我应该使用比较循环吗?我确信我的编码是错误的。谁能告诉我哪里出了问题

多谢各位

代码:

试试看{
Class.forName(“org.sqlite.JDBC”);
con=DriverManager.getConnection(“jdbc:sqlite:E:/mydocuments/NetBeansProjects/co2509blog.sqlite”);
stmt=con.createStatement();
//String temp=“选择条目、名称、电子邮件、图像、来自blog_评论C的评论、blog_条目E、blogger_信息I,其中E.blogger_id=I.blogger_id和I.blogger_id=C.author_id按E.timestamp排序”;
//String temp=“从blog_条目E、blogger_信息I中选择条目、名称、电子邮件、图像,其中E.blogger_id=I.blogger_id按E.timestamp排序”;
//String temp=“选择条目、名称、电子邮件、图像、来自blogger的评论\u info I加入blog\u条目E ON I.blogger\u id=E.blogger\u id加入blog\u评论C ON I.blogger\u id=C.author\u id其中E.timestamp=C.entry\u t按E.timestamp打印顺序”;
String query=“选择姓名、图像、电子邮件、blogger\u信息I中的条目,blog\u条目E其中I.blogger\u id=E.blogger\u id按E.timestamp排序”;
String query2=“从blogger\u info I、blog\u条目E、blog\u注释C中选择名称、图像、电子邮件、注释,其中I.blogger\u id=C.author\u id和E.timestamp=C.entry\u t按E.timestamp排序”;
rs=stmt.executeQuery(查询);
//rs2=stmt.executeQuery(第二个查询);
//显示记录
int rowCount=0;
int rowCount2=0;
out.println(“

”); ResultSetMetaData rsmetadata=rs.getMetaData(); int columnCount=rsmetadata.getColumnCount(); //表头 out.println(“”); 对于(int i=0;i”); }


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

rs2 = stmt.executeQuery(query2);
作为副作用,第一个结果集(
rs
)关闭

要解决此问题,需要为内部查询创建单独的语句:

stmt2 = con.createStatement();

..

rs2 = stmt2.executeQuery(query2);

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

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

rs2 = stmt.executeQuery(query2);
作为副作用,第一个结果集(
rs
)关闭

要解决此问题,需要为内部查询创建单独的语句:

stmt2 = con.createStatement();

..

rs2 = stmt2.executeQuery(query2);
但是,如果可以将两个查询合并为一个查询,则效率会更高