2010-11-18 16 views
2

başlatılıyor. http://jena.sourceforge.net/DB/hsql-howto.html itibaren aşağıdaki kodu yazdım: JENA: Ben <strong>Jena</strong> ve <strong>HSQLDB</strong> kullanarak <strong>RDF</strong> veri deposuna başlatmak çalışıyorum bir HSQLDB RDF datastore

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 

Bu sorunu nasıl düzeltebilirim

:

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(); 
      } 
     } 

    } 

ancak program çalıştırıldığında, aşağıdaki özel durum var mı?

Çok teşekkürler,

Pierre

cevap

3

Jena hakkındaki bilgiler, HSQLDB sürüm 1.8.x veya daha eski sürümlerini kullandığını gösterir. 1.8.x serisinin en son olan HSQLDB 1.8.1.3'ü deneyebilirsiniz.

+0

benim sürümüm, hsqldb-2.0.1-rc2 – Pierre

+0

HSQLDB 1.8.0.x için doğru desteği gösteren kodlarına baktım. Bu nedenle 1.8.0.3 ile kullanım uyumlu olan 1.8.1.3 ile sonuç almalısınız. – fredt

2

Sen kuvvetle jena içinde SDB yerine RDB kullanılması önerilir bu gün vardır. SDB'ye geç.

Burada neyin yanlış olduğuna gelince, bir tahminde HSQL sözdizimi hakkında bir şeyler söylemek yanlış olur. Belki RDB yazıldığından beri HSQL değişti? Asıl sorun bildirimini kontrol edermisin?

İlgili konular