1

我正在使用 eclipse、eclipseLink、java 持久性 API (JPA) 和两个具有相同结构(相同表)的数据库(MYSQL 和 SQLServer)的 java 项目中工作。有时我需要检查用于应用条件语句(例如“if”或其他)的数据库。问题是:如何验证我是否使用参数连接到 MySQL 或 SQLServer 数据库并在参数中使用该信息?

4

2 回答 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 回答