设为首页 收藏本站
查看: 408|回复: 0

[经验分享] 利用Java进行MySql数据库的导入和导出 转

[复制链接]

尚未签到

发表于 2016-10-20 07:53:21 | 显示全部楼层 |阅读模式
  利用Java来进行Mysql数据库的导入和导出的总体思想是通过Java来调用命令窗口执行相应的命令。
  
  MySql导出数据库的命令如下:
  
Sql代码   DSC0000.png


  • mysqldump -uusername -ppassword -hhost -Pport exportDatabaseName > exportPath  

  利用Java调用命令窗口执行命令来进行MySql导入数据库一般分三步走:
  第一步:登录Mysql数据库,在登录数据库的时候也可以指定登录到哪个数据库,如果指定了则可以跳过第二步;
  第二步:切换数据库到需要导入的目标数据库
  第三步:利用命令开始导入
  
  在进行导出的时候,需要注意命令语句的运行环境,如果已经将mysql安装路径下的bin加入到
  系统的path变量中,那么在导出的时候可以直接使用命令语句,否则,就需要在执行命令语句的
  时候加上命令所在位置的路径,即mysql安装路径想的bin下的mysqldump命令。
  
  基本代码如下:
  
Java代码  


  • import java.io.IOException;  
  • import java.io.InputStream;  
  • import java.io.OutputStream;  
  • import java.io.OutputStreamWriter;  
  • import java.util.Properties;  
  •   
  • /** 
  •  * 在进行导出的时候,需要注意命令语句的运行环境,如果已经将mysql安装路径下的bin加入到 
  •  * 系统的path变量中,那么在导出的时候可以直接使用命令语句,否则,就需要在执行命令语句的 
  •  * 时候加上命令所在位置的路径,即mysql安装路径想的bin下的mysqldump命令 
  •  * @author andy 
  •  * 
  •  */  
  • public class MySqlImportAndExport {  
  •   
  •     public static void main(String args[]) throws IOException {  
  •         InputStream is = MySqlImportAndExport.class.getClassLoader().getResourceAsStream("jdbc.properties");  
  •         Properties properties = new Properties();  
  •         properties.load(is);  
  • //      MySqlImportAndExport.export(properties);//这里简单点异常我就直接往上抛  
  •         MySqlImportAndExport.importSql(properties);  
  •     }  
  •       
  •     /** 
  •      * 根据属性文件的配置导出指定位置的指定数据库到指定位置 
  •      * @param properties 
  •      * @throws IOException 
  •      */  
  •     public static void export(Properties properties) throws IOException {  
  •         Runtime runtime = Runtime.getRuntime();  
  •         String command = getExportCommand(properties);  
  •         runtime.exec(command);//这里简单一点异常我就直接往上抛  
  •     }  
  •       
  •     /** 
  •      * 根据属性文件的配置把指定位置的指定文件内容导入到指定的数据库中 
  •      * 在命令窗口进行mysql的数据库导入一般分三步走: 
  •      * 第一步是登到到mysql; mysql -uusername -ppassword -hhost -Pport -DdatabaseName;如果在登录的时候指定了数据库名则会 
  •      * 直接转向该数据库,这样就可以跳过第二步,直接第三步;  
  •      * 第二步是切换到导入的目标数据库;use importDatabaseName; 
  •      * 第三步是开始从目标文件导入数据到目标数据库;source importPath; 
  •      * @param properties 
  •      * @throws IOException  
  •      */  
  •     public static void importSql(Properties properties) throws IOException {  
  •         Runtime runtime = Runtime.getRuntime();  
  •         //因为在命令窗口进行mysql数据库的导入一般分三步走,所以所执行的命令将以字符串数组的形式出现  
  •         String cmdarray[] = getImportCommand(properties);//根据属性文件的配置获取数据库导入所需的命令,组成一个数组  
  •         //runtime.exec(cmdarray);//这里也是简单的直接抛出异常  
  •         Process process = runtime.exec(cmdarray[0]);  
  •         //执行了第一条命令以后已经登录到mysql了,所以之后就是利用mysql的命令窗口  
  •         //进程执行后面的代码  
  •         OutputStream os = process.getOutputStream();  
  •         OutputStreamWriter writer = new OutputStreamWriter(os);  
  •         //命令1和命令2要放在一起执行  
  •         writer.write(cmdarray[1] + "\r\n" + cmdarray[2]);  
  •         writer.flush();  
  •         writer.close();  
  •         os.close();  
  •     }  
  •       
  •     /** 
  •      * 利用属性文件提供的配置来拼装命令语句 
  •      * 在拼装命令语句的时候有一点是需要注意的:一般我们在命令窗口直接使用命令来 
  •      * 进行导出的时候可以简单使用“>”来表示导出到什么地方,即mysqldump -uusername -ppassword databaseName > exportPath, 
  •      * 但在Java中这样写是不行的,它需要你用-r明确的指出导出到什么地方,如: 
  •      * mysqldump -uusername -ppassword databaseName -r exportPath。 
  •      * @param properties 
  •      * @return 
  •      */  
  •     private static String getExportCommand(Properties properties) {  
  •         StringBuffer command = new StringBuffer();  
  •         String username = properties.getProperty("jdbc.username");//用户名  
  •         String password = properties.getProperty("jdbc.password");//用户密码  
  •         String exportDatabaseName = properties.getProperty("jdbc.exportDatabaseName");//需要导出的数据库名  
  •         String host = properties.getProperty("jdbc.host");//从哪个主机导出数据库,如果没有指定这个值,则默认取localhost  
  •         String port = properties.getProperty("jdbc.port");//使用的端口号  
  •         String exportPath = properties.getProperty("jdbc.exportPath");//导出路径  
  •           
  •         //注意哪些地方要空格,哪些不要空格  
  •         command.append("mysqldump -u").append(username).append(" -p").append(password)//密码是用的小p,而端口是用的大P。  
  •         .append(" -h").append(host).append(" -P").append(port).append(" ").append(exportDatabaseName).append(" -r ").append(exportPath);  
  •         return command.toString();  
  •     }  
  •       
  •     /** 
  •      * 根据属性文件的配置,分三步走获取从目标文件导入数据到目标数据库所需的命令 
  •      * 如果在登录的时候指定了数据库名则会 
  •      * 直接转向该数据库,这样就可以跳过第二步,直接第三步;  
  •      * @param properties 
  •      * @return 
  •      */  
  •     private static String[] getImportCommand(Properties properties) {  
  •         String username = properties.getProperty("jdbc.username");//用户名  
  •         String password = properties.getProperty("jdbc.password");//密码  
  •         String host = properties.getProperty("jdbc.host");//导入的目标数据库所在的主机  
  •         String port = properties.getProperty("jdbc.port");//使用的端口号  
  •         String importDatabaseName = properties.getProperty("jdbc.importDatabaseName");//导入的目标数据库的名称  
  •         String importPath = properties.getProperty("jdbc.importPath");//导入的目标文件所在的位置  
  •         //第一步,获取登录命令语句  
  •         String loginCommand = new StringBuffer().append("mysql -u").append(username).append(" -p").append(password).append(" -h").append(host)  
  •         .append(" -P").append(port).toString();  
  •         //第二步,获取切换数据库到目标数据库的命令语句  
  •         String switchCommand = new StringBuffer("use ").append(importDatabaseName).toString();  
  •         //第三步,获取导入的命令语句  
  •         String importCommand = new StringBuffer("source ").append(importPath).toString();  
  •         //需要返回的命令语句数组  
  •         String[] commands = new String[] {loginCommand, switchCommand, importCommand};  
  •         return commands;  
  •     }  
  •       
  • }  

  
  
  上述使用的jdbc.properties文件
  
Properties代码  


  • jdbc.username=root  
  • jdbc.password=password  
  • jdbc.host=localhost  
  • jdbc.port=3306  
  • jdbc.exportDatabaseName=dbName  
  • jdbc.exportPath=d\:\\dbName.sql  
  • jdbc.importDatabaseName=test  
  • jdbc.importPath=d\:\\dbName.sql  

 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-288598-1-1.html 上篇帖子: 解决c3p0和MySQL集成情况下,连接长时间闲置后重新使用时报错的问题 下篇帖子: [MySQL生产环境] Innodb存储引擎内存报警问题处理过程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表