Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java/Mysql如何将整个SQL文件注入Mysql服务器?_Java_Mysql - Fatal编程技术网

Java/Mysql如何将整个SQL文件注入Mysql服务器?

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文件执行此操作? 如

如何从java程序将.sql文件加载到mysql数据库中?我尝试从自包含的jar中提取sql资源文件,我尝试processBuilder查找并运行外部shell命令。我什么都试过了,但没有一种方法是正确的

因此,要了解我遇到的问题,只需执行以下操作:

在任何数据库上执行mysqldump:
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依赖项)

  • 确保mysql连接器位于类路径中,例如java-cp mysql-connector-java-5.1.13-bin.jar,或者如果您使用ant或NetBeans构建项目,请确保mysql连接器作为库包含,这样在构建项目时,java-jar YourApplication.jar应该找到lib/mysql-connector-java-5.1.13-bin.jar或不管怎样
  • 在源代码中,加载驱动程序:Class.forName(“com.mysql.jdbc.driver”).newInstance()
  • 加载.sql文件:String sql=new Scanner(新文件(“yourfile.sql”)).useDelimiter(“\Z”).next()
  • 连接到数据库:Connection conn=DriverManager.getConnection(“jdbc:mysql://localhost:3306/database“、用户名、密码)
  • 执行sql:Statement st=conn.createStatement();st.Execute(sql)
  • 以上假设.sql文件包含sql语句

  • 确保mysql连接器位于类路径中,例如java-cp mysql-connector-java-5.1.13-bin.jar,或者如果您使用ant或NetBeans构建项目,请确保mysql连接器作为库包含,这样在构建项目时,java-jar YourApplication.jar应该找到lib/mysql-connector-java-5.1.13-bin.jar或不管怎样
  • 在源代码中,加载驱动程序:Class.forName(“com.mysql.jdbc.driver”).newInstance()
  • 加载.sql文件:String sql=new Scanner(新文件(“yourfile.sql”)).useDelimiter(“\Z”).next()
  • 连接到数据库:Connection conn=DriverManager.getConnection(“jdbc:mysql://localhost:3306/database“、用户名、密码)
  • 执行sql:Statement st=conn.createStatement();st.Execute(sql)

  • 以上假设您的.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);