2015-11-15 18 views
0

这是我的代码写入从数据库使用servlet的浏览器中显示的查询结果对浏览器进行打印,无法从DB数据使用servlet的

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> 

我不知道还有什么是错的。我希望我的查询结果能够在浏览器上打印。请帮助。任何关于我在做什么的错误?

+0

您面临的问题是什么?预期的bahaviour和你得到了什么? –

+0

代码在servlet中有多远?尝试添加打印语句来缩小您获得的距离。你有什么堆栈跟踪?您正在将堆栈跟踪打印到System.out,那么您是否知道如何找到它?如果你不确定,'e.printStackTrace(out)'而不是将堆栈打印到servlet响应中。 –

回答

0

没有足够的信息来编写答案,以解决您的问题,因为它是目前编写的。

这里是我的建议:

  • 增加更多的打印语句来帮助你缩小在哪一行代码是不工作
  • ,而不是使用e.printStackTrace()(其打印到系统打印您的堆栈跟踪。出),打印堆栈跟踪正确使用e.printStackTrace(out)

你的servlet输出找出你是如何让远在servlet的关键是解决问题。

这可能是这些问题的一个:

  • Class.forName()失败,因为PostgreSQL驱动是不是在你的类路径(或不可见的Servlet的类加载器)
  • DriverManager.getConnection()可能会失败,因为URL不正确或者用户名/密码无效
  • stmt.executeQuery(sql)可能会失败,因为您的SQL语法对于您连接的数据库架构不正确或无效。