mysql import java_Java执行Mysql导入

本文介绍了如何通过BufferedReader逐行读取SQL文件,批量执行导入,并提供了两种方法:一是利用Runtime.exec调用mysql命令行,二是直接在命令中包含文件路径。讨论了文件读取、编码问题及命令行执行的细节。
摘要由CSDN通过智能技术生成

String sql = "";

BufferedReader br = new BufferedReader(new FileReader(file));

while ((sql = br.readLine()) != null) {//使用readLine方法,一次读一行

if (sql.length() > 1) {

if (isFirstLine) {

sql = sql.substring(1);

}

stmt.addBatch(sql);

executeCount++;

}

isFirstLine = false;

}

br.close();

缺点:必须一行是一个可执行SQL语句。

2、将上传SQL文件读取到BufferedReader中,调用mysql执行。

Process child = rt.exec("mysql -uroot -proot --default-character-set=utf8 prototype ");

OutputStream out = child.getOutputStream();//控制台的输入信息作为输出流

String line;

StringBuffer sb = new StringBuffer("");

String outStr;

BufferedReader br = new BufferedReader(new InputStreamReader(

new FileInputStream(fPath), "utf8"));

while ((line = br.readLine()) != null) {

sb.append(line + "\r\n");

}

outStr = sb.toString();

OutputStreamWriter writer = new OutputStreamWriter(out, "utf8");

writer.write(outStr);

// 注:这里如果用缓冲方式写入文件的话,会导致中文乱码,用flush()方法则可以避免

writer.flush();

// 别忘记关闭输入输出流

out.close();

br.close();

writer.close();

3、通过Runtime.exec方法,直接调用mysql导入功能导入。2部操作String username = "root";//用户名

String password = "root";//密码

String host = "localhost";//导入的目标数据库所在的主机

String port = "3306";//使用的端口号

String character = "utf8";// 默认字符集

String importDatabaseName = "prototype";//导入的目标数据库的名称

String importPath = file.getAbsolutePath();//导入的目标文件所在的位置

//第一步,获取登录命令语句

StringBuilder sb = new StringBuilder();

sb.append("mysql -u").append(username);

sb.append(" -p").append(password);

sb.append(" -h").append(host);

sb.append(" -P").append(port);

sb.append(" --default-character-set=").append(character);

String loginCommand = sb.toString();

//第二步,获取切换数据库到目标数据库的命令语句

String switchCommand = new StringBuilder("use ").append(importDatabaseName).toString();

//第三步,获取导入的命令语句

String importCommand = new StringBuilder("source ").append(importPath).toString();

//需要返回的命令语句数组

String[] commands = new String[] { loginCommand, switchCommand, importCommand };

Runtime runtime = Runtime.getRuntime();

Process process = runtime.exec(commands[0]);

//执行了第一条命令以后已经登录到mysql了,所以之后就是利用mysql的命令窗口

//进程执行后面的代码

OutputStream os = process.getOutputStream();

OutputStreamWriter writer = new OutputStreamWriter(os);

//命令1和命令2要放在一起执行

writer.write(commands[1] + "\r\n" + commands[2]);

writer.flush();

writer.close();

os.close();

process.destroy();

4、通过Runtime.exec方法,直接调用mysql导入功能导入。1部操作

String cmd = "cmd /c mysql -uroot -proot --default-character-set=utf8 prototype < \""

+ file.getAbsolutePath() + "\"";

Runtime rt = Runtime.getRuntime();

Process p = rt.exec(cmd);

p.waitFor();

p.destroy();

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2014-06-05 09:50

浏览 1313

分类:数据库

评论

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值