2014-03-03 44 views
4

我是新来的Apache Derby数据库时,的Apache Derby - 让java.io.FileNotFoundException:的derby.log(访问被拒绝)创建新的数据库

当我使用以下命令我试图箱新的数据库我得到以下问题

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 [email protected] 
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='' 

回答

4

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

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

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

+0

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

2

user.dir来= C:\

os.name = Windows 7的

的Windows 7(及以上?)不会让你将文件写入到根目录在大多数情况下。在开始ij之前,你应该cd到另一个目录。例如cd \Users\YOUR_USER_NAME,你应该很好去。