Java/Mysql如何将整个SQL文件注入Mysql服务器?
如何从java程序将.sql文件加载到mysql数据库中?我尝试从自包含的jar中提取sql资源文件,我尝试processBuilder查找并运行外部shell命令。我什么都试过了,但没有一种方法是正确的 因此,要了解我遇到的问题,只需执行以下操作: 在任何数据库上执行mysqldump:Java/Mysql如何将整个SQL文件注入Mysql服务器?,java,mysql,Java,Mysql,如何从java程序将.sql文件加载到mysql数据库中?我尝试从自包含的jar中提取sql资源文件,我尝试processBuilder查找并运行外部shell命令。我什么都试过了,但没有一种方法是正确的 因此,要了解我遇到的问题,只需执行以下操作: 在任何数据库上执行mysqldump:mysqldump-uroot--routines myDB>~/Desktop/myDB.sql 现在让我们尝试从java/JDBCAPI重新创建整个数据库。如何正确地使用mydB.sql文件执行此操作? 如
mysqldump-uroot--routines myDB>~/Desktop/myDB.sql
现在让我们尝试从java/JDBCAPI重新创建整个数据库。如何正确地使用mydB.sql文件执行此操作?
如果您创建了一个很好的jdbc语句来循环数据库文件,这可能会很好,但是当您得到这样一个转储的一部分时,它会变得很糟糕
问题1将遇到以下示例:
这就是jdbc的局限性吗?是否有一些我缺少的好api,我可以调用它们,比如mysql.createDatabase(myDB.sql)。如果它不能通过JDBC工作,那么我建议这样做 通常我使用ANT执行这类任务(如执行mysql转储文件):
基本上,您可以从代码中构造和调用ant任务(如果您向类中添加了必要的ant依赖项。如果它不能通过JDBC工作,那么我建议这样做 通常我使用ANT执行这类任务(如执行mysql转储文件):
基本上,您可以从代码中构造和调用ant任务(如果您向类中添加必要的ant依赖项)
以上假设您的.sql文件包含sql语句。我不确定这是最好的方法,但在类似的情况下,我需要在运行时创建数据库,这对我来说是有效的: 首先定义以下变量:
private static final String BASE_MYSQL_COMMAND_LINE_STR = "mysql -uUSER -pPASSWORD -h localhost < ";
然后,假设您的程序中有一个指向“mydB.sql”db文件的文件对象“sqlFile”:
我不确定这是不是最好的方法,但在我需要在运行时创建数据库的类似情况下,这对我来说是有效的: 首先定义以下变量:
private static final String BASE_MYSQL_COMMAND_LINE_STR = "mysql -uUSER -pPASSWORD -h localhost < ";
然后,假设您的程序中有一个指向“mydB.sql”db文件的文件对象“sqlFile”:
有一个高级SQL解析器,可以即时处理mysql转储。为您的用例配置它应该很简单。有一个高级SQL解析器,可以即时处理mysql转储。为您的用例配置它应该很简单。它对您有用吗?您只是询问方法的正确性,还是根本不起作用d?如果没有,那么请告诉我问题是什么:它是在jar中定位文件?还是在ProcessBuilder中运行文件?或者两者都运行?@A.J。请看我刚刚发布的编辑。我一直在尝试让它工作,但我从来没有觉得这是一种专业的方式。我正在做一个黑客工作,我希望要查看正确的方法,可能会重复它对您有效吗?您只需询问该方法的正确性,或者它从未有效过?如果没有,请告诉问题点是什么:它是在jar中定位文件?还是在ProcessBuilder中运行文件?或者两者都有效?@A.J。请参阅我刚刚发布的编辑。我在tryi中摸索过ng想让它工作,但我从来没有觉得这是一种专业的方法。我正在做一个黑客工作的方法,我希望看到正确的方法可能重复的是,我也做过这个方法。我认为这是一个黑客工作,并觉得必须有一个更简单的方法通过jdbc驱动我不认为有一种方法在t中运行脚本文件正如其他成员在其他答案中所建议的那样,他没有解析文件就启动了jdbc驱动程序。至少我在开发代码时没有找到。但是如果你想这样做,你可以使用现有的代码,这样你就不必处理所有的解析来知道命令在哪里。在下面的帖子中检查接受的答案:是的,我已经找到了我认为这是一项黑客工作,并认为必须有一种更简单的方法通过jdbc驱动程序。我不认为有一种方法可以在jdbc驱动程序中运行脚本文件,而不需要像其他成员在另一篇文章中建议的那样解析文件
private static final String BASE_MYSQL_COMMAND_LINE_STR = "mysql -uUSER -pPASSWORD -h localhost < ";
private static void executeCommandInLinuxShell(String command) throws Exception {
String[] cmd = {"/bin/sh", "-c", command};
Process proc = Runtime.getRuntime().exec(cmd);
BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(proc.getInputStream()));
String line;
while ((line = bufferedreader.readLine()) != null);
bufferedreader.close();
proc.waitFor();
}
String scmd = BASE_MYSQL_COMMAND_LINE_STR + sqlFile.getAbsolutePath();
executeCommandInLinuxShell(scmd);