1

現在、データベースダンプファイルsample.sqlをアプリケーションにインポートしています。データベースには同じテーブルとフィールドが含まれているため、データベースをインポートして既存のテーブルに追加する必要があります。

どうすれば問題を解決できますか?インポートしたデータベースを既存のデータベースに追加するコマンドは何ですか?

ファイルをインポートするコード

try {

    String[] command = new String[]{"\""+this.m_MySqlPath+"mysql\"", Constants.DB_NAME, "-u" + Constants.DB_USER, "-p" + Constants.DB_PASSWORD, "-e", " source "+"\""+FileName+"\"" };
    Process runtimeProcess = Runtime.getRuntime().exec(command, null, new File(this.m_MySqlPath));
    int processComplete = runtimeProcess.waitFor();

    if (processComplete == 0)
    {
        System.out.println("DatabaseManager.restore: Restore Successfull");
    }
    else 
    {
        System.out.println("DatabaseManager.restore: Restore Failure!");
    }
4

1 に答える 1

1

スクリプトが「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コードから、データベーステーブルの必須列を「一意」にします。つまり、必須テーブル列の一意のインデックスを作成します。

于 2012-12-11T15:19:23.030 に答える