使用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




