1

だからここに取り引きがあります:私は自分のmysqlデータベースを照会するnode.jsスクリプトを持っています。シンプルな選択で、大したことはありません。コマンドラインから実行すると、問題なく期待どおりの結果が得られます(以下を参照)。

ただし、後で使用するために結果を配列に保存するために以下のコードを使用して 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);
});

前もって感謝します。

EDITいくつかのパラメーターを取る同様の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