我在 JavaSE 应用程序中使用 JPA 并编写了一个类来管理数据库连接并将对象持久保存到数据库中。数据库连接的连接参数使用类构造函数传递,并且该类具有验证连接参数的方法。
public class DatabaseManager{
private EntityManagerFactory entityManagerFactory = null;
public DatabaseManager(String connectionDriver, String connectionUrl, String username, String password) {
Properties props = new Properties();
props.put("javax.persistence.jdbc.driver", connectionDriver);
props.put("javax.persistence.jdbc.url", connectionUrl);
props.put("javax.persistence.jdbc.user", username);
props.put("javax.persistence.jdbc.password", password);
entityManagerFactory = Persistence.createEntityManagerFactory("name of persistence unit", props);
}
public boolean checkConnection(){
try{
entityManagerFactory.createEntityManager();
}catch(Exception e){
return false;
}
return true;
}
}
当我调用 checkConnection 方法时,它会尝试使用给定的参数创建一个新的实体管理器。如果无法建立连接,entitymanagerfactory 会抛出异常并且该方法返回 false。
当我测试该方法时,我可以看到以下结果:
- 所有参数都正确 -> 该方法按预期返回 true。
- URL 或用户名不正确 -> 该方法按预期返回 false。
- 驱动程序名或用户密码不正确 -> 该方法返回 true 但它应该返回 false。<-这是我的问题。
有人能告诉我为什么它会这样吗?在不将数据写入某些数据库表的情况下测试连接参数的正确方法是什么?
目前我正在使用 EclipseLink,但我正在寻找一些独立于提供商的方式。
感谢您的回答。