假設你的腳本是「myscript.sql」,其保存在「C:\」,那麼下面的命令可用於導入腳本,將數據庫
c:\Program Files\MySQL\MySQL Server 5.1\bin\mysql.exe --host=127.0.0.1 --user=root --password=root < c:/myscript.sql
這個命令可以在Runtime.getRuntime().exec
中使用。但是,當我嘗試有一些簡單的問題,它不能正常工作。所以我用另一種方法。
在此之前,我假設你的數據庫腳本比數據庫中包含更多的數據。所以,即使我刪除數據庫,然後使用數據庫腳本導入數據庫,我不會丟失任何數據。我只是刪除(刪除)當前數據庫並從數據庫腳本文件導入數據庫。
爲了解決上面提到的Runtime.getRuntime().exec
,我創建了一個名爲「ba.bat」的批處理文件。並將該批處理文件作爲「c:\ bat.bat」存儲在c:驅動器中。該批處理文件的內容如下
%1\mysql.exe --host=%2 --user=%3 --password=%4 < c:/myscript.sql
exit
你可以用下面的語法調用給出ba.bat arg1 arg2 arg3 arg4
,其中Arg1 =路徑MySQL的bin文件夾例如= C:\ Program Files文件\的MySQL \ MySQL服務器5.1 \ BIN ARG2 = mysql的主機IP地址 ARG3 = MySQL用戶名 ARG4 = mysql的密碼
,最終java程序如下
import java.sql.*;
public class NewClass {
public static void main(String[] args) {
Connection conn = null;
String mysqlPath="c:/Program Files/MySQL/MySQL Server 5.1/bin";
String url = "jdbc:mysql://192.168.100.86/";
String databaseIp="192.168.100.86";
String dbName = "databasename";
java.sql.Statement stmt = null;
String query = "";
ResultSet result = null;
String driver = "com.mysql.jdbc.Driver";
String userName = "root";
String password = "root";
try {
Class.forName(driver).newInstance();
conn = DriverManager.getConnection(url , userName, password);
stmt = conn.createStatement();
result = null;
String test,input;
stmt.execute("drop database if exists "+dbName);
String fullPathWithArgs ="C:/ba.bat \""+mysqlPath+"\" "+databaseIp+" "+userName+" "+password+"";
Process runtimeProcess =Runtime.getRuntime().exec(fullPathWithArgs);
int processComplete = runtimeProcess.waitFor();
if (processComplete == 0)
{
System.out.println("DatabaseManager.restore: Restore Successfull");
}
else
{
System.out.println("DatabaseManager.restore: Restore Failure!");
}
conn.close();
} catch (Exception e) {
System.out.println("exception: " + e.getMessage());
}
}
}
給出
在上面的java程序中,我正在刪除數據庫並從腳本導入數據庫。 您必須在您的腳本中使用CREATE DATABASE IF NOT EXISTS
.From問題,我覺得這是你想要的。請讓我知道,如果有任何問題或以上不是你的預期答案。
還有一件事,如果你想將數據添加到現有的數據庫,那麼請從Java代碼刪除
stmt.execute("drop database if exists "+dbName);
,也使所需的列在你的數據庫表中「獨一無二」即..創建唯一索引需要的表列
是否使用'mysqldump'創建了數據庫轉儲? –
另外什麼是數據庫結構,它是否使用自動遞增的任何列可能與您導入的數據重疊? –
表格包含自動增量。 – Gapchoos