1

PreparedStatement を使用して (組み込みの DB 関数を含む) クエリを実行する方法はありますか?

例: insert into foo (location) values (pointfromtext('12.56666 13.67777',4130)) ここで、pointfromtext は組み込み関数です。

4

7 に答える 7

2

私が見たところ、pointfromtext 関数の最初のパラメーターは文字列で、2 番目のパラメーターは数値です。したがって、次のことを試してください。

PreparedStatement preparedStatement = getConnection().prepareStatement("insert into map_address (location) values(pointfromtext('POINT(' || ? || ' ' || ? || ')',4130))");
preparedStatement.setString(1, "12.56565665");
preparedStatement.setString(2, "12.57565757");
preparedStatement.executeUpdate();
于 2008-11-19T15:54:11.940 に答える
2

確かに、それはうまくいくはずです。

そうでない場合、データベース システムは何ですか? SQL コマンド ラインからまったく同じコマンドを実行できますか?

于 2008-11-19T08:33:33.013 に答える
1

疑問符は単純な引用符で囲まれているため、正しく評価されていません。それらを削除すると、動作するはずです。

于 2008-11-19T10:24:13.587 に答える
0

PreparedStatement オブジェクトのスコープは、正確にクエリを実行することです。クエリに組み込みの DB 関数が含まれている場合は問題ありません。同じクエリが PreparedStatement の外部で機能する場合、すべてが機能するはずです。

Thilo が言ったように、クエリ形式の SQL コマンド ラインをテストするか、通常使用する SQL グラフィカル ツールを使用してテストします。

于 2008-11-19T09:18:42.157 に答える
0

このコードの後に​​ connection.commit()を置きましたか?

コードは次のようになります。

 PreparedStatement bar = connection.prepareStatement("insert into foo (location) values (pointfromtext('? ?',4130)))");
 bar.setDouble(1, 13.67777);
 bar.setDouble(2, 13.67777); 
 bar.executeUpdate();
 connection.commit(); 
于 2008-11-19T09:23:29.963 に答える
0

おそらく、JDBC 自体の問題ではなく、Postgresql JDBC ドライバーの問題を発見したことでしょう。一般に、達成したいことは JDBC で機能します。

于 2008-11-19T11:28:11.290 に答える
0

preparaedStatement に double を設定しないようにしましたか? テストのためだけに、次のように、このパラメーターを文字列に直接挿入してみてください。

String sql = "insert into map_address (location) values(pointfromtext('POINT(" +  "12.56565665" + " " + "12.57565757" + ")',4130))"

PreparedStatement preparedStatement = getConnection().prepareStatement(sql);

その後、アップデートを実行してみてください。

于 2008-11-19T10:22:48.003 に答える