[英]Update and delete in oracle using java
我有一個名為bcfsite的表,該表具有一個名為activestate的字段。
update bcfsite set activestate = 1 where bscname like '%B361Z%'
當我運行上述查詢SQLPlus或Oracle SQL Developer時,它運行正常,沒有任何問題,但是當我使用以下代碼在Java中運行它時:
String sqlstrString = "update bcfsite
set activestate = 0 where bscname like '%B361Z%' ";
PreparedStatement ps = d.prepareStatement(sqlstrString);
ResultSet rs = ps.executeUpdate();
或此代碼:
ResultSet rs = DBConnection.RunStatement(sqlstrString, d);
我的程序掛了,沒有通過更新語句。
我更改了表和列,並嘗試刪除而不是更新,但仍然看到相同的問題。
我把這是答案框,因為注釋中沒有足夠的空間...
String qString = "update bcfsite set activestate = 0 where bscname like ?";
這是使用可替換參數執行此操作的正確方法。 記住,就Oracle而言,使用like運算符時,傳遞給它的所有內容都是varchar2,因此:
ps.setString(1,"%B361Z%");
同樣,這是完成此操作的正確方法。
通過jdbc傳遞給oracle的結果字符串如下所示:
update bcfsite set activestate = 0 where bscname like '%B361Z%'
setString()應用正確的標記,因此oracle查詢解析器將看到正確的查詢。
帶有“?”的查詢 在它們中不只是字符串替換。 該語句由服務器解析,然后將參數傳遞到服務器。
順便說一句,這在SO的多個地方得到了回答。 請了解如何搜索SO,它將大大縮短您的響應時間,而不會浪費我們的時間。
試試這種方法:
String sqlstrString = "update bcfsite " +
"set activestate = 0 where bscname like '?'";
PreparedStatement ps = d.prepareStatement(sqlstrString);
ps.setString(1, "%"+"B361Z"+"%");
ResultSet rs = ps.executeUpdate();
第二種方法是:
...set activestate=0 where bscname like CONCAT('%', ?, '%')";
...
ps.setString(1, "B361Z");
您可以先嘗試以下方法來清除它通過Java代碼更新的至少一行,而不給通配符嘗試更新單行的情況。
String sqlstrString = "update bcfsite
set activestate = 0 where bscname=?";
PreparedStatement ps = d.prepareStatement(sqlstrString);
ps.setString(1, "B361Z");
ResultSet rs = ps.executeUpdate();
這可以排除其他問題,例如連通性/不同架構。
請發布結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.