2010-11-18 8 views
2

를 초기화. http://jena.sourceforge.net/DB/hsql-howto.html에서 나는 다음과 같은 코드를 작성 : JENA : 나는이 <strong>예나</strong> 및 <strong>HSQLDB</strong>를 사용하여 <strong>RDF</strong> 데이터 저장소를 초기화하는 있어요 HSQLDB RDF 데이터 저장소

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 

가 어떻게이 문제를 해결할 수

:

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

    } 

하지만이 프로그램이 실행되었을 때, 나는 다음과 같은 예외가있어?

많은 감사,

피에르

답변

3

Jena에 대한 정보는 HSQLDB 버전 1.8.x 이상을 사용함을 나타냅니다. 1.8.x 시리즈의 최신 버전 인 HSQLDB 1.8.1.3을 시험해 볼 수 있습니다.

+0

내 버전은 hsqldb-2.0.1-rc2입니다. – Pierre

+0

HSQLDB 1.8.0.x에 대한 적절한 지원을 보여주는 코드를 살펴 보았습니다. 따라서 1.8.1.3과 호환되는 1.8.1.3의 결과를 얻어야합니다. – fredt

2

당신은 강하게 예나 SDB보다는 RDB를 사용하는 것이 좋습니다 요즘입니다. SDB로 전환하십시오.

여기에 무엇이 잘못되었는지에 관해서는, 내가 생각하기에 HSQL 구문에 대한 잘못된 점을 말하고 싶습니다. RDB 작성 이후 HSQL이 변경되었을 수 있습니까? 실제 문제 진술을 확인하실 수 있습니까?