Подтвердить что ты не робот

Импортирование дампа базы данных (mysql) программно через Java

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

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

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

Спасибо, -A

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

4b9b3361

Ответ 1

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

Runtime rt = Runtime.getRuntime();
Process pr = rt.exec("mysql -p -h ServerName DbName < dump.sql");

Ответ 2

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

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

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

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

Ответ 3

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

/******************************************************/
//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");

}

Ответ 4

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

fooobar.com/info/95062/...

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