Java 神秘的sql访问行为

Java 神秘的sql访问行为,java,mysql,database,jsp,Java,Mysql,Database,Jsp,我创建了一个简单的java类,它可以访问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) {

我创建了一个简单的java类,它可以访问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());
    }
}
}
<%@ 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>
jsp页面中的相同代码不起作用,问题是try-catch块没有执行,我不知道这是怎么可能的 代码如下:

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());
    }
}
}
<%@ 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>

我的名字是dati inseriti per l'autenticazione sono:
  • 尝试使用out对象的flush()方法
  • 为了调试应用程序,您还可以将sql结果放入logger或System.out中
  • 检查您的jsp文件是否由应用程序web服务器处理(例如,如果您使用.html扩展名,请检查您的web服务器是否将.html页面作为jsp处理,而不仅仅是作为html处理)。为此,您可以在代码段的开头添加一些日志记录
  • 您还可以检查生成的HttpJspPage类(但问题似乎出在配置中)

  • 您是否希望catch中的语句输出到JSP页面?如果是这样,则需要使用out.println。System.err.println将写入服务器错误日志。

    您是否已关闭所有已打开的html标记??就像在ur中一样,jsp本身是不关闭的。jsp是否正在编译,您看到的输出是什么?忘记在这里复制,但显示在.jsp页面中。。确实无法理解增量部署已完成的增量分发运行部署:浏览:运行显示浏览器:运行:构建成功(总时间:4秒)您确定
    rs.next()
    为真,它在
    循环时进入
    。检查输出打印(“测试开始”)
    输出打印(“测试结束”)while循环前后。尝试输出各种输出。println(“test 123”);try-catch块中包含的所有println都被完全忽略不知道为什么try-catch中的所有println都会显示如果isAutoFlush()返回“false”,则第一步是必要的。事实上,我不知道这个选项是否是为所有web服务器预定义的,而且似乎这个选项可能是在外部(jsp)配置的。我试图将一些.println(“test”)放在try-catch之外,它们只显示在屏幕上,try-catch中发生的事情没有被执行。您是否查看了页面源代码或只是浏览器的呈现?另外,在
    if(rs.next())
    语句之后添加一些调试日志记录。顺便说一句,您必须在finally块中关闭连接、结果集和prepared语句。在同一文件夹中创建了一个新的jsp文件,现在只有复制和粘贴可以工作了。。。怎么了?