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();
}
В чем главная проблема? вы хотите программно запускать «SQL Script File»? Как 'EntityManager' запускает' SQL Script File'? – CycDemo
Да, поэтому у меня есть .sql-файл, содержащий загрузку SQL-запросов. Я хочу иметь возможность запускать этот файл программно. –
http://stackoverflow.com/questions/1044194/running-a-sql-script-using-mysql-with-jdbc – CycDemo