我在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方法时,它会尝试使用给定的参数创建一个新的entitymanager。如果无法建立连接,则entitymanagerfactory会抛出异常,并且该方法返回false
当我测试方法时,我可以看到以下结果:
答案 0 :(得分:0)
创建EntityManager不必在此时创建任何连接。例如,JPA实现可能会延迟获取连接,直到第一个持久或刷新为止(JPA规范将不会定义何时必须获取连接)。
为什么不使用简单的几行JDBC来检查您的数据库凭据?至少这种方式它独立于JPA实现决定如何处理连接(并且那些JPA属性在名称中有“jdbc”,因为这几乎肯定是JPA实现用它来获取连接)。
答案 1 :(得分:0)
来自JPA 2.0 Specification
部分8.2.1
persistence-unit元素由name和transaction-type属性以及以下子元素组成:description,provider,jta-data-source,non-jta-data-source,mapping-file,jar-file, class,exclude-unlisted-classes,shared-cache-mode,validation-mode和properties。
名称属性为必需;其他属性和元素是可选。它们的语义在以下小节中描述。
实体管理器不需要创建连接,因为 ONLY 需要持久性单元名称,我认为你应该使用DataNucleus
建议来建立一个简单的JDBC连接来验证你的联系。