V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
riverphoenix
V2EX  ›  问与答

java 调用 mysql set 命令, Runtime 调用失败

  •  1
     
  •   riverphoenix · 2015-06-05 15:34:18 +08:00 · 2600 次点击
    这是一个创建于 3248 天前的主题,其中的信息可能已经有所发展或是发生改变。

    StringBuffer command = new StringBuffer();

    String username ="root";//用户名

    String password ="root";//用户密码

    String host = "127.0.0.1";//从哪个主机导出数据库,如果没有指定这个值,则默认取localhost  
        String port ="3306";//使用的端口号  
    
    
        //注意哪些地方要空格,哪些不要空格  
        command.append("mysql -u").append(username).append(" -p").append(password)//密码是用的小p,而端口是用的大P。  
        .append(" -h").append(host).append(" -P").append(port).append(" ")
        .append(" -e SET GLOBAL rpl_semi_sync_master_timeout = 3000 ");  
         Runtime runtime = Runtime.getRuntime();
         runtime.exec(command);
    

    代码很简单,就是想实现一个简单的配置my.ini的需求,但是并不返回结果,调用也失败了。求问是什么地方出问题了,谢谢

    10 条回复    2015-06-08 09:22:29 +08:00
    riverphoenix
        1
    riverphoenix  
    OP
       2015-06-05 15:35:15 +08:00
    因为不能重启mysql,所以放弃了直接改写配置文件的想法,现在想要不要通过调用shell脚本来解决问题
    riverphoenix
        2
    riverphoenix  
    OP
       2015-06-05 16:59:06 +08:00
    额,现在有个想法,写一个sql脚本,然后由java来调用,但是没有实验过,
    liprais
        3
    liprais  
       2015-06-05 16:59:59 +08:00   ❤️ 1
    调用失败返回的什么信息?
    riverphoenix
        4
    riverphoenix  
    OP
       2015-06-05 17:03:40 +08:00
    @liprais 什么都不返回,消息直接阻塞了
    Septembers
        5
    Septembers  
       2015-06-05 17:22:17 +08:00 via Android
    @riverphoenix 写个脚本吧,吧参数引入环境变量,然后运行脚本
    riverphoenix
        6
    riverphoenix  
    OP
       2015-06-05 17:50:23 +08:00
    @Septembers 现在有个问题,我的一台电脑上可能安装多个mysql,这样就需要把端口号和ip地址传给脚本,而且我执行的命令是更改mysql配置的,不知道这么做可不可以,有没有更好的方法
    ruosu0710
        7
    ruosu0710  
       2015-06-05 22:37:00 +08:00
    你上面的java 中调用cmd .
    看一下你的执行目录.
    能不能用mysql或者看一下mysql有没有加入环境变量.
    如果不行的话.定位到mysql 的bin目录执行.
    类似/app/mysql/bin/mysql -uroot -proot
    wohenyingyu01
        8
    wohenyingyu01  
       2015-06-06 11:35:26 +08:00   ❤️ 1
    你在命令行输入这个指令会进入mysql的命令行吧?当然会阻塞了,为什么不用mysql驱动呢?
    try{
    Class.forName("com.mysql.jdbc.Driver");
    //Java 8 new feature: try-with-resources;
    try(Connection con=DriverManager.getConnection(
    "jdbc:mysql://127.0.0.1:3306/mysql?zeroDateTimeBehavior=convertToNull",
    username,
    password);
    Statement s=con.createStatement();
    ){
    con.setAutoCommit(true);
    long resultImport=s.executeUpdate("SET GLOBAL rpl_semi_sync_master_timeout = 3000");
    System.out.println(resultImport);
    }// TODO code application logic here
    catch(SQLException e){
    e.printStackTrace();
    }
    }
    catch(ClassNotFoundException cnf){
    System.out.println("MySQL drivers can not be loaded!!!");
    }
    riverphoenix
        9
    riverphoenix  
    OP
       2015-06-08 09:21:32 +08:00
    @wohenyingyu01 谢谢,没试过在jdbc里面更改mysql配置,我试试
    riverphoenix
        10
    riverphoenix  
    OP
       2015-06-08 09:22:29 +08:00
    @ruosu0710 应该不是这个问题,我的mysql在我本地服务中可以查到,直接cmd进去也可以执行,现在就是没有好的想法,
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5352 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 08:16 · PVG 16:16 · LAX 01:16 · JFK 04:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.