2012-01-12 34 views
0

我創建了一個簡單的Java類訪問SQL數據庫的正常工作 下面的代碼:神祕的SQL訪問行爲

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 

public class Query2 { 

public static void main (String[] args) { 
    try { 
     Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/riconoscimento?" 
         + "user=root&password=root"); 
     Statement stmt = conn.createStatement(); 
     ResultSet rs; 
     rs = stmt.executeQuery("SELECT * FROM utenti; "); 
     while (rs.next()) { 
      String passwordToRead = rs.getString("password"); 
      String usernameToRead = rs.getString("username"); 
      System.out.println(passwordToRead); 
      System.out.println(usernameToRead); 
     } 
     conn.close(); 
    } catch (Exception e) { 
     System.err.println("Database Access Error"); 
     System.err.println(e.getMessage()); 
    } 
} 
} 

在JSP頁面中相同的代碼不工作,問題是未執行try-catch塊,我不知道它是如何可能 下面的代碼:

<%@ page language ="java" import="java.sql.*" %> 
<!DOCTYPE html> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <title>I dati inseriti per l'autenticazione sono:</title> 
</head> 
<body> 
    <h1> 
<% 
try { 
     Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/riconoscimento?" 
         + "user=root&password=root"); 
     Statement stmt = conn.createStatement(); 
     ResultSet rs; 
     rs = stmt.executeQuery("SELECT * FROM utenti; "); 
     while (rs.next()) { 
      String passwordToRead = rs.getString("password"); 
      String usernameToRead = rs.getString("username"); 
      out.println(passwordToRead); 
      out.println(usernameToRead); 
     } 
     conn.close(); 
    } catch (Exception e) { 
     System.err.println("Database Access Error"); 
     System.err.println(e.getMessage()); 
    } 
%> 
    </h1> 
</body> 
</html> 
+0

你有沒有關閉所有的Url打開標籤?像在ur jsp 本身沒有關閉。 而且是jsp得到編譯,你看到的輸出是什麼? – 2012-01-12 09:27:10

+0

忘了這裏,但現在複製的.jsp網頁.. 實在無法理解 – Franky 2012-01-12 09:28:44

+0

增量部署的http://本地主機:8080/WebApplication1 完成增量HTTP的分佈://本地主機:8080/WebApplication1 運行部署: 瀏覽:HTTP://本地主機:8080/WebApplication1/index.jsp的 運行顯示的瀏覽器: 運行: BUILD SUCCESSFUL(總時間:4秒) – Franky 2012-01-12 09:31:34

回答

0
  1. 嘗試使用了對象的flush()方法
  2. 爲了調試應用程序,你可以把你的sql結果也放到記錄器或System.out中
  3. 檢查你的jsp文件是否是通過應用程序Web服務器處理的如果您使用.html擴展名,請檢查您的Web服務器是否將.html頁面處理爲JSP,而不僅僅處理爲HTML)。爲此,你可以在代碼段的開頭添加一些記錄
  4. 你也可以檢查結果HttpJspPage類(但似乎問題出在配置)
+0

如果isAutoFlush()返回'false',則第一步是必需的。其實我不知道這個選項是否是爲所有Web服務器預先定義好的,看起來這個選項可能是外部配置的(對於jsp)。 – 2012-01-12 09:43:22

+0

我試圖把一些out.println(「測試」)從try catch中取出,並且它們僅在屏幕上顯示 只會發生try catch中發生的情況 – Franky 2012-01-12 09:49:56

+0

你看過頁面源代碼還是瀏覽器的渲染?在if(rs.next())語句之後加上一些調試日誌記錄 – 2012-01-12 10:02:28

0

你期待的語句趕上被輸出到JSP頁面?如果是這樣,你將需要使用out.println。 System.err.println將寫入服務器錯誤日誌。