Jena——將本體持久化到MySQL數據庫中

將本體持久化到MySQL數據庫中

1)開始的時候我使用的Jena的版本爲Jena-2.10,該版本提示沒有createModelRDBMaker這個方法
2)後來我又換了一個低版本的Jena,版本爲2.4.4,運行程序報如下錯誤:

WARN [main] (DriverRDB.java:430) - Problem formatting database
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Table 'test.jena_sys_stmt' doesn't exist
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3277)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3206)
at com.mysql.jdbc.Statement.execute(Statement.java:727)
at com.hp.hpl.jena.db.impl.SQLCache.runSQLGroup(SQLCache.java:560)
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:831)
at com.hp.hpl.jena.db.DBConnection.getDefaultModelProperties(DBConnection.java:195)
at com.hp.hpl.jena.db.impl.GraphRDBMaker.consGraph(GraphRDBMaker.java:123)
at com.hp.hpl.jena.db.impl.GraphRDBMaker.createGraph(GraphRDBMaker.java:107)
at com.hp.hpl.jena.rdf.model.impl.ModelMakerImpl.createModel(ModelMakerImpl.java:47)
at com.hp.hpl.jena.rdf.model.impl.ModelMakerImpl.createModel(ModelMakerImpl.java:50)
at com.yuwei.JenaTest.OwlToMysql.main(OwlToMysql.java:34)
Exception in thread "main" com.hp.hpl.jena.db.RDFRDBException: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Table 'test.jena_sys_stmt' doesn't exist
at com.hp.hpl.jena.db.impl.DriverRDB.formatAndConstructSystemSpecializedGraph(DriverRDB.java:473)
at com.hp.hpl.jena.db.impl.DriverRDB.getSystemSpecializedGraph(DriverRDB.java:305)
at com.hp.hpl.jena.db.impl.DriverRDB.getDefaultModelProperties(DriverRDB.java:831)
at com.hp.hpl.jena.db.DBConnection.getDefaultModelProperties(DBConnection.java:195)
at com.hp.hpl.jena.db.impl.GraphRDBMaker.consGraph(GraphRDBMaker.java:123)
at com.hp.hpl.jena.db.impl.GraphRDBMaker.createGraph(GraphRDBMaker.java:107)
at com.hp.hpl.jena.rdf.model.impl.ModelMakerImpl.createModel(ModelMakerImpl.java:47)
at com.hp.hpl.jena.rdf.model.impl.ModelMakerImpl.createModel(ModelMakerImpl.java:50)
at com.yuwei.JenaTest.OwlToMysql.main(OwlToMysql.java:34)
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:831)
at com.hp.hpl.jena.db.DBConnection.getDefaultModelProperties(DBConnection.java:195)
at com.hp.hpl.jena.db.impl.GraphRDBMaker.consGraph(GraphRDBMaker.java:123)
at com.hp.hpl.jena.db.impl.GraphRDBMaker.createGraph(GraphRDBMaker.java:107)
at com.hp.hpl.jena.rdf.model.impl.ModelMakerImpl.createModel(ModelMakerImpl.java:47)
at com.hp.hpl.jena.rdf.model.impl.ModelMakerImpl.createModel(ModelMakerImpl.java:50)
at com.yuwei.JenaTest.OwlToMysql.main(OwlToMysql.java:34)
Caused by: com.hp.hpl.jena.db.RDFRDBException: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Table 'test.jena_sys_stmt' doesn't exist
at com.hp.hpl.jena.db.impl.DriverRDB.formatAndConstructSystemSpecializedGraph(DriverRDB.java:473)
at com.hp.hpl.jena.db.impl.DriverRDB.getSystemSpecializedGraph(DriverRDB.java:305)
... 7 more



最後我將Jena的版本換爲2.6版本(下載鏈接http://download.csdn.net/detail/angle7777/6571307),在運行程序的時候就可以了。程序如下:

package com.yuwei.JenaTest;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.sql.SQLException;

import com.hp.hpl.jena.db.DBConnection;
import com.hp.hpl.jena.db.RDFRDBException;
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 OwlToMysql {
public static final String strDriver = "com.mysql.jdbc.Driver";
public static final String strURL = "jdbc:mysql://localhost:3306/owltest";
public static final String strUser = "root";
public static final String strPassword = "root";
public static final String strDB = "MySQL";

static DBConnection conn;

public static void main(String[] args) {
try{
conn = getConnection();
System.out.println(conn);
System.out.println("------------------");

ModelMaker maker = ModelFactory.createModelRDBMaker(conn);
Model model = maker.createModel("medicineOntologyCH");

FileInputStream read = null;
try{

File file = new File("D:/STUDY/GraduateStudy/MedicalTreatmentProject/medicineOntologyCH.owl");
read = new FileInputStream(file);

}catch(FileNotFoundException e){
e.printStackTrace();
System.out.println("未找到要存儲的本體文件");
}

InputStreamReader in = null;
try{
in = new InputStreamReader(read, "utf-8");
}catch(UnsupportedEncodingException e){
e.printStackTrace();
System.out.println("不支持上述字符集");
}

model.read(in, null);
try{
in.close();
}catch(IOException e){
e.printStackTrace();
System.out.println("無法將字節流文件關閉");
}

model.commit();
System.out.println("數據轉換執行完畢,已將本體文件存入數據庫");

try{
conn.close();
}catch(SQLException e){
e.printStackTrace();
System.out.println("鏈接無法關閉");
}
}catch(RDFRDBException e){
e.printStackTrace();
System.out.println("1." + e.getMessage());
}
}




public static DBConnection getConnection() {

DBConnection con = null;

con = new DBConnection(strURL, strUser, strPassword, strDB);

try {
Class.forName(strDriver);
System.out.println("驅動程序已經安裝。");
} catch (Exception e) {
System.out.println("數據庫連接失敗" + e.getMessage());
}

return con; //返回所建立的數據庫連接
}
}




Mysql數據庫就會產生如下表:




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章