所以这就是交易:我有一个 node.js 脚本来查询我自己的 mysql 数据库。简单的选择,没什么。如果我从命令行运行它,我会毫无问题地得到预期的结果。(见下文)
但是,当我使用下面的代码从 java 运行所述脚本以将结果保存在数组中供以后使用时,会发生什么情况是这些数组将始终为空。即使是笔直的打印也什么都没有。
public static ArrayList<String> scriptcaller(String command){
ArrayList<String> out = new ArrayList<String>();
ArrayList<String> errors = new ArrayList<String>();
BufferedReader bri, bre;
try {
String line;
Process p = Runtime.getRuntime().exec(command);
bri = new BufferedReader
(new InputStreamReader(p.getInputStream()));
bre = new BufferedReader
(new InputStreamReader(p.getErrorStream()));
//guardar linhas de outpur em out
while ((line = bri.readLine()) != null) {
System.out.println(line);
out.add(line);
}
bri.close();
//guardar linhas de errors em errors
while ((line = bre.readLine()) !=null) {
//System.out.println(line);
errors.add(line);
}
bre.close();
p.waitFor();
System.out.println("Done.");
}
catch (Exception err) {
err.printStackTrace();
}
return out;
}
当直接从命令行执行时,脚本的输出是这样的:
[{userID: mryuur,
type: 'energy',
value: '1337'}]
我已经将 java 函数与其他脚本和命令一起使用,并且运行良好。
这是查询脚本的一部分:
var userparam = "mryuur";
var querybody = 'SELECT * FROM GAP WHERE userID = "'+userparam+'"';
var query = connection.query(querybody, function(err, result) {
if (err) {
return console.log(err);
}
console.log(result);
//console.log("Done");
process.exit(0);
});
提前致谢。
编辑我试图在一个类似的 java 函数上运行以下脚本,该函数需要几个参数。
(一部分)
var user, type, value, time;
// print process.argv
process.argv.forEach(function (val, index, array) {
console.log(index + ': ' + val);
if (index == 2)
{user = val}
if (index == 3)
{type = val}
if (index == 4)
{value = val}
if (index == 5)
{time = val}
});
connection.connect(function(err) {
// connected! (unless `err` is set)
});
var insertbody = 'INSERT INTO GAP(`userID`, `type`, `value`, `timestp`) VALUES ("'+user+'","'+type+'","'+value+'","'+time+'")'
var query = connection.query(insertbody, function(err, result) {
if (err) {
return console.log(err);
}
console.log(result);
//console.log("Done");
process.exit(0);
});
发生的事情是,出于测试目的,我打印传递的参数的 console.log 确实显示在 java 控制台中,但用于打印插入结果的 console.log(result) 没有。请注意,当直接从命令行执行脚本时,两者都会相应显示。