我是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。有没有其他方法可以使连接更容易,没有代码重复?
由于
答案 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)
您可以创建一个将连接到数据库并使方法返回连接的类。
如果要在其他类中使用连接,只需调用该方法即可。
或者你可以做的是
ServletContextListener
connection