0

我是 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。有没有其他方法可以使连接更容易,并且没有代码重复?

谢谢

4

2 回答 2

2

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

但是如果你被 JDBC 卡住了,这里有一个很好的方法来抽象和封装数据库层核心 J2EE 模式 - 数据访问对象

在你的案例的总结中,我会做这样的事情:

DAO 工厂:

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");
}
于 2013-07-03T22:29:37.133 回答
1

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

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

否则你能做的是

  1. 创建一个ServletContextListener
  2. 在监听器中添加数据库连接代码。
  3. 添加返回方法connection
  4. 需要时使用它。
于 2013-07-03T14:32:02.737 回答