【问题标题】:Can't connect database to Java Dynamic Web Project无法将数据库连接到 Java 动态 Web 项目
【发布时间】:2020-06-23 19:49:59
【问题描述】:

我在 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 web-project


    【解决方案1】:

    您需要检查 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”透视图,在“项目资源管理器”视图中,在“服务器/Tomcat xxxx”资源下,您应该有 context.xml 文件。检查它是否还包含“jdbc/LiveDataSource”
    • 在插入带有外键的原始数据之前,您应该有记录父表(例如 programme
    • 您在 DBServlet 第 169 行出现 SQL 错误:卖家应使用单引号进行转义,例如insertStmt2 += "'seller'" + ","; not `insertStmt2 += "seller" + ",";

    为了避免 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);
            }
    

    【讨论】:

    • 我验证了所有这些东西,但应用程序仍然无法连接到数据库。这是我尝试过的:&lt;Resource name="jdbc/phoneBills" auth="Container" driverClassName="com.mysql.cj.jdbc.Driver" type="javax.sql.DataSource" username="root" password="12345678" url="jdbc:mysql://localhost:3306/mydb" maxTotal="8" /&gt;
    • 日志文件中的任何异常 ($CATALINA_HOME/logs) ?
    • 日志文件夹中没有任何日志文件。另外,我使用的是 Windows 7,而不是 Linux,以防我没有说清楚
    • 用截图更新了回复。
    【解决方案2】:

    我修好了。我需要将服务器的时区设置为 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"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-17
      相关资源
      最近更新 更多