You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Oracle SQL Developer 19+版Ctrl+S保存数据(增改)时为何报错?

解决Oracle SQL Developer 19+版本Ctrl+S保存数据报错的问题

我之前也碰到过一模一样的情况——在Oracle 19c及以上版本搭配SQL Developer 19+时,用快捷键Ctrl+S保存插入/更新的数据会抛出报错,但点击提交按钮却完全正常。结合你的环境(Windows 10、Java 1.8.0.241)和报错日志,这里有几个经过验证的解决办法:

1. 调整SQL Developer的自动提交设置

SQL Developer里Ctrl+S默认关联的是保存并提交操作,但在高版本Oracle数据库下,这个自动提交的逻辑容易出现兼容性问题。你可以修改这个行为:

  • 打开SQL Developer,依次点击工具 -> 首选项 -> 数据库 -> 工作表
  • 找到提交选项,把默认的自动提交改成手动提交
  • 重启SQL Developer后测试Ctrl+S,这时它只会把数据保存到本地缓存,不会触发自动提交,之后你再手动点提交按钮完成事务就行

2. 升级Java版本到兼容版本

你的Java版本是1.8.0.241,虽然SQL Developer 19+宣称支持Java 8,但部分较旧的Java 8子版本和高版本SQL Developer存在兼容性bug。建议升级到Java 8的最新更新版(比如1.8.0_391),或者直接切换到Java 11(SQL Developer 19+也支持,稳定性更好):

  • 下载对应版本的JDK,安装后在SQL Developer里指定新路径:工具 -> 首选项 -> 数据库 -> 高级 -> Java主目录,选择新安装的JDK路径
  • 重启SQL Developer后再测试Ctrl+S功能

3. 重置SQL Developer的用户配置文件

有时候SQL Developer的本地配置文件损坏会导致快捷键功能异常,你可以重置配置试试:

  • 关闭SQL Developer,找到配置文件夹,默认路径是C:\Users\<你的用户名>\AppData\Roaming\SQL Developer
  • 先备份这个文件夹,然后删除里面的内容(或者重命名为SQL Developer_old
  • 重新启动SQL Developer,它会生成全新的配置文件,这时再测试Ctrl+S是否正常

4. 检查数据库的事务隔离级别

部分高版本Oracle数据库的事务隔离级别设置可能和SQL Developer的自动提交逻辑冲突,你可以在SQL Developer里执行以下命令检查:

SELECT name, value FROM v$parameter WHERE name = 'transaction_isolation';

如果结果不是Oracle默认的READ COMMITTED,可以通过下面的命令修改(需要DBA权限):

ALTER SYSTEM SET transaction_isolation = 'READ COMMITTED' SCOPE=BOTH;

修改后重启数据库服务,再测试Ctrl+S功能

补充说明:你的报错日志指向EditableResultSetTableModel$SaveTaskListener,这说明是SQL Developer处理表格数据保存的后台任务出了异常,以上几种办法都是针对这个模块的常见兼容性问题提出的,大概率能解决你的问题。

内容的提问来源于stack exchange,提问作者Mayank Singh Soni

火山引擎 最新活动