使用java在oracle中更新和删除

使用java在oracle中更新和删除,java,oracle11g,sql-update,Java,Oracle11g,Sql Update,我有一个名为bcfsite的表,其中有一个名为activestate的字段 update bcfsite set activestate = 1 where bscname like '%B361Z%' 当我运行上面的查询SQLPlus或Oracle SQL Developer时,它工作正常,没有任何问题,但当我使用以下代码在Java中运行它时: String sqlstrString = "update bcfsite set activest

我有一个名为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);
我的程序挂起且未通过update语句

我更改了表和列,并尝试删除而不是更新,但仍然看到相同的问题。

尝试这种方法:

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");
尝试以下方法:

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(); 
这可能会排除连接/不同模式等其他问题


请发布结果。

您是否可以尝试以下方法首先清除它,通过Java代码至少更新一行,不要使用通配符尝试更新单行

String sqlstrString = "update bcfsite 
                       set activestate = 0 where bscname=?";
PreparedStatement ps = d.prepareStatement(sqlstrString);
ps.setString(1, "B361Z");
ResultSet rs = ps.executeUpdate(); 
这可能会排除连接/不同模式等其他问题


请发布结果。

我把这作为答案框,因为评论中没有足够的空间

String qString = "update bcfsite set activestate = 0 where bscname like ?";
这是使用可替换参数执行此操作的正确方法。请记住,在使用like运算符时,就oracle而言,传递给它的所有内容都是varchar2,因此:

ps.setString(1,"%B361Z%");
同样,这是实现这一目标的正确方法

通过jdbc传递给oracle的结果字符串如下所示:

update bcfsite set activestate = 0 where bscname like '%B361Z%'
setString()应用正确的标记,以便oracle查询解析器看到正确的查询

其中包含“?”的查询不只是字符串替换。该语句由服务器解析,然后将参数传递给服务器


顺便说一句,这个问题在一些地方得到了回答。请学习如何搜索SO,它将大大缩短您的响应时间,而不会浪费我们的时间。

我将此作为答案框,因为评论中没有足够的空间

String qString = "update bcfsite set activestate = 0 where bscname like ?";
这是使用可替换参数执行此操作的正确方法。请记住,在使用like运算符时,就oracle而言,传递给它的所有内容都是varchar2,因此:

ps.setString(1,"%B361Z%");
同样,这是实现这一目标的正确方法

通过jdbc传递给oracle的结果字符串如下所示:

update bcfsite set activestate = 0 where bscname like '%B361Z%'
setString()应用正确的标记,以便oracle查询解析器看到正确的查询

其中包含“?”的查询不只是字符串替换。该语句由服务器解析,然后将参数传递给服务器



顺便说一句,这个问题在一些地方得到了回答。请学习如何搜索SO,它将大大缩短您的响应时间,而不会浪费我们的时间。

添加
在java
sqlstrString
的末尾,您的数据库
连接
是否将自动提交设置为
true
?无堆栈跟踪?当我添加时,它只是挂起(挂起?);在sqlstrString的末尾,我得到了一个异常ORA-00911:invalidcharacter@StijnGeukens是的,我检查过了。我的连接没有问题。添加一个
在java
sqlstrString
的末尾,您的数据库
连接
是否将自动提交设置为
true
?无堆栈跟踪?当我添加时,它只是挂起(挂起?);在sqlstrString的末尾,我得到了一个异常ORA-00911:invalidcharacter@StijnGeukens是的,我检查过了。我的连接没有问题。我尝试过这个,但没有区别。再尝试一次,在问号周围加上单引号。谢谢@Costis Aivalis我尝试了你的升级方法,但程序仍然没有通过更新声明:(不,当我在sqlstrString的末尾添加分号时,我得到了ORA-00911@Coastis是的,你是对的。但问题是,当我不使用分号时,程序不会传递update语句。我尝试了一下,但没有区别。请再试一次,在问号周围加上单引号。谢谢@Costis Aivalis我尝试了你的upadate方法,但是程序仍然没有通过update语句:(不,当我在sqlstrString的末尾添加分号时,我得到了ORA-00911@Coastis是的,你是对的。但问题是,当我不使用分号时,程序不会传递update语句。我尝试使用它,但没有使用通配符只更新一行,但程序仍然不会传递update语句。这是DML操作的问题吗表或架构中的所有表?您能够通过代码在此表上执行select吗?是的,我可以选择和插入,但我在delete和updatelet检查中遇到问题。通过SQLplus更新单行需要多长时间。您可以发布此操作吗?打开set timing并运行update语句吗?如果您可以在您正在更新的e表我尝试使用它,但没有使用通配符只更新一行,但程序仍无法通过update语句。此表或架构中的所有表的DML操作是否存在问题?您是否能够通过代码对此表进行选择?是的,我可以选择和插入,但delete和updatelet ch存在问题通过这种方式选择..通过SQLplus更新单行需要多少时间..是否可以发布此操作-打开set timing并运行update语句如果可以发布正在更新的表中的行数也可以