我试图从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控制台打开,我该如何导入呢?
答案 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"