- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用一段简单的代码来更新 Oracle DB 中的单行,查询只更新单行但执行仍然卡在 stmt.executeUpdate() 上。
它不会抛出任何异常,但控件只是卡在那里。
我在这里迷路了,因为同一段代码之前运行良好。
try {
DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver());
conn = DriverManager.getConnection(url,username,pwd);
stmt = conn.createStatement();
String sql = "update report set status =" +"'"+NO+"'"+ " where name=" +"'"+ name+"'"+ " and user_id=" +"'"+sub+"'";
System.out.println(sql);
stmt.executeUpdate(sql)
最佳答案
你永远不应该通过像这样连接变量来创建语句。这使您可以打开 SQL injection .此外,每个语句都将被 Oracle 视为需要硬解析的新语句,这可能会导致性能问题。相反,使用 preparedStatement .
但是,我认为您的情况不是问题的原因。当一个简单的更新挂起时,几乎总是以下原因之一:
我很确定您属于第一种情况。 Oracle 防止多个用户同时更新同一行,主要是出于一致性原因。这意味着如果修改的行被锁定,DML 语句将等待另一个事务。它将等到阻塞事务提交或回滚。
我建议您在尝试通过执行 SELECT ... FOR UPDATE NOWAIT
更新之前始终锁定行。如果该行已被锁定,这将失败,您可以通过告诉用户该行当前正被另一个 session 锁定来正常退出。
您还必须确保没有事务以未提交状态结束。所有 session 都应该在退出前提交或回滚他们的更改(尽管不要使用自动提交)。
关于java - java中的executeUpdate()需要很长时间才能执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18230986/
这个问题已经困扰两天了。尝试了我能想到的一切。非常感谢您在这个问题上给我的任何帮助。提前致谢。` try { // try get tx records Class.forName("com
我有如下代码: using (var session = this.sessionCreator.OpenSession()) using (var transaction = session.Beg
我有以下代码: sql = update [myTable] set content = '" map.getString() + "' where id = " map.getKey(); stmt
我创建了这样的声明: String query = "INSERT INTO ZMONES (ID, PAVADINIMAS, SLAPTAZODIS) VALUES(" +sum+" ,"+
请我想向数据库添加一个元素,但我仍然遇到此错误,我不知道错误到底在哪里,并且我确定 sql 查询和我的数据库 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxEr
我想知道,如何关闭 JAVA(JDBC) 中的executeUpdate 语句? 例如: String sql = "UPDATE. .. . .. Whatever..."; ResultSet
PreparedStatement updatestmt1 = con.prepareStatement("update BASE_TX set tx_vl=replace(tx_vl,?,?)");
使用 readline 5.1 运行 mysql Ver 15.1 Distrib 5.5.44-MariaDB,适用于 Linux (x86_64) 我编写了一个 Java servlet,它在 S
今天我遇到了这样的情况:程序启动,正常运行,显示数据已正确输入数据库,但没有执行。我再次运行脚本,它运行良好,但有趣的是它没有抛出异常,尽管它未能插入数据。 是否存在 Statement.execut
你好,祝大家新年快乐。 我正在开发一个 JDBC 程序,它获取服务器中的每个数据库,访问每个表并收集有关这些列的信息。最后,我想将表中的每一行信息添加为行。我的程序可以正确编译和运行,但表总是返回 E
我得到一个异常(exception) com.microsoft.sqlserver.jdbc.SQLServerException: String or binary data would be t
我正在尝试在某些应用程序中进行手动订购。更新字段的 JPAQL 是这样的: update SortableBean s set s.position = s.position + 1 where s.
这是我的代码: String insertQuery = "INSERT INTO Links(PageId, LinkId) values(?, ?)"; PreparedStatement pre
我一直在尝试执行以下查询: SQL_ADDPROJECT = "INSERT INTO project (name, description, duration, departement, chef)
我的目标是向我创建的现有表中添加一个新行。但是,我收到以下错误。 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have
如果我有一个使用以下架构创建的表: CREATE TABLE names (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR); 还有一个 List na
我正在 JBehave 非 Maven 框架中工作,并且正在运行一个文本文件内的插入语句,我将其作为 qry 传递给我的方法。插入语句为: Insert into croutreach.ACME_OU
我正在修改一个 Java Web 应用程序,该应用程序是以前(由其他人)编写的,它使用 JDBC。该数据库是使用 PHPMyAdmin 创建的。在此过程中,我需要重命名其中一张表。我在代码中用正确的名
所以我试图将信息从java应用程序存储到数据库中,但我收到此错误:“”AWT-EventQueue-0“java.lang.NullPointerException”并且我一生都找不到原因。我尝试更改
我使用以下代码通过 postgres 的更新查询更改密码。 @POST @Path("/changepassword") @Consumes(MediaType.APPLICATION_JSON) p
我是一名优秀的程序员,十分优秀!