gpt4 book ai didi

java - 在 servlet 或托管 bean 处连接到数据库

转载 作者:太空宇宙 更新时间:2023-11-03 12:26:22 24 4
gpt4 key购买 nike

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

谢谢

最佳答案

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

但是如果您受困于 JDBC,这里有一个抽象和封装数据库层的好方法 Core J2EE Patterns - Data Access Object

在您的案例摘要中,我会做这样的事情:

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");
}

关于java - 在 servlet 或托管 bean 处连接到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17450775/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com