2012-05-07 2 views
1

Я работаю в проекте java с использованием eclipse, eclipseLink, API Java Persistence (JPA) и двух баз данных (MYSQL и SQLServer) с той же структурой (те же таблицы). Иногда мне нужно проверить базу данных, которую я использую, для применения условных операторов, таких как «if» или другие. Вопрос: Как я могу проверить, подключен ли я к базе данных MySQL или SQLServer и использую эту информацию в параметре?Проверка подключенной базы данных - Java persistence API

ответ

0

Я решил проблему чтения по тегу свойство и Атрибутимя = «eclipselink.target-базы данных» в конфигурационном файле persistence.xml. Я использовал этот импорт:

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; 
} 

В другом классе вы должны присвоить строку возвращения этого метода. И это ответ, теперь вы можете использовать эту информацию в условном выражении типа «если».

0

создать булевское значение connectedToDatabase и инициализировать его значением false. создайте блок try и catch, который сделает соединение. внутри try инициализировать connectedToDatabase для true. Если исключение поймано при попытке подключить логическое значение, оно останется ложным.

private boolean connectedToDatabase = false; 

try 
{ 
    connection = DriverManager.getConnection(urlOfDatabase); 
    connectedToDatabase = true; 
}catch(SQLException sqlException){ 
    sqlException.printStackTrace();} 

, то вы можете сделать оператор if, который будет генерировать исключение, если connectedToDatabase является ложным. просто убедитесь, что метод выбрасывает IllegalStateException.

if(!connectedToDatabase) 
    throw new IllegalStateException("Not Connected To Database"); 

Это не сработает, если сервер опустится, потому что он будет определять только успешное соединение.

+0

Это не ответ, потому что вы отправили код, который используется для традиционного подключения к базе данных в JAVA. Это не работает для проекта, использующего JPA и файл persistence.xml. – dpetersen

Смежные вопросы