无法将数据库连接到 Java Dynamic Web 项目

问题描述 投票:0回答:2

我在 Eclipse 中创建了一个动态 Web 项目,它应该与数据库交互。我在项目中添加了数据库,并在相应的文件中添加了所有必要的文本以将数据库与 servlet 连接,但由于某种原因,servlet 无法与数据库通信。例如,有一个用于显示表格内容的选项。当我选择该选项时,不会显示表的内容,而是运行 try/catch 的 catch 部分内的代码。此外,还有 2 个选项涉及将数据输入表中。当我在 html 页面中输入数据并按提交时,没有任何反应。它应该向我显示数据输入成功。

我错过了什么?我做错了什么?

这是项目:http://www.mediafire.com/file/pwu46ohgd3qs0pr/PhoneBillsApp2.zip/file

我正在使用 Eclipse 2020-03 (4.15.0) 和 Tomcat 8

java database eclipse tomcat8
2个回答
0
投票

您需要检查tomcat服务器的日志文件是否有异常。日志通常位于

$CATALINA_HOME/logs

验证:

  • 您已在 Tomcat 的 context.xml 中定义了数据源:
    $CATALINA_HOME/conf/context.xml
    应该包含类似的内容:
<Resource name="jdbc/LiveDataSource"
 auth="Container"
 type="javax.sql.DataSource"
 maxTotal="100"
 maxIdle="30"
 maxWaitMillis="10000"
 username="xxx"
 password="yyy"
 driverClassName="com.mysql.jdbc.Driver"
 url="jdbc:mysql://localhost:3306/mydb"/>
  • 如果您在 Eclipse 中运行应用程序,请转到“Java EE”视角,在“项目资源管理器”视图中的“Servers/Tomcat xxxx”资源下,您应该有
    context.xml
    文件。检查它是否还包含“jdbc/LiveDataSource”
  • 在插入带有外键的原始表之前,您应该有记录父表(如
    programme
  • 您在 DBServlet 第 169 行有一个 SQL 错误:卖家应该是用单引号转义的,例如
    insertStmt2 += "'seller'" + ",";
    不是 `insertStmt2 += "卖家" + ",";

为了避免 SQL 注入,我建议使用 PreparedStatement 而不是在 servlet 内部构造 SQL 命令。考虑使用一些 ORM,如 Hibernate、EclipseLink 等。

更新1 CATALINA_HOME 和 CATALINA_BASE 的位置可以从启动配置中找到

将日志文件重定向到自定义位置:打开启动配置/Apache Tomcat/Tomcat 8(或9)/Commons选项卡/输出文件

更新2 检查

$CATALINA_BASE/conf/context.xml
(在我的例子中为
C:\projects\workspaces\delme\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\conf\context.xml
)是否包含
jdbc/LiveDataSource

此外,当您在 servlet 代码中引发异常时,请记录堆栈跟踪,否则它将在日志文件中不可见,例如:

        try {
           // ...some code here...
        } catch(Exception e) {
            out.println("Problem with the database connection");
            e.printStackTrace(); // or better use loggers
            // private final Logger logger = Logger.getLogger(getClass().getName()); 
            // logger.log(Level.SEVERE, "Problem with the database connection", e);
        }

0
投票

我修好了。我需要将服务器的时区设置为 UTC,并将“LiveDataSource”替换为数据库文件的名称。数据源现在看起来像这样:

<Resource name="jdbc/phoneBills"
 auth="Container"
 type="javax.sql.DataSource"
 maxTotal="100"
 maxIdle="30"
 maxWaitMillis="10000"
 username="root"
 password="12345678"
 driverClassName="com.mysql.cj.jdbc.Driver"
 url="jdbc:mysql://localhost:3306/mydb?serverTimezone=UTC"/>
© www.soinside.com 2019 - 2024. All rights reserved.