当前位置: 代码迷 >> 综合 >> java操作shell命令(2)---java执行mysql脚本
  详细解决方案

java操作shell命令(2)---java执行mysql脚本

热度:97   发布时间:2024-02-21 06:55:24.0
### 这里的命令我统一弄到配置文件中。注释中也可以用package com.park.mecupdate.utils;import com.park.mecupdate.config.MecDbconfig;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.jdbc.ScriptRunner;
import org.springframework.beans.factory.annotation.Autowired;import java.io.*;
import java.nio.charset.Charset;
import java.sql.Connection;
import java.sql.DriverManager;/*** 执行sql脚本* @Author Miracle Luna* @Date 2020/9/16 11:59* @Version 1.0* @description*/
public class ExecSqlUtil {private static String dbHost="localhost";               // 数据库地址private static String dbName="test";                      // 数据库名称private static String userName = "root";                // 登录名称private static String userPassword = "123456";         // 登录密码private static String dbPort="3306";// 数据库端口号public static void main(String[] args) {try {runSqlFile(dbHost,dbPort,userName,userPassword,dbName,"D:/data/db/","test.sql","cmd","/c");} catch (Exception e) {System.out.println("sql脚本执行发生异常");e.printStackTrace();}}//    /**
//     * @功能描述:   获取数据库连接
//     * @return
//     * @throws Exception
//     */
//    public static Connection getMySqlConnection() throws Exception {
//        Class.forName("com.mysql.jdbc.Driver");
//        String url="jdbc:mysql://"+dbHost+":"+dbPort+"/"+dbName+"?useUnicode=true&characterEncoding=utf-8&port="+dbPort+"&autoReconnect=true";
//        return DriverManager.getConnection(url,userName,userPassword);
//
//    }/*** 执行SQL脚本文件* @param ip MySQL数据库所在服务器地址IP* @param host 数据库端口号* @param userName 进入数据库所需要的用户名* @param password 进入数据库所需要的密码* @param databaseName 要导入的数据库名* @param filePath SQL脚本文件目录* @param fileName SQL脚本文件名称* @throws IOException*/public static void runSqlFile(String ip, String host, String userName, String password, String databaseName, String filePath, String fileName,String var1,String var2) throws IOException{String cmdarray[] = { "mysql -h" + ip + " -P" + host + " -u" + userName + " -p" + password + " " + databaseName, "source " + filePath + fileName };Runtime runtime = Runtime.getRuntime();OutputStream os = null;OutputStreamWriter writer = null;try {// winddow cmd//String [] getRunningcmd = {"cmd","/c",cmdarray[0]};// linux cmd// String [] getRunningcmd = {"/bin/sh","-c",cmdarray[0]};String [] getRunningcmd = {var1,var2,cmdarray[0]};Process process = runtime.exec(getRunningcmd);//cmd之后执行数组的第一个条件进入数据库//执行了第一条命令以后已经登录到mysql了os = process.getOutputStream();writer = new OutputStreamWriter(os);writer.write(cmdarray[1]);//向图形界面输出第二第三条命令。中间 \r\n  作用是用来换行的,writer.flush();} finally {try {if (writer != null) {writer.close();}if (os != null) {os.close();}} catch (IOException e) {e.printStackTrace();}}}
}