将mysqldump加载为字符串

时间:2015-08-11 08:55:42

标签: mysql scala sbt mysqldump anorm

为了测试我正在加载一个完整的mysqldump(少于100行的测试数据库),我希望能够从scala + anorm(没有bash脚本等)加载它,并尝试了这个:< / p>

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中使用一个选项来生成一个可以正确加载的文件,还是有其他解决方法?

仅供参考:如果我将SQL语句更改为以下内容,则会正确创建表

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

1 个答案:

答案 0 :(得分:0)

逐行读取行(并忽略空格),只要&#34;创建表&#34;声明更改为有行换行。

val lines = scala.io.Source.fromFile("src/test/resources/blackbox_test.sql").getLines()
lines.foreach(line => {
    if(!line.isEmpty) SQL(s"""$line""").execute()
})