【发布时间】:2016-02-16 20:08:50
【问题描述】:
这是我编写的代码,用于使用 servlet 显示从 db 到浏览器的查询结果,
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
public class DatabaseAccess extends HttpServlet{
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
// JDBC driver name and database URL
// static final String JDBC_DRIVER="com.mysql.jdbc.Driver";
final String DB_URL="jdbc:postgresql://localhost:5432/postgres";
// Database credentials
final String USER = "postgres";
final String PASS = "postgres";
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Database Result";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " +
"transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor=\"#f0f0f0\">\n" +
"<h1 align=\"center\">" + title + "</h1>\n");
try{
// Register JDBC driver
Class.forName("org.postgresql.Driver");
// Open a connection
Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
// Execute SQL query
Statement stmt = conn.createStatement();
String sql;
sql = "SELECT docid,term,term_frequency,tf FROM fea2";
ResultSet rs = stmt.executeQuery(sql);
out.println("<h4>connected to db</h4>");
// Extract data from result set
while(rs.next()){
//Retrieve by column name
int docid = rs.getInt("docid");
int term_frequency = rs.getInt("term_frequency");
String term = rs.getString("term");
float tf = rs.getFloat("tf");
//Display values
out.println("ID: " + docid + "<br>");
out.println(", Age: " + term_frequency + "<br>");
out.println(", First: " + term + "<br>");
out.println(", Last: " + tf + "<br>");
}
out.println("</body></html>");
out.println("got data from db");
// Clean-up environment
rs.close();
stmt.close();
conn.close();
}catch(SQLException se){
//Handle errors for JDBC
se.printStackTrace();
}catch(Exception e){
//Handle errors for Class.forName
e.printStackTrace();
}
}
}
此代码仅在浏览器上打印为“数据库结果”,而不是 fea1 表中的内容。该表存在并填充了数据。
web.xml:
<servlet>
<servlet-name>DatabaseAccess</servlet-name>
<servlet-class>DatabaseAccess</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DatabaseAccess</servlet-name>
<url-pattern>/DatabaseAccess</url-pattern>
</servlet-mapping>
我不知道还有什么问题。我希望在浏览器上打印我的查询结果。请帮忙。关于我做错了什么有什么建议吗?
【问题讨论】:
-
您面临的问题是什么?预期的行为是什么?你得到了什么?
-
代码在 servlet 中能走多远?尝试添加打印语句以缩小您获得的范围。你得到什么堆栈跟踪?您正在将堆栈跟踪打印到 System.out,那么您知道如何找到它吗?如果您不确定,
e.printStackTrace(out)将堆栈打印到 servlet 响应。
标签: postgresql servlets jdbc