我是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创建一个类,并将Connection c作为参数传递,但这一次,当它从connection类返回时,Connection对象变为null。有没有其他方法可以让连接变得更容易,而不会出现代码重复?
谢谢
发布于 2013-07-03 22:32:03
您可以创建一个将连接到数据库的类,并使方法返回该连接。
当您想在其他类中使用connection时,只需调用该方法即可。
否则你能做的就是
connection发布于 2013-07-04 06:29:37
如果可能的话,尝试进入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");
}https://stackoverflow.com/questions/17450775
复制相似问题