2015-08-11 2 views
0

Для тестирования я загружаю полный mysqldump (тестовой базы данных с менее чем 100 строк), я хотел бы иметь возможность загружать его из scala + anorm (без скриптов bash и т. Д.) И попытался это:Загрузка mysqldump как строка

import anorm._ 
import java.sql.DriverManager 
object CheckDatabase { 
    def main(args: Array[String]): Unit = { 
     val jdbcUrl = "jdbc:mysql://db.local.test.com:3306/blackbox?user=dev&password=secret" 
     implicit val con: java.sql.Connection = DriverManager.getConnection(jdbcUrl) 
     val importSql = SQL(s"""${scala.io.Source.fromFile("blackbox_test.sql").mkString}""") 
     importSql.execute() 
    } 
} 

это терпит неудачу с ошибкой:

[error] (run-main-0)  com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an  error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CREATE TABLE `rapport_blackbox_test` (
[error] `id` int(11) NOT NULL AUTO_INCREMENT, 
[error] ' at line 13 

Я предполагаю, что он должен с переносами или что-то. Есть ли опция, которую я могу использовать в mysqldump для создания файла, который будет загружаться правильно, или есть ли другой способ обхода?

FYI: если я меняю заявление SQL на следующее это создает таблицу правильно

val importSql = SQL("CREATE TABLE `rapport_blackbox_test` (`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY)") 
+1

Anorm работает с подготовленным оператором, а не с каким-то таким сырым SQL-файлом. Вы можете открыть транзакцию и выполнить итерацию оператора, выполняя каждый из них. – cchantep

ответ

0

Чтения строк по одному (и игнорирование заготовок) работы, при условии, что «CREATE TABLE» заявление изменяется у него есть разрывы строк.

val lines = scala.io.Source.fromFile("src/test/resources/blackbox_test.sql").getLines() 
lines.foreach(line => { 
    if(!line.isEmpty) SQL(s"""$line""").execute() 
}) 
Смежные вопросы