Java 查询sesame存储库时变量中没有值?
我想使用.nt文件作为SESAME存储库并查询它(也称为本地联合模式)。程序编写如下Java 查询sesame存储库时变量中没有值?,java,sesame,Java,Sesame,我想使用.nt文件作为SESAME存储库并查询它(也称为本地联合模式)。程序编写如下 import java.io.File; import java.util.List; import org.openrdf.OpenRDFException; import org.openrdf.repository.RepositoryConnection; import org.openrdf.model.Value; import org.openrdf.query.TupleQuery; impor
import java.io.File;
import java.util.List;
import org.openrdf.OpenRDFException;
import org.openrdf.repository.RepositoryConnection;
import org.openrdf.model.Value;
import org.openrdf.query.TupleQuery;
import org.openrdf.query.TupleQueryResult;
import org.openrdf.query.BindingSet;
import org.openrdf.query.QueryLanguage;
import org.openrdf.repository.Repository;
import org.openrdf.repository.sail.SailRepository;
import org.openrdf.sail.nativerdf.NativeStore;
public class QuerySesameLocal {
public static void main(String[] args) {
try
{
File dataDir = new File("/home/aidb/out0.nt");
Repository repo = new SailRepository(new NativeStore(dataDir));
repo.initialize();
RepositoryConnection con = repo.getConnection();
try {
String queryString = "SELECT ?x ?y WHERE { ?x ?p ?y } ";
TupleQuery tupleQuery = con.prepareTupleQuery(QueryLanguage.SPARQL, queryString);
TupleQueryResult result = tupleQuery.evaluate();
try {
if(result.hasNext())
{
System.out.println("result present");
}
System.out.println("checkpoint 1");
BindingSet bindingSet = result.next();
Value valueOfX = bindingSet.getValue("x");
Value valueOfY = bindingSet.getValue("y");
System.out.println(valueOfX.toString());
System.out.println("checkpoint 2");
// do something interesting with the values here...
}
finally {
result.close();
}
}
finally {
con.close();
}
}
catch (OpenRDFException e) {
// handle exception
}
}
}
这个程序根本不返回任何结果。我试着找出这个错误,但没有弄明白。有人能告诉你这个程序出了什么问题吗?你不能用这样的.nt文件(或任何其他rdf文件)初始化一个Sesame原生存储
NativeStore
构造函数的dataDir
参数是一个目录,本机存储将在其中创建索引并存储添加的数据-它以自己的内部格式存储这些数据,而不是以.nt文件的形式存储。所以您应该向它传递一个目录,而不是一个文件(事实上,我有点惊讶于您在执行此代码时没有得到错误)
创建并初始化存储库后,必须将文件添加到其中。您可以通过打开
RepositoryConnection
并使用其add
方法之一将文件传递给它来完成此操作。请参阅,特别是。Replace//处理异常
by抛出新的运行时异常(e)代码>,然后再次执行该程序,并读取/粘贴异常的完整堆栈跟踪(如果有)。忽略异常是不知道发生了什么的最好方法。另外,学习使用调试器。“这没那么难。@harry potter作为旁白,我注意到你已经就此提出了许多问题,并得到了一些答案,但还没有投票/接受其中任何一个。我鼓励你这样做(不仅是在这个问题上,而且在你的任何老问题上)。看看这个:正如前面提到的,我初始化了一个存储库,获得了一个连接,然后给它一个.nt文件。它工作得很好。谢谢!