首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过servlet或托管bean连接到数据库

问通过servlet或托管bean连接到数据库
EN

Stack Overflow用户
提问于 2013-07-03 22:29:38
回答 2查看 1.7K关注 0票数 0

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

代码语言:javascript
复制
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创建一个类,并将Connection c作为参数传递,但这一次,当它从connection类返回时,Connection对象变为null。有没有其他方法可以让连接变得更容易,而不会出现代码重复?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-03 22:32:03

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

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

否则你能做的就是

  1. 在监听程序中创建一个connection
  2. Use数据库连接代码。
  3. 添加一个方法,以便在需要时返回它。
票数 1
EN

Stack Overflow用户

发布于 2013-07-04 06:29:37

如果可能的话,尝试进入JPA,这会让生活变得更容易。

但是如果您坚持使用JDBC,那么这里有一个抽象和封装数据库层Core J2EE Patterns - Data Access Object的好方法。

在总结你的案例时,我会这样做:

DAOFactory:

代码语言:javascript
复制
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:

代码语言:javascript
复制
class BankDAO {
  Connection con;

  public BankDAO(Connection con) {
    this.con = con;
  }

  public Account getAccountFor(String name) {
    //JDBC Operations
    return acc;
  }
}

在托管Bean或Servlet中:

代码语言:javascript
复制
public void someFunction() {
  MySqlDAOFactory.createConnection();
  BankDAO dao = MySqlDAOFactory.getBankDAO();
  //get other DAOs

  Account acc = dao.getAccountFor("bob");
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17450775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档