如何在windows上从groovy / java执行mysql命令

时间:2014-04-25 10:09:08

标签: mysql windows groovy

我试图从groovy脚本中的文件导入mysql数据库。

我试着这样:

command = """mysql -f -u ${settings.dbUser} -p${settings.dbPassword} -h localhost --default-character-set=latin1 ${settings.dbName} < "$tableDefinitions" """

commandArray[0] = "cmd"
commandArray[1] = "/c"
commandArray[2] = "start " + command

def Process process = new ProcessBuilder(commandArray)
                                    .directory(workingDir)
                                    .redirectErrorStream(true)
                                    .start()

如果我在控制台上输出命令,它看起来像这样:

mysql -f -u root -pHelloStackOverflow -h localhost --default-character-set=latin1 test123 < "C:\Users\XXX\git\YYY\commons\sqlData\table.sql"

但是,如果我这样做,所有发生的事情都会打开一个mysql控制台窗口,我已经登录了它,但没有导入任何内容。如果我在控制台上执行相同的命令,它就可以工作。

我尝试直接调用mysql而不是cmd,但后来我得到了错误&#34;无法运行命令&#34;,&#34;系统无法找到指定的文件&#34;

如果没有mysql控制台打开,我该如何导入呢?

2 个答案:

答案 0 :(得分:1)

您需要创建一个列表并使用cmd /c分别传递每个参数。不需要start AFAIK。

这将是:

['mysql','-f','u'] // and so on.. then call execute()

答案 1 :(得分:1)

尝试:

def command = [ 'cmd',
                '/c',
                'mysql -f -u ${settings.dbUser} -p${settings.dbPassword} -h localhost --default-character-set=latin1 ${settings.dbName}' ]

def process = command.execute()
proc << tableDefinitions

def out = new StringBuilder()
def err = new StringBuilder()
proc.waitForProcessOutput(out, err)
if (out) println "out:\n$out"
if (err) println "err:\n$err"