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=mysql bin 文件夹的路径示例 =c:\Program Files\MySQL\MySQL Server 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在你的脚本中使用。从你的问题来看,我觉得这就是你想要的。如果有任何问题或以上不是您预期的答案,请告诉我。

如果您想将数据附加到现有数据库,还有一件事请删除

stmt.execute("drop database if exists  "+dbName);

来自java代码,并将数据库表中的所需列设置为“唯一”,即..为所需的表列创建唯一索引

于 2012-12-11T15:19:23.030 回答