【问题标题】:Get an error when connecting to Firebird database连接到 Firebird 数据库时出错
【发布时间】:2020-09-30 05:43:27
【问题描述】:

春季启动: pom.xml org.firebirdsql.jdbc jaybird 4.0.0.java8

application.properties

spring.datasource.url=jdbc:firebirdsql://SERVER:3050/D:\company\DbPro\Data\file.fdb
spring.datasource.driverClassName=org.firebirdsql.jdbc.FBDriver

查询数据库时出现错误:

查询数据库时出错。原因: org.springframework.jdbc.CannotGetJdbcConnectionException: 失败 获取 JDBC 连接;嵌套异常是 java.sql.SQLException: I/O 文件的“CreateFile(打开)”操作期间出错 "D:companyDbProDatafile.fdb";尝试打开文件时出错; [SQLState:08001,ISC错误代码:335544344]

怎么了?

【问题讨论】:

  • 相关,技术上重复:Java Properties backslash(我决定不使用我的金锤关闭,因为我还在我的回答中提供了一个特定于 Firebird 的替代方案)

标签: java spring-boot jdbc firebird jaybird


【解决方案1】:

如错误消息所示,Firebird 尝试连接到不存在(或无法访问)的数据库 D:companyDbProDatafile.fdb

您的路径不正确的原因是\ 表示属性文件中的转义。如Properties.load 中所述:

  • 该方法不处理反斜杠字符\ 无效的转义字符作为错误;反斜杠是无声的 掉了。例如,在 Java 字符串中,序列“\z”会导致 编译时错误。相比之下,这种方法会默默地丢弃 反斜杠。因此,该方法对待两个字符序列 “\b”等同于单个字符“b”。

要解决此问题,请确保使用双反斜杠,或改用正斜杠。所以使用:

spring.datasource.url=jdbc:firebirdsql://SERVER:3050/D:\\company\\DbPro\\Data\\file.fdb

spring.datasource.url=jdbc:firebirdsql://SERVER:3050/D:/company/DbPro/Data/file.fdb

或者,不要指定数据库路径,而是在databases.conf(Firebird 3 及更高版本)或aliases.conf(Firebird 2.5 及更低版本)中配置别名,并在连接字符串中指定别名而不是路径。

【讨论】:

  • @AndreyKonus 如果我的回答解决了您的问题,请点击复选标记接受回答。
  • because the path is invalid,嗯,技术上这条路径是完全有效的,但实际上它是如此随机,以至于......跑得像地狱! :-D 但它是有效的。
  • @Arioch'The 驱动器号后面不带反斜杠的路径D:companyDbProDatafile.fdb是否有效,值得怀疑。
  • @MarkRotteveel 如果您不使用自己的临时定义覆盖操作系统标准(并且您没有说您这样做),那么这是没有问题的,它是有效的路径。文件或文件夹“companyDbProDatafile.fdb”放置在驱动器 D 的当前文件夹中:
  • @MarkRotteveel 这绝对是因为 CP/M(甚至不是 DOS)的遗产,但遗产并不等同于无效。 Microsoft Bing 中的第一个链接:“如果文件名仅以磁盘指示符开头,而不是冒号后的反斜杠,则将其解释为驱动器上当前目录的相对路径” - 在许多其他选项中仅列出一个选项在docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file 构造有效的文件名
猜你喜欢
  • 2019-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多