2014-07-24 2 views
2

У меня есть файл сценария SQL, который отбрасывает и воссоздает различные таблицы, а также вставляет в эти таблицы различные записи. Сценарий отлично работает при выполнении в консоли SQL-запросов, но мне нужно, чтобы он выполнялся Менеджером сущностей.JPA Entity Manager - Как запустить файл сценария SQL?

Любая идея о том, как я смогу это сделать?

Спасибо,

H

+0

В чем главная проблема? вы хотите программно запускать «SQL Script File»? Как 'EntityManager' запускает' SQL Script File'? – CycDemo

+0

Да, поэтому у меня есть .sql-файл, содержащий загрузку SQL-запросов. Я хочу иметь возможность запускать этот файл программно. –

+0

http://stackoverflow.com/questions/1044194/running-a-sql-script-using-mysql-with-jdbc – CycDemo

ответ

0

Late к партии, но вот как я это делаю. Пара вещей, чтобы отметить здесь:

  • Мой SQL файл («SQL-queries.sql») находится на пути к классам - вы можете сделать это любым другим способом, который получит вам входной поток ...
  • Мой SQL файл имеет 1 заявление в каждой строке
  • Я вручную начинающуюся/совершающих сделки, по одному для каждой строки/оператора в файле

Вот метод, чтобы выполнить файл:

void executeStatements(BufferedReader br, EntityManager entityManager) throws IOException { 
    String line; 
    while((line = br.readLine()) != null) 
    { 
     entityManager.getTransaction().begin(); 
     entityManager.createNativeQuery(line).executeUpdate(); 
     entityManager.getTransaction().commit(); 
    } 
} 

Вот как я это называю:

 InputStream sqlFileInputStream = Thread.currentThread().getContextClassLoader() 
       .getResourceAsStream("geo-data.sql"); 

     // Convert input stream to something that can be read line-by-line 

     BufferedReader sqlFileBufferedReader = new BufferedReader(new InputStreamReader(sqlFileInputStream)); 
     executeStatements(sqlFileBufferedReader, dao.getEntityManager()); 

Я тестировал номинально 1 сделки вместо 1 в операторе (заметим, что это означает, что один плохой запрос будет разорвать все) и время, чтобы выполнить одно и то же:

void executeStatements(BufferedReader br, EntityManager entityManager) throws IOException { 
    String line; 
    entityManager.getTransaction().begin(); 
    while((line = br.readLine()) != null) 
    { 
     entityManager.createNativeQuery(line).executeUpdate(); 
    } 
    entityManager.getTransaction().commit(); 
} 
Смежные вопросы