代码之家  ›  专栏  ›  技术社区  ›  Pierre

JENA:初始化HSQLDB RDF数据存储

  •  2
  • Pierre  · 技术社区  · 15 年前

    我正在尝试初始化 RDF公司 数据存储使用 耶拿 和 HSQLDB公司 . 从 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
    

    我怎样才能解决这个问题?

    非常感谢,

    皮埃尔

    2 回复  |  直到 15 年前
        1
  •  3
  •   fredt    15 年前

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

        2
  •  2
  •   TylerH Ash Burlaczenko    7 年前

    你是 强烈地 推荐使用 SDB 而不是现在杰纳的RDB。切换到SDB。

    至于这里的错误,我想我应该说HSQL语法是错误的。也许自从RDB被编写以来HSQL已经改变了?你能看看实际的问题陈述吗?