连接到servlet或托管bean的数据库

时间:2013-07-03 14:29:38

标签: java mysql database java-ee

我是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中的DB时,我必须复制相同的代码。我尝试创建一个连接类,并将Connection c作为参数传递,但这次从连接类返回时,Connection对象变为null。有没有其他方法可以使连接更容易,没有代码重复?

由于

2 个答案:

答案 0 :(得分:2)

如果有可能尝试进入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;
  }
}

在您的Managed Bean或Servlet中:

public void someFunction() {
  MySqlDAOFactory.createConnection();
  BankDAO dao = MySqlDAOFactory.getBankDAO();
  //get other DAOs

  Account acc = dao.getAccountFor("bob");
}

答案 1 :(得分:1)

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

如果要在其他类中使用连接,只需调用该方法即可。

或者你可以做的是

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