假设您的脚本是“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代码,并将数据库表中的所需列设置为“唯一”,即..为所需的表列创建唯一索引