1

所以这就是交易:我有一个 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) 没有。请注意,当直接从命令行执行脚本时,两者都会相应显示。

4

0 回答 0