我正在使用 eclipse、eclipseLink、java 持久性 API (JPA) 和两个具有相同结构(相同表)的数据库(MYSQL 和 SQLServer)的 java 项目中工作。有时我需要检查用于应用条件语句(例如“if”或其他)的数据库。问题是:如何验证我是否使用参数连接到 MySQL 或 SQLServer 数据库并在参数中使用该信息?
问问题
360 次
2 回答
0
我解决了在 persistence.xml 配置文件中读取 tag属性和Attribute name="eclipselink.target-database"的问题。我使用了这些导入:
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
这是我用来读取属性的函数:
public String DatabaseIdentifier()
{
String dbIdentifier=null ;
try {
//Creates a virtual file where is allowed for default the persistence.xml configurarion file
File path= new File("src\\META-INF");
//Using the xml libraries prepare the document to be read.
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(new File(path+"\\persistence.xml"));
doc.getDocumentElement().normalize();
//Gets the list of properties contained in the persistence.xml file
NodeList listProperties= doc.getElementsByTagName("property");
//We searching in the list of properties the attribute with the name
//eclipselink.target-database and there we get the database that
//is in use.
for (int i = 0; i < listProperties.getLength(); i ++) {
Node team = listProperties.item(i);
if (team.getNodeType() == Node.ELEMENT_NODE)
{
Element element = (Element) team;
if (element.getAttribute("name").contains("eclipselink.target-database"))
{
dbIdentifier=element.getAttribute("value").toString();
System.out.println(element.getAttribute("value"));
}
}
}
} catch (Exception e)
{e.printStackTrace();}
return dbIdentifier;
}
在另一个类中,您应该将此方法的返回分配给 String。这就是答案,现在您可以在“if”之类的条件语句中使用此信息。
于 2012-05-15T16:47:41.617 回答
0
创建一个布尔值 connectedToDatabase 并将其初始化为 false。创建一个将建立连接的 try and catch 块。在尝试将 connectedToDatabase 初始化为 true。如果在尝试连接时捕获到异常,布尔值将保持为 false。
private boolean connectedToDatabase = false;
try
{
connection = DriverManager.getConnection(urlOfDatabase);
connectedToDatabase = true;
}catch(SQLException sqlException){
sqlException.printStackTrace();}
那么您可以创建一个 if 语句,如果 connectedToDatabase 为 false,则该语句将引发异常。只需确保该方法抛出 IllegalStateException。
if(!connectedToDatabase)
throw new IllegalStateException("Not Connected To Database");
如果服务器出现故障,这将不起作用,因为它只会确定初始连接是否成功。
于 2012-05-07T20:55:11.547 回答