You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac Ventura系统下JDBC连接H2数据库权限错误求助

解决JDBC连接H2数据库时的「Operation not permitted」错误

错误信息

IO Exception: "java.nio.file.FileSystemException: /Users/Franco/Desktop/h2: Operation not permitted"; "/Users/Franco/Desktop/h2"
IO Exception: "java.nio.file.FileSystemException: /Users/Franco/Desktop/h2: Operation not permitted"; "/Users/Franco/Desktop/h2" [90031-212] 90031/90031])

问题分析

结合代码和macOS Ventura系统环境,问题主要来自两点:

  • JDBC连接URL指向的是文件夹而非具体的H2数据库文件
  • macOS对桌面文件夹的权限限制,导致程序无法读写该目录

解决方案

1. 修正JDBC连接URL

代码中连接URL指向的是文件夹/Users/Franco/Desktop/h2/bin,H2需要指定具体的数据库文件名。修改连接字符串:

// 指定具体数据库文件名,比如testdb,H2会自动生成对应数据库文件
Connection con = DriverManager.getConnection("jdbc:h2:/Users/Franco/Desktop/h2/bin/testdb", "root", "myPassword");

也可将数据库文件移到权限更宽松的目录(如~/Documents/h2-db),避开系统对桌面的权限限制。

2. 给IDE授予桌面文件夹访问权限

macOS Ventura默认限制应用访问桌面、文档等敏感目录,需手动授权:

  • 打开「系统设置」→「隐私与安全性」→「文件与文件夹」
  • 在列表中找到你使用的IDE(如IntelliJ IDEA、Eclipse等)
  • 勾选「桌面」选项,重启IDE后再运行代码

3. 手动调整文件夹权限(可选)

若授权IDE后仍有问题,通过终端给目标文件夹赋予读写权限:

# 给文件夹及子内容添加读写执行权限
chmod -R 755 /Users/Franco/Desktop/h2
# 确保当前用户是文件夹所有者
sudo chown -R $(whoami) /Users/Franco/Desktop/h2

4. 修复代码中的语法错误

createSql字符串定义存在语法错误(多了一个双引号),Java 13+推荐使用文本块语法:

String createSql = """
        DROP TABLE IF EXISTS TEST;
        CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR(255));
        INSERT INTO TEST VALUES(1, 'Hello');
        INSERT INTO TEST VALUES(2, 'World');
        """;

若使用Java 12及以下版本,改用字符串拼接:

String createSql = "DROP TABLE IF EXISTS TEST;"
        + "CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR(255));"
        + "INSERT INTO TEST VALUES(1, 'Hello');"
        + "INSERT INTO TEST VALUES(2, 'World');";

内容的提问来源于stack exchange,提问作者Franco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 16:17:31