だからここに取り引きがあります:私は自分の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) は表示されませんでした。スクリプトがコマンド ラインから直接実行されると、どちらも適切に表示されることに注意してください。