我遇到的問題是我要創建一個servlet,它將從三個表(SQL)中獲取數據並將它們打印到html表中。Java Servlet SQL表
的表的結構如下:
blog_comments:
row id (auto increments),
blogger id,
entry_tstamp,
t_stamp,
comment,
author_id,
blog_entries:
row id(auto increments),
blogger_id,
timestamp,
entry,
blogger_info:
row id(auto increments),
blogger_id,
name,
email address,
image,
password,
該博客條目是orignal帖子和blog_comments與該帖子相關。我試圖創建一個表格,在第一行以及第二行和下面的文章中顯示博主的詳細信息,然後顯示該博客的相關評論(來自blog_entries)。
我想使用一段時間的聲明(如下所示)。我不得不使用while語句初步獲取原始博客帖子和博客ID,第二次顯示與此相關的評論。
我有一些困難,因爲它去throught第二while循環,它將取消第一while循環(後一個增量),然後轉儲離開第二while循環的內容。
有誰知道是否有更好的方法來實現這個?我應該使用比較循環嗎?我相信我的編碼是錯誤的。誰能告訴我我要去哪裏?
謝謝。
CODE:
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>");
}
謝謝科多。 – MacKey