JENA: initializing a HSQLDB RDF datastore
I'm trying to initialize a RDF datastore using Jena and HSQLDB. From http://jena.sourceforge.net/DB/hsql-howto.html I wrote the following code:
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();
}
}
}
but when the program was executed, I got the following exception:
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 Sou开发者_如何学Gorce)
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
How can I fix this problem ?
Many thanks,
Pierre
The information on Jena indicates they used HSQLDB version 1.8.x or older. You can try HSQLDB 1.8.1.3 which is the latest in the 1.8.x series.
You are strongly recommended to use SDB rather than RDB in Jena these days. Switch to SDB.
As for what is wrong here, at a guess I'd say something about the HSQL syntax is wrong. Maybe HSQL has changed since RDB was written? Could you check to see the actual problem statement?
精彩评论