是否有一種方法可以使用PreparedStatement執行查詢(包含內置的DB函數)?JDBC內置函數和預處理語句
示例: 插入foo(位置)值(pointfromtext('12.56666 13.67777',4130)) 這裏,pointfromtext是一個內置函數。
是否有一種方法可以使用PreparedStatement執行查詢(包含內置的DB函數)?JDBC內置函數和預處理語句
示例: 插入foo(位置)值(pointfromtext('12.56666 13.67777',4130)) 這裏,pointfromtext是一個內置函數。
通過我所看到的,pointfromtext函數的第一個參數是一個字符串,第二個參數是一個數字。因此,請嘗試以下操作:
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();
當然,這應該工作。
如果不是,您的數據庫系統是什麼,並且可以從SQL命令行運行完全相同的命令嗎?
PreparedStatement對象的作用域恰好是執行查詢。如果查詢包含內置的數據庫函數,那麼如果相同的查詢在PreparedStatement之外工作,則一切都應該正常工作。
正如Thilo所說,測試您的查詢表單SQL命令行或使用您通常使用的SQL圖形工具。
你把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();
你有沒有試着不要在preparaedStatement盤雙打?只是用於測試,你應該嘗試直接在字符串插入此參數,像:
String sql = "insert into map_address (location) values(pointfromtext('POINT(" + "12.56565665" + " " + "12.57565757" + ")',4130))"
PreparedStatement preparedStatement = getConnection().prepareStatement(sql);
,然後嘗試執行更新。
問號未被正確評估,因爲它們介於簡單的引號之間。刪除它們,它應該工作,
也許你已經發現Postgresql JDBC驅動程序的問題,而不是本身與JDBC。一般來說,你想實現與JDBC一起工作。
字符串串聯是唯一的出路嗎?我有沒有辦法告訴JDBC逃脫引號並讓它知道?是要用一個參數代替? – Abhi 2008-11-20 04:43:24