apache Derby - 在创建新数据库时获取 java.io.FileNotFoundException: derby.log (Access is denied)

Posted

技术标签:

【中文标题】apache Derby - 在创建新数据库时获取 java.io.FileNotFoundException: derby.log (Access is denied)【英文标题】:apache Derby - getting java.io.FileNotFoundException: derby.log (Access is denied) when creating new database 【发布时间】:2014-04-04 16:33:34 【问题描述】:

我是 Apache Derby 数据库的新手,

当我尝试使用以下命令创建新数据库时,我遇到了以下问题

C:\>java org.apache.derby.tools.ij
ij version 10.10
ij> connect 'jdbc:derby:Mynewdb;create=true';
Mon Mar 03 20:17:32 IST 2014 Thread[main,5,main] java.io.FileNotFoundException: derby.log
(Access is denied)
----------------------------------------------------------------
Mon Mar 03 20:17:33 IST 2014:
Booting Derby version The Apache Software Foundation - Apache Derby - 10.10.1.1 - (1458268): instance a816c00e-0144-886a-02f2-000000b8d0b0
on database directory C:\Mynewdb with class loader sun.misc.Launcher$AppClassLoader@11b86e7
Loaded from file:/C:/db-derby-10.10.1.1-bin/db-derby-10.10.1.1-bin/lib/derby.jar
java.vendor=Sun Microsystems Inc.
java.runtime.version=1.6.0_23-b05
user.dir=C:\
os.name=Windows 7
os.arch=x86
os.version=6.1
derby.system.home=null
Database Class Loader started - derby.database.classpath=''

【问题讨论】:

【参考方案1】:

user.dir=C:\

os.name=Windows 7

在大多数情况下,Windows 7(及更高版本?)不允许您将文件写入根目录。在启动 ij 之前,您应该 cd 到另一个目录。例如cd \Users\YOUR_USER_NAME,你应该很高兴。

【讨论】:

【参考方案2】:

当您运行ij(或尝试在其他应用程序中使用嵌入式 Apache Derby)时,将在当前工作目录中创建一个名为 derby.log 的文件。从帖子中,您似乎正在从C:\ 执行此操作,并且您登录的用户没有对该目录的写访问权限:更改到用户有权创建文件并重试的目录。

请注意,可以取消此日志文件(尽管我自己还没有这样做)。见Getting rid of derby.log。但是,在您的情况下,抑制日志文件只会导致另一个失败,因为数据库将在相对于当前目录的文件系统上创建。也就是说,尝试在当前目录C:\ 中创建名为Mynewdb 的目录也会因为同样的原因而失败。可以指定数据库的路径以避免在当前工作目录中创建:

ij> 连接'jdbc:derby:/tmp/test_db;create=true';

【讨论】:

我的 derby 网络服务创建了与客户端尝试写入的文件相同的 derby.log 文件。幸运的是,该文件拥有服务帐户的所有权,这会导致错误而不是日志文件损坏。我找到了一个更改输出文件的选项,DERBY_OPTS=-Dderby.stream.error.file=derby-client.log bin/ij

以上是关于apache Derby - 在创建新数据库时获取 java.io.FileNotFoundException: derby.log (Access is denied)的主要内容,如果未能解决你的问题,请参考以下文章

Derby 在使用 Maven 时给出 ClassNotFoundException: org.apache.derby.jdbc.EmbeddedDriver

为 Apache Derby 使用 LDAP

在 Eclipse 中开发 Apache Derby 应用程序

apache derby是个啥东西

有关与Apache Derby和Java连接的协议

Apache Derby 为我用有意义的名称创建的索引提供了奇怪的名称