Java Stardog数据库创建未找到文件异常

Java Stardog数据库创建未找到文件异常,java,rdf,stardog,Java,Rdf,Stardog,我正在使用java在stardog中创建一个新的数据库 当我创建数据库并在localhost中导入RDF文件时,它会正常工作 但是,当我在远程服务器中创建db时,我得到了同一个RDF文件的“未找到文件”异常 请看一下我的代码 System.out.println("start updating db"); String myDBName = "myDB" ; StardogDBMS dbms = //StardogDBMS.toServer("s

我正在使用java在stardog中创建一个新的数据库

当我创建数据库并在localhost中导入RDF文件时,它会正常工作

但是,当我在远程服务器中创建db时,我得到了同一个RDF文件的“未找到文件”异常

请看一下我的代码

    System.out.println("start updating db");
    String myDBName = "myDB" ;

    StardogDBMS dbms =
            //StardogDBMS.toServer("snarl://localhost:5820/")
            StardogDBMS.toServer("snarl://myRemoteServer:5820/")
            .credentials("admin", "admin".toCharArray()).login();

    File file = new File("src\\main\\webapp\\test.rdf"))

    System.out.println("creating " + myDBName +" and loading the rdf file" );

    dbms.disk(myDBName).create(file));
    dbms.logout();
    System.out.println("created " + myDBName +" and loaded the rdf file" );
请帮忙。是否有类似于将流传递到数据库以导入RDF文件这样的转变。这是我得到的一个例外

start updating db
creating myDB and loading the rdf file      
File: xxx\xxxx\test.RDF Message: java.io.FileNotFoundException: xxx\xxxx\test.RDF (No such file or directory)
created myDB and loaded the rdf file

不知道是什么
dbms.disk(myDBName.create(file))
正在做很难说,但是您确定它没有试图读取本地存在但不在远程服务器上的文件
src\\main\\webapp\\test.rdf

而不知道dbms.disk(myDBName).create(file))正在执行很难说,但您确定它没有尝试读取本地存在但不在远程服务器上的文件
src\\main\\webapp\\test.rdf

错误消息表明磁盘数据库的大容量加载程序找不到指定的文件。使用SNARL协议时,文件不会从客户端传输到服务器进行批量加载,这可能是错误的根源

如果服务器和客户端都在同一台机器上运行,则当服务器读取时,您的相对路径可能不正确,该路径可能相对于STARDOG_HOME,在这种情况下可能不正确。因此,如果它们都在同一台机器上,请使用绝对路径,它应该可以工作。如果它们位于不同的计算机上,请从服务器所在计算机上的CLI批量加载


如果您想使用HTTP,文件将被传输,但是由于将文件发送到服务器的网络开销,您将获得较差的大容量加载性能。同样,最好使用服务器在计算机上执行大容量加载。

错误消息表明磁盘数据库的大容量加载程序找不到指定的文件。使用SNARL协议时,文件不会从客户端传输到服务器进行批量加载,这可能是错误的根源

如果服务器和客户端都在同一台机器上运行,则当服务器读取时,您的相对路径可能不正确,该路径可能相对于STARDOG_HOME,在这种情况下可能不正确。因此,如果它们都在同一台机器上,请使用绝对路径,它应该可以工作。如果它们位于不同的计算机上,请从服务器所在计算机上的CLI批量加载


如果您想使用HTTP,文件将被传输,但是由于将文件发送到服务器的网络开销,您将获得较差的大容量加载性能。同样,您最好使用服务器在机器上进行批量加载。

我想Michael回答的是异常的原因。 我找到了解决这个问题的方法

而不是创建数据库和批量加载RDF/OWL文件。创建到stardog DB的连接。并通过连接导入RDF文件

下面给出了示例代码

System.out.println("start updating db");
String myDBName = "myDB" ;

StardogDBMS dbms =
        //StardogDBMS.toServer("snarl://localhost:5820/")
        StardogDBMS.toServer("snarl://myRemoteServer:5820/")
        .credentials("admin", "admin".toCharArray()).login();

File file = new File("src\\main\\webapp\\test.rdf"))

System.out.println("creating " + myDBName);

dbms.disk(myDBName).create());
dbms.logout();

aConn = ConnectionConfiguration.to(myDBName) // the name of the db to connect to
            .credentials("admin", "admin") // the credentials with which to connect
            .url("snarl://myRemoteServer:5820/")
            .connect(); // now open the connection

    System.out.println("importing files to "+myDBName);
    aConn.begin();
    aConn.add().io().format(RDFFormat.RDFXML).stream(file);     
    aConn.commit();
    System.out.println("files imported to "+myDBName);

    System.out.println("DB Updated");

我想迈克尔的回答就是这个例外的原因。 我找到了解决这个问题的方法

而不是创建数据库和批量加载RDF/OWL文件。创建到stardog DB的连接。并通过连接导入RDF文件

下面给出了示例代码

System.out.println("start updating db");
String myDBName = "myDB" ;

StardogDBMS dbms =
        //StardogDBMS.toServer("snarl://localhost:5820/")
        StardogDBMS.toServer("snarl://myRemoteServer:5820/")
        .credentials("admin", "admin".toCharArray()).login();

File file = new File("src\\main\\webapp\\test.rdf"))

System.out.println("creating " + myDBName);

dbms.disk(myDBName).create());
dbms.logout();

aConn = ConnectionConfiguration.to(myDBName) // the name of the db to connect to
            .credentials("admin", "admin") // the credentials with which to connect
            .url("snarl://myRemoteServer:5820/")
            .connect(); // now open the connection

    System.out.println("importing files to "+myDBName);
    aConn.begin();
    aConn.add().io().format(RDFFormat.RDFXML).stream(file);     
    aConn.commit();
    System.out.println("files imported to "+myDBName);

    System.out.println("DB Updated");


您可以发布错误消息/堆栈跟踪吗?编辑问题以添加堆栈跟踪。唯一的区别是您取消注释了
localhost
vs
myRemoteServer
行,还是您实际上也在远程部署代码?我一次只部署一个位置的代码。我必须在“myRemoteServer”中执行此过程“localhost”仅用于尝试代码。您可以发布错误消息/堆栈跟踪吗?编辑问题以添加堆栈跟踪。唯一的区别是您取消对
localhost
vs
myRemoteServer
行的注释,还是您实际上也在远程部署代码?我一次只部署一个位置的代码。我必须在“myRemoteServer”中执行此过程“localhost”仅用于尝试代码。它创建了一个非空的文件对象。但是当我在create()中使用file对象时,我得到了一个异常。服务器上是否存在文件夹
src\main\webapp
?它正在创建一个不为null的file对象。但是,当我在create()中使用file对象时,我遇到了一个异常。服务器上是否存在文件夹
src\main\webapp
?虽然这是真的,但在创建数据库后,您将无法再使用Stardog的大容量加载程序。因此,这种方法适用于对数据库进行增量更改,但对于批量添加数百万或数千万(或更多)个三元组来说,它不是一种可接受的方法。向Stardog添加那么多数据应该在创建时完成。那么解决方法是什么呢。如何在服务器中查找文件。我在服务器目录中甚至没有读取权限。Stardog在服务器上查找文件的方式与在计算机上查找文件的方式相同,您给它一个相对或绝对的文件路径,它将在该位置打开文件。在创建后添加大量数据的另一种方法是以较小的块添加数据,例如,每次添加250k个三元组。我的要求是导入非常小的文件(80kb-100Kb文件)。如果我们在创建数据库后添加非常大的文件,会发生什么情况。它会起作用,并且会比创建时的大容量加载慢。虽然这是事实,但在创建数据库后,您将无法再使用Stardog的大容量加载程序。因此,这种方法适用于对数据库进行增量更改,但对于批量添加数百万或数千万(或更多)个三元组来说,它不是一种可接受的方法。向Stardog添加那么多数据应该在创建时完成。那么解决方法是什么呢。如何在服务器中查找文件。我甚至没有读权限,我