2

我正在尝试使用JenaHSQLDB初始化RDF数据存储。从http://jena.sourceforge.net/DB/hsql-howto.html我写了以下代码:

import com.hp.hpl.jena.db.DBConnection;
import com.hp.hpl.jena.db.IDBConnection;
import com.hp.hpl.jena.db.impl.Driver_HSQL;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.ModelMaker;

public class Test
    {
    /** */
    private String idbDriver="org.hsqldb.jdbcDriver";
    private String idbUrl="jdbc:hsqldb:file:/home/me/DATASTORE.HSQLDB";
    private String idbUser="sa";
    private String idbPassword="";

    /** RDF Model */
    private Model model=ModelFactory.createDefaultModel();
    /** IDB connection */
    private IDBConnection idbConnection=null;

    public Test()
        {

        }

    public void open() throws Exception
        {
        close();
        Class.forName(idbDriver);
        this.idbConnection = new DBConnection(idbUrl, idbUser, idbPassword, "HSQL");
        ModelMaker maker = ModelFactory.createModelRDBMaker(this.idbConnection) ;
        this.model=maker.createDefaultModel();
        }

    public void close()throws Exception
        {
        this.model=null;
        if(this.idbConnection!=null)
            {
            // http://jena.sourceforge.net/DB/hsql-howto.html
            Driver_HSQL.class.cast(this.idbConnection.getDriver()).shutdown();
            this.idbConnection.close();
            this.idbConnection=null;
            }
        }

    public Model getModel()
        {
        return model;
        }

    public static void main(String[] args)
        {
        try {
            Test app=new Test();
            app.open();
            app.close();
            } 
        catch (Exception e)
            {
            e.printStackTrace();
            }
        }

    }

但是当程序执行时,我得到了以下异常:

 INFO [main] (?:?) - open start
 INFO [main] (?:?) - open end
 INFO [main] (?:?) - DataFileCache.close(true) : start
 INFO [main] (?:?) - DataFileCache.close() : save data
 INFO [main] (?:?) - DataFileCache.close() : close
 INFO [main] (?:?) - open start
 INFO [main] (?:?) - open end
 WARN [main] (DriverRDB.java:430) - Problem formatting database
java.sql.SQLException: unexpected token: PRIMARY : line: 3
    at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
    at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source)
    at org.hsqldb.jdbc.JDBCStatement.execute(Unknown Source)
    at com.hp.hpl.jena.db.impl.SQLCache.runSQLGroup(SQLCache.java:562)
    at com.hp.hpl.jena.db.impl.DriverRDB.formatAndConstructSystemSpecializedGraph(DriverRDB.java:427)
    at com.hp.hpl.jena.db.impl.DriverRDB.getSystemSpecializedGraph(DriverRDB.java:305)
    at com.hp.hpl.jena.db.impl.DriverRDB.getDefaultModelProperties(DriverRDB.java:834)
    at com.hp.hpl.jena.db.DBConnection.getDefaultModelProperties(DBConnection.java:164)
    at com.hp.hpl.jena.db.impl.GraphRDBMaker.consGraph(GraphRDBMaker.java:111)
    at com.hp.hpl.jena.db.impl.GraphRDBMaker.getGraph(GraphRDBMaker.java:52)
    at com.hp.hpl.jena.rdf.model.impl.ModelMakerImpl.createDefaultModel(ModelMakerImpl.java:58)
    at Test.open(Test.java:34)
    at Test.main(Test.java:58)
Caused by: org.hsqldb.HsqlException: unexpected token: PRIMARY : line: 3
    at org.hsqldb.error.Error.parseError(Unknown Source)
    at org.hsqldb.ParserBase.unexpectedToken(Unknown Source)
    at org.hsqldb.ParserDDL.compileCreateTableBody(Unknown Source)
    at org.hsqldb.ParserDDL.compileCreateTable(Unknown Source)
    at org.hsqldb.ParserDDL.compileCreate(Unknown Source)
    at org.hsqldb.ParserCommand.compilePart(Unknown Source)
    at org.hsqldb.ParserCommand.compileStatements(Unknown Source)
    at org.hsqldb.Session.executeDirectStatement(Unknown Source)
    at org.hsqldb.Session.execute(Unknown Source)
    ... 12 more
com.hp.hpl.jena.shared.JenaException: The database appears to be unformatted or corrupted and
an attempt to automatically format the database has failed

    at com.hp.hpl.jena.db.impl.DriverRDB.getSystemSpecializedGraph(DriverRDB.java:311)
    at com.hp.hpl.jena.db.impl.DriverRDB.getDefaultModelProperties(DriverRDB.java:834)
    at com.hp.hpl.jena.db.DBConnection.getDefaultModelProperties(DBConnection.java:164)
    at com.hp.hpl.jena.db.impl.GraphRDBMaker.consGraph(GraphRDBMaker.java:111)
    at com.hp.hpl.jena.db.impl.GraphRDBMaker.getGraph(GraphRDBMaker.java:52)
    at com.hp.hpl.jena.rdf.model.impl.ModelMakerImpl.createDefaultModel(ModelMakerImpl.java:58)
    at Test.open(Test.java:34)
    at Test.main(Test.java:58)
Caused by: com.hp.hpl.jena.db.RDFRDBException: java.sql.SQLException: unexpected token: PRIMARY : line: 3
    at com.hp.hpl.jena.db.impl.DriverRDB.formatAndConstructSystemSpecializedGraph(DriverRDB.java:477)
    at com.hp.hpl.jena.db.impl.DriverRDB.getSystemSpecializedGraph(DriverRDB.java:305)
    ... 7 more

我该如何解决这个问题?

非常感谢,

皮埃尔

4

2 回答 2

3

Jena 上的信息表明他们使用的是 HSQLDB 版本 1.8.x 或更早版本。您可以尝试 HSQLDB 1.8.1.3,它是 1.8.x 系列中的最新版本。

于 2010-11-18T14:22:06.957 回答
2

这些天,强烈建议您在 Jena中使用SDB而不是 RDB。切换到 SDB。

至于这里出了什么问题,我猜我会说 HSQL 语法是错误的。自从编写 RDB 以来,HSQL 可能发生了变化?你能检查一下实际的问题陈述吗?

于 2010-11-18T14:12:26.337 回答