Импортировать (mysql) дамп базы данных программно через Java - PullRequest
15 голосов
/ 23 декабря 2009

Как я могу импортировать файл дампа базы данных mysql (содержит операторы вставки и создания таблиц) программно через Java-программу. Мне нужно это как этап настройки юнит-теста.

К сожалению, это не работает:

Connection conn = dbConnectionSource.getConnection();
Statement stmt = conn.createStatement();
stmt.execute(FileUtils.readFileToString(new File("./some-sql-file")));
conn.close();

Спасибо, -

PS - В Rails я использовал светильники для заполнения тестовой базы данных. Я сделал так, чтобы rails rails создавали базовые таблицы, настраивая среду для тестирования, что-то похожее в Java.

Ответы [ 4 ]

13 голосов
/ 24 декабря 2009

Вы можете запустить новый процесс из java и выполнить эту команду, если у вас есть доступ к исполняемому файлу mysql, где бы вы ни выполняли импорт. Примерно так:

Runtime rt = Runtime.getRuntime();
Process pr = rt.exec("mysql -p -h ServerName DbName < dump.sql");
4 голосов
/ 31 августа 2012

Резервное копирование:

/******************************************************/
//Database Properties
/******************************************************/
String dbName = “dbName”;
String dbUser = “dbUser”;
String dbPass = “dbPass”;

/***********************************************************/
// Execute Shell Command
/***********************************************************/
String executeCmd = “”;
executeCmd = “mysqldump -u “+dbUser+” -p”+dbPass+” “+dbName+” -r backup.sql”;
}
Process runtimeProcess =Runtime.getRuntime().exec(executeCmd);
int processComplete = runtimeProcess.waitFor();
if(processComplete == 0){

out.println(“Backup taken successfully”);

} else {

out.println(“Could not take mysql backup”);

}

Восстановление:

/******************************************************/
//Database Properties
/******************************************************/
String dbName = “dbName”;
String dbUser = “dbUser”;
String dbPass = “dbPass”;

/***********************************************************/
// Execute Shell Command
/***********************************************************/
String executeCmd = “”;

executeCmd = new String[]{“/bin/sh”, “-c”, “mysql -u” + dbUser+ ” -p”+dbPass+” ” + dbName+ ” < backup.sql” };

}
Process runtimeProcess =Runtime.getRuntime().exec(executeCmd);
int processComplete = runtimeProcess.waitFor();
if(processComplete == 0){

out.println(“success”);

} else {

out.println(“restore failure”);

}
3 голосов
/ 24 декабря 2009

Лично я бы не рекомендовал загружать обычный дамп SQL таким образом, потому что вам понадобится нетривиальный код для разбора или хотя бы токенизации SQL.

Я бы порекомендовал использовать дампы данных CSV, вы можете загрузить их с помощью синтаксиса LOAD DATA INFILE. Смотри: http://dev.mysql.com/doc/refman/5.1/en/load-data.html

Конечно, вам все равно нужно убедиться, что целевые таблицы существуют, но если вы знаете, что вам нужно только проанализировать создание таблиц DDL, это значительно упростит ваш код Java.

Обратите внимание, что вы можете использовать mysqldump для извлечения данных CSV из вашей базы данных, см .: http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_tab

0 голосов
/ 22 февраля 2013

Эффективное решение можно найти здесь:

https://stackoverflow.com/a/1044837

Здесь объясняется, как запускать любой сценарий sql через jdbc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...