`
woshixushigang
  • 浏览: 578132 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

java.sql.SQLException: 无法转换为内部表示

 
阅读更多

项目中因某种需求,在程序中操作数据的SQL加行级锁,避免出现插入重复的数据。但运行几天后报错,因此根据日志分析问题产生的原因。

 

问题描述:【Caused by: java.sql.SQLException: ORA-00054: resource busy and acquire with NOWAIT specified
 
原因如下
 
出现这个问题的原因是正在执行的操作请求的资源正被其他事务锁定。
 nowait
:立即执行,如果另有会话正在修改该记录会立即报告错误:ORA-00054: 资源正忙,要求指定 NOWAIT;如果不选择nowait选项则会一直处理等待状态。
 wait [n]
:等待n秒,如果另有会话正在修改该记录会报告错误:ORA-30006: 资源已被占用; 执行操作时出现 WAIT 超时。

 

例如:
SELECT ... FOR UPDATE [OF ...][NOWAIT | WAIT integer]

NOWAIT指在执行"SELECT ... FOR UPDATE"时其他事务修改了该查寻的结果但还没有提交,此时将立即返回如下结果:
ORA-00054: resource busy and acquire with NOWAIT specified
如果不使用NOWAIT等项,默认为等待(WAIT)其他事务提交后在返回结果。


WAIT integer
,与NOWAIT的功能相似,但可以等待用户指定的秒数。如:"WAIT 3"等待3秒后,其他事务还没有提交将返回如下结果:
ORA-30006: resource busy; acquire with WAIT timeout expired

出现这种问题后查V$LOCKED_OBJECT,要么等事务结束后再做,要么杀掉持有锁的会话(如果不是关键会话):

1.通过查找出已被锁定的数据库表及相关的sidserial#spid
select object_name as
对象名称,s.sid,s.serial#,p.spid as 系统进程号
from v$locked_object l , dba_objects o , v$session s , v$process p
where l.object_id=o.object_id and l.session_id=s.sid and s.paddr=p.addr;

2.在数据库中灭掉相关session
alter system kill session 'sid,serial#';--sid
serial#为第一步查出来的数据。

 
分析:

1、有别的sql plus客户端执行了某些的操作后没有执行commit,而同时系统应用也正在访问同样的资源。

2、程序中对数据操作后没commit,而同时系统应用也正在访问同样的资源。

3、并发问题,并发高的时候无法保持一致性。

 

风险:

最好不要再程序中使用锁机制,这样:

第一,难免会要在sql/plus中操作数据。

第二,如果遇到并发问题,无法保持一致性。

 

上面的是引用别人的。

 

我在项目中也遇到了这种情况,但是问题出在了字段位置不对应如:

                                           manager.setImage(this.res.getString(20));
				manager.setEmail(this.res.getString(17));
				manager.setMobilephone(this.res.getString(18));
				manager.setExcount(this.res.getInt(19));

 

现在数据库字段顺序变化了所以就报错了。

 

 

分享到:
评论

相关推荐

    oracle jdbc dirver

    它实现了Java Database Connectivity (JDBC) API,使得开发者可以使用Java语言来操作Oracle数据库,执行SQL语句,进行数据查询、插入、更新和删除等操作。Oracle JDBC驱动分为不同版本,包括 Thin、OCI、JDBC-ODBC ...

    异常:java.sql.SQLException: The server time zone value ‘?й???????’ is unrecognized or represents more

    当你尝试连接到MySQL数据库时,可能会遇到一个特定的异常:“java.sql.SQLException: The server time zone value ‘?й???????’ is unrecognized or represents more than one time zone”。这个错误表明服务器...

    oracle数据库的clob大字段在jdbc中的处理方式

    在JDBC中,CLOB对象被表示为`java.sql.Clob`接口的实例,提供了读取和修改CLOB字段的方法。 要读取CLOB字段并转换为String,你需要遵循以下步骤: 1. **建立连接**:使用`DriverManager.getConnection()`方法建立...

    java中日期格式的转换

    因此,在某些情况下,可能需要将`java.util.Date`转换为`java.sql.Date`。 示例代码: ```java import java.sql.Date; import java.util.Date; public class DateConversionExample { public static void main...

    用反射实现向不同简单JavaBean填充值的实现代码

    在Java编程中,反射是一种强大的工具,它允许我们在运行时检查和操作类、接口、字段以及方法的信息。这里我们关注的是如何使用反射来向简单的JavaBean对象中设置和获取值,而不必显式地创建这些对象。这个过程涉及到...

    星环大数据平台_InceptorSQL使用方法.pdf

    星环大数据平台是一个综合的大数据分析处理平台,其中InceptorSQL是其核心组件之一,它是基于Hadoop和Apache Hive技术栈开发的SQL查询引擎,允许用户执行SQL查询以及进行数据处理。 InceptorSQL使用方法的文档主要...

    java中时间格式的转换.docx

    在实际开发中,经常需要将`java.util.Date`对象转换为`java.sql.Date`或`java.sql.Timestamp`对象,以便于存储到数据库中。 **示例代码**: ```java import java.sql.Date; import java.util.Date; public ...

    JAVA常见异常解析,面试用

    - **java.sql.SQLException**:处理数据库操作时,当发生错误或异常情况时抛出。 - **java.io.IOException**:表示输入/输出操作失败或中断时抛出。 - **java.lang.NoSuchMethodException**:当试图调用不存在的方法...

    mysql-connector-java-8.0.23.jar

    import java.sql.SQLException; public class Main { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/mydatabase"; String user = "username"; String password = ...

    java常见异常.pdf

    10. **java.sql.SQLException**: 当与数据库交互时发生错误,如SQL查询失败或连接问题,会抛出此异常。使用try-catch语句来处理数据库操作。 11. **java.lang.NoSuchMethodException**: 当试图调用一个不存在的方法...

    SQL Server连接JDBC需要的jar包

    在Java编程环境中,连接Microsoft SQL Server数据库通常会用到Java Database Connectivity (JDBC) API。JDBC提供了一组标准的接口和类,使得Java应用程序能够与各种数据库进行交互,包括SQL Server。为了实现这一...

    [java]将Byte存入blob.rar

    在Java中处理Blob数据涉及读取二进制数据、将其转换为Blob对象、在SQL语句中设置Blob参数以及从数据库中读取Blob数据。这个过程在处理像图片这样的大文件时尤其有用。确保选择适当的数据库特定类进行Blob操作,并...

    图片导出到文件夹

    - `java.sql.Connection`、`java.sql.DriverManager`、`java.sql.ResultSet`、`java.sql.SQLException` 和 `java.sql.Statement`:用于连接Oracle数据库并执行SQL查询。 2. **定义类和方法**: - 类名为 `...

    Java中常用异常列表[收集].pdf

    10. **`java.sql.SQLException`**:数据库操作异常。当与数据库交互时,如查询、插入、更新数据出错,会抛出此异常。确保SQL语句正确,数据库连接正常。 11. **`java.lang.NoSuchMethodException`**:方法未找到...

    Oracle的JDBC驱动程序

    1. JDBC Type 1(JDBC-ODBC桥接驱动):这是最早的JDBC驱动,它将Java的JDBC调用转换为ODBC调用,再由ODBC驱动程序处理到特定数据库的通信。由于依赖于ODBC,所以安装和配置相对复杂。 2. JDBC Type 2(数据库供应...

    orai18n.jar

    这样,Java程序在与Oracle数据库进行通信时,可以通过`orai18n.jar`来转换字符集,确保中文字符能够正确地编码和解码。 具体操作步骤如下: 1. 下载`orai18n.jar`文件,通常可以在Oracle官方或其他可靠的资源网站...

    Java的异常类

    - **`java.sql.SQLException`**:操作数据库异常。 - **`java.io.IOException`**:输入输出异常。 - **`java.lang.NoSuchMethodException`**:方法未找到异常。 #### 三、总结 异常处理对于编写健壮和可靠的...

    java,jsp连接sqlserver 2012 必备jar包

    3. msutil.jar:这个工具包主要提供了一些实用工具类,用于处理SQL Server相关的数据类型和操作,例如日期时间格式转换、加密解密等功能,以增强Java应用程序与SQL Server之间的兼容性和效率。 要使用这些JAR包,你...

    java异常分析及解决办法

    10. **java.sql.SQLException**: 当与数据库交互时出现错误,例如SQL查询失败或连接问题,会抛出此异常。确保SQL语句语法正确,数据库连接配置无误。 11. **java.lang.NoSuchMethodException**: 当尝试调用一个...

    java 连接sqlserver2000

    JDBC是Oracle公司提出的用于Java程序访问数据库的标准接口,它允许Java开发者编写数据库独立的代码,通过驱动程序适配器将这些通用的调用转换为特定数据库系统的原生调用。在Java中连接SQL Server 2000,首先需要...

Global site tag (gtag.js) - Google Analytics