Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在DAO外部创建JDBC连接_Java_Model View Controller_Jdbc_Dao - Fatal编程技术网

Java 在DAO外部创建JDBC连接

Java 在DAO外部创建JDBC连接,java,model-view-controller,jdbc,dao,Java,Model View Controller,Jdbc,Dao,所以我这个周末刚刚学习完JDBC,并成功地将我的代码从main方法转移到MVC应用程序中。此应用程序的目的是保存球员名册,并在需要时显示用户凭据。该计划的工作非常好,当我要求一个网址,如 http://localhost:8084/gmustudent/players?id=1 我得到了该播放器的正确输出!问题是我在PlayersDAO类中执行数据库连接,我认为这不是实现这一点的“最佳”方法。所以我有两个问题 有没有办法在web.xml中执行数据库连接 文件或其他文件,以便在服务器最初启动时

所以我这个周末刚刚学习完JDBC,并成功地将我的代码从main方法转移到MVC应用程序中。此应用程序的目的是保存球员名册,并在需要时显示用户凭据。该计划的工作非常好,当我要求一个网址,如

http://localhost:8084/gmustudent/players?id=1
我得到了该播放器的正确输出!问题是我在PlayersDAO类中执行数据库连接,我认为这不是实现这一点的“最佳”方法。所以我有两个问题

  • 有没有办法在web.xml中执行数据库连接 文件或其他文件,以便在服务器最初启动时 立即执行与数据库的连接,并准备好 询问时询问
  • 这实际上是在DAO中建立连接的更好的替代方案,还是会有不可预见的负面缺陷。AKA持续连接到我的数据库是否正是我不想要的
  • 任何意见或链接将不胜感激。我将分享我目前为我的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;
        }
    }
    

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


    您可以使用。它可以在应用程序性能、并发性和可扩展性方面提供显著的好处

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

    您可以配置
    jndijdbc资源
    或使用'JAP-Hibernate'。