如何在当前工作目录的上级目录创建SQLite数据库文件
解决方案
你遇到的问题有两个诱因,分别修正即可:
- 连接URL存在拼写错误:你写的
..db/遗漏了路径分隔符,上级目录的正确写法是../,因此完整的路径前缀应为jdbc:sqlite:../db/ - SQLite JDBC驱动不会自动创建不存在的父目录,需要你在获取连接前手动创建目标目录。
修正后的完整代码如下:
import java.io.File; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.SQLException; public void createNewDatabase(String dbName) { // 先创建父目录 File dbDir = new File("../db/"); if (!dbDir.exists()) { // mkdirs() 可创建多级不存在的父目录,比mkdir()更稳妥 boolean dirCreated = dbDir.mkdirs(); if (!dirCreated) { System.out.println("数据库目录创建失败,请检查权限"); return; } } String dbUrl = "jdbc:sqlite:" + dbDir.getAbsolutePath() + "/" + dbName; try (Connection conn = DriverManager.getConnection(dbUrl)) { if (conn != null) { DatabaseMetaData meta = conn.getMetaData(); System.out.println("The driver name is " + meta.getDriverName()); System.out.println("A new database has been created."); } } catch (SQLException e) { System.out.println(e.getMessage()); } }
补充说明
- 用
getAbsolutePath()获取目录的绝对路径可以避免相对路径带来的上下文环境差异问题 - 目录创建失败时提前终止逻辑,可以避免后续无意义的数据库连接尝试
内容的提问来源于stack exchange,提问作者N7Legend
相关产品推荐
相关产品推荐

