簡體   English   中英

使用Java在Oracle中更新和刪除

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM