【问题标题】:Creating JDBC Connections Outside The DAO在 DAO 外部创建 JDBC 连接
【发布时间】:2012-10-11 03:45:26
【问题描述】:

所以我这个周末刚学完 JDBC,并成功地将我的代码从 main 方法转移到了 MVC 应用程序中。此应用程序的目的是保存球员名单并在需要时显示用户凭据。该程序运行良好,当我请求类似...的网址时...

http://localhost:8084/gmustudent/players?id=1

我得到了那个播放器的正确输出!问题是我在我的 PlayersDAO 类中执行数据库连接,我认为这不是执行此操作的“最佳”方式。所以我有两个问题。

  1. 有没有办法在 web.xml 中执行数据库连接 文件或其他文件,以便在服务器最初启动时 立即执行与数据库的连接并准备好 询问时查询?
  2. 这实际上是在 DAO 中建立连接的更好替代方案,还是会产生无法预料的负面缺点。 AKA 与我的数据库的持续连接是否正是我不想要的?

任何 cmets 或链接将不胜感激。我将分享我目前为我的 DAO 类提供的代码,以便您可以看到我目前拥有的代码。谢谢大家!

package com.jdbc.test;

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

public class PlayersDAO 
{
    public static Players viewPlayer(int id) throws SQLException
    {
        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;
        Players playerObject = null;

        try
        {
            String url = "jdbc:mysql://localhost:3306/gmustudent";
            String username = "root";
            String password = "root";

            try
            {
                Class.forName("com.mysql.jdbc.Driver");
            }
            catch(ClassNotFoundException error)
            {
                System.out.println("Error: " + error.getMessage());
            }

            connection = DriverManager.getConnection(url, username, password);
            statement = connection.createStatement();
            resultSet = statement.executeQuery("SELECT * FROM players WHERE id = " + id);

            if(resultSet.next())
                playerObject = new Players(resultSet.getLong("id"), resultSet.getString("name"), resultSet.getString("position"), resultSet.getString("height"), resultSet.getString("year"), resultSet.getString("hometown"), resultSet.getString("highschool"), resultSet.getString("headshot"));   
        }
        finally
        {
            if (connection != null) try{connection.close();} catch(SQLException ignore) {}
            if (statement != null) try{statement.close();} catch(SQLException ignore) {}
            if (resultSet != null) try{resultSet.close();} catch(SQLException ignore) {}
        }

        return playerObject;
    }
}

【问题讨论】:

  • 你可以配置JNDI JDBC Resource或者使用`JAP - Hibernate'。

标签: java model-view-controller jdbc dao


【解决方案1】:

您可以使用资源在 web.xml 文件中创建数据库连接。希望本教程对您有所帮助。

http://viralpatel.net/blogs/database-connection-pooling-tomcat-eclipse-db/

【讨论】:

    【解决方案2】:

    您可以使用JDBC Connection Pooling。它可以在应用程序性能、并发性和可扩展性方面提供显着优势。

    【讨论】:

      【解决方案3】:

      恕我直言,它始终是隐藏任何资源的实例化细节的好方法。您可以使用工厂方法来执行此操作。这种方法的优点是您可以随时更改管理资源的方式 - 例如每个 DAO 可以有一个 JDBCConnection 实例,也可以有连接池。您可以随时提供开发特定的数据库连接、测试特定的数据库连接或生产数据库连接。所有这些细节都可以通过这种方法隐藏。

      【讨论】:

        猜你喜欢
        • 2017-06-08
        • 1970-01-01
        • 2012-06-03
        • 2013-03-10
        • 1970-01-01
        • 1970-01-01
        • 2019-05-07
        • 1970-01-01
        • 2019-11-16
        相关资源
        最近更新 更多