Java 为什么我的JDBC(read)查询不能在我的JSP页面上工作?
我写了一个.jsp页面作为一个更大的数据库项目的一部分。目标是拥有一系列使用java和html显示mySQL数据库数据的.jsp页面。我在JDBC查询方面遇到了一个问题,特别是使用准备好的语句从库存表中选择汽车型号。我对它进行了编码,以便id=3的汽车返回相应的汽车型号,然后在屏幕上打印出来。运行代码后,屏幕上没有输出,因此问题可能在于我的查询或之前的连接设置,我只是不确定在哪里Java 为什么我的JDBC(read)查询不能在我的JSP页面上工作?,java,mysql,jsp,maven,jdbc,Java,Mysql,Jsp,Maven,Jdbc,我写了一个.jsp页面作为一个更大的数据库项目的一部分。目标是拥有一系列使用java和html显示mySQL数据库数据的.jsp页面。我在JDBC查询方面遇到了一个问题,特别是使用准备好的语句从库存表中选择汽车型号。我对它进行了编码,以便id=3的汽车返回相应的汽车型号,然后在屏幕上打印出来。运行代码后,屏幕上没有输出,因此问题可能在于我的查询或之前的连接设置,我只是不确定在哪里 <%-- Document : content Created on : May 6, 2015, 5:
<%--
Document : content
Created on : May 6, 2015, 5:04:20 PM
Author : Christopher
--%>
<%@page contentType="text/html" pageEncoding="UTF-8" %>
<%@page import = "java.sql.*" %>
<%@page import = "java.util.logging.Level" %>
<%@page import = "java.util.logging.Logger" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>content</title>
</head>
<body>
<h1>Welcome!</h1>
<%!
public class Template {
public Template(){
try{
Class.forName("com.mysql.jdbc.driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/itmd4515?zeroDateTimeBehavior=convertToNull"
,"itmd4515","itmd4515");
PreparedStatement ppst = con.prepareStatement("select * from inventory where id = 3");
ResultSet rs = ppst.executeQuery();
rs.next();
String carModel = rs.getString("carModel");
rs.close();
con.close();
System.out.println(carModel);
}catch(SQLException ex){
System.err.println(ex.getMessage());
} catch (ClassNotFoundException ex) {
Logger.getLogger(Template.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
%>
<br><br>
<%= new java.util.Date() %>
</body>
库存表
我确信问题出在上面代码的某个地方,因为运行代码时没有错误;它根本不显示汽车模型。此外,数据库已正确配置和连接,因此这可能也不是问题所在
如果这个问题很明显,我很抱歉,我仍然对JDBC和.jsp有一些了解。这是一个在Netbeans中完成的maven web应用程序
最新的系统消息
修改代码以输出SQLException和ClassNotFoundException后,我在浏览器中收到以下输出:com.mysql.jdbc.driver您的代码声明了该类的模板类和构造函数。若类甚至并没有实例化,为什么要执行它 除此之外,这是一种非常奇怪的编写JSP页面的方式。您需要阅读一些关于编写简单JSP页面的体面书籍:类似smth的核心servlet和Javaserver页面:核心技术,第1卷第2版-这本书非常古老,但为初学者提供了编写简单JSP/servlet的位置和方法的线索替换System.out.printlncarModel toout.printlncarModel 考试~
这里有一篇文章给你我从不用jsp编写类和方法。如果您想测试jdbc子句是否有效,只需编写一个简单的java文件,使用main方法。如下
/**
* Copyright (c) 2014
* Tanry Electronic Technology Co., Ltd.
* ChangSha, China
*
* All Rights Reserved.
*
* First created on May 7, 2015 by liyzh
* Last edited on May 7, 2015 by liyzh
*
* 说明: TODO
*/
package com.tanry.business.module.lc.request;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Test {
public static void main(String[] args) {
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/itmd4515?zeroDateTimeBehavior=convertToNull", "itmd4515", "itmd4515");
PreparedStatement ppst = con.prepareStatement("select * from inventory where id = 3");
ResultSet rs = ppst.executeQuery();
while (rs.next()) {
String carModel = rs.getString("carModel");
System.out.println(carModel);
}
rs.close();
ppst.close();
con.close();
} catch (SQLException ex) {
System.err.println(ex.getMessage());
} catch (ClassNotFoundException ex) {
// Logger.getLogger(Template.class.getName()).log(Level.SEVERE,
// null, ex);
}
}
}
使用eclipse之类的IDE,您可以非常轻松地调试代码。您正在打印到System.out,而不是web页面。你检查过服务器日志了吗?你需要做一些调试。在创建连接的直线上放置一个断点,然后逐步执行,在执行过程中检查值,以确保一切都如预期的那样。还有,Java和HTML在同一个文件中吗?这不是好的做法。该页面应该只包含显示数据的JSTL。数据的获取需要在一个服务类中,在一个单独的文件中。您应该将com.mysql.jdbc.Driver放在class.forName中。驱动程序的D必须大写。我尝试过,但随后收到一个错误:找不到符号:变量输出位置:类SimplifiedJSPSServlet.Tempate它可能与使用有关,我仍在尝试使用它out@TechSavvySmurf在你的代码下欢迎!,替换完成,但不幸的是仍然没有输出,甚至没有一个ErrorInstance模板类:new Template;或者删除所有这些声明:公共类模板{public Template{还有:Class.forNamecom.mysql.jdbc.driver;应该是Class.forNamecom.mysql.jdbc.driver;@kachanov Success!成功了,谢谢。如果你能给出正式答案,我会选择它。这不是正式答案。你显示的代码和核战争一样丑陋。我的建议让你看到了你想要的结果。阅读我建议的书预计起飞时间