スクリプトが「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 = mysqlbinフォルダーへのパスの例=c:\ Program Files \ MySQL \ MySQL Server 5.1 \ bin arg2 = mysql host ip address arg3 = mysql username arg4 = mysql password
そして、最終的な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
ます。あなたの質問から、これがあなたが望むものだと感じました。問題が発生した場合、またはそれ以上が期待どおりの回答ではない場合は、お知らせください。
既存のデータベースにデータを追加する場合は、もう1つ削除してください
stmt.execute("drop database if exists "+dbName);
Javaコードから、データベーステーブルの必須列を「一意」にします。つまり、必須テーブル列の一意のインデックスを作成します。