【问题标题】:Connecting to database at a servlet or at a managed bean在 servlet 或托管 bean 处连接到数据库
【发布时间】:2013-07-03 14:29:37
【问题描述】:

我是 javaEE 新手,正在尝试建立数据库连接。我可以做到,但我认为我这样做的方式效率低下。这是我的工作:

static String dbUrl="jdbc:mysql://localhost:3306/Bank";
  static String username="root";
  static String password="";

  static Connection con=null;

  public static void connect ()
  {
      try {
       Class.forName("com.mysql.jdbc.Driver").newInstance();
       con=(Connection) DriverManager.getConnection(dbUrl,username,password);
       System.out.println("Connected!");

      } 
      catch (Exception e) {

          e.printStackTrace();
          System.out.println("not connected");

      }

  }

    public void someFunctiontoConnectToDB{
          try {
        connect();
                    DO_THE_QUERY.....etc
          }
    }

这是我的问题,这种方法可以正常工作,但是每当我尝试连接到另一个 servlet 或托管 bean 中的数据库时,我都必须复制相同的代码。我试图为连接创建一个类并将Connection c作为参数传递,但是这次当它从连接类返回时,Connection对象变为null。有没有其他方法可以使连接更容易,并且没有代码重复?

谢谢

【问题讨论】:

    标签: java mysql database jakarta-ee


    【解决方案1】:

    如果有可能尝试进入 JPA,它会让生活变得更轻松。

    但是如果你被 JDBC 卡住了,这里有一个很好的方法来抽象和封装数据库层Core J2EE Patterns - Data Access Object

    总结一下你的情况,我会做这样的事情:

    DAOFactory:

    class MySqlDAOFactory {
      static String dbUrl="jdbc:mysql://localhost:3306/Bank";
      static String username="root";
      static String password="";
      static private Connection con;
    
      public static void createConnection() {
        try {
          Class.forName("com.mysql.jdbc.Driver").newInstance();
          con=(Connection) DriverManager.getConnection(dbUrl,username,password);
          System.out.println("Connected!");
    
        } 
        catch (Exception e) {
    
          e.printStackTrace();
          System.out.println("not connected");
    
        }
      }
    
      public static BankDAO getBankDAO() {
        return new BankDAO(con);
      }
    }
    

    还有 BankDAO:

    class BankDAO {
      Connection con;
    
      public BankDAO(Connection con) {
        this.con = con;
      }
    
      public Account getAccountFor(String name) {
        //JDBC Operations
        return acc;
      }
    }
    

    在您的托管 Bean 或 Servlet 中:

    public void someFunction() {
      MySqlDAOFactory.createConnection();
      BankDAO dao = MySqlDAOFactory.getBankDAO();
      //get other DAOs
    
      Account acc = dao.getAccountFor("bob");
    }
    

    【讨论】:

      【解决方案2】:

      您可以创建一个将连接到数据库的类并让方法返回连接。

      当您想在其他类中使用连接时,您只需调用该方法即可。

      否则你能做的就是

      1. 创建ServletContextListener
      2. 在监听器中添加数据库连接代码。
      3. 添加方法返回connection
      4. 在需要时使用它。

      【讨论】:

      • 返回连接对象似乎是个好主意,我会试试谢谢
      猜你喜欢
      • 2015-10-19
      • 1970-01-01
      • 2011-01-27
      • 1970-01-01
      • 2015-11-27
      • 2017-12-14
      • 1970-01-01
      • 2012-07-27
      • 1970-01-01
      相关资源
      最近更新 更多