jena 開發之 mysql數據導入

最近公司須要搞sparql,讓我作c++開發情何以堪,第一次搞JAVA,有錯誤還請你們指正出來,好了不廢話了,進入正題。java


最新版的jena經過SDB的方式訪問並存儲三元組數據。node

要使用mysql須要下載JDBC驅動,能夠前往mysql的官網下載http://dev.mysql.com/downloads/connector/j/mysql

若是使用SDB的方式操做數據庫的話,咱們須要在二者之間創建一個關聯c++

這個關聯的類能夠使用Store,一個關聯只能建立一個Storesql

第一步 創建鏈接:數據庫

// 鏈接標識符
StoreDesc desc = new StoreDesc(LayoutType.LayoutTripleNodesHash,DatabaseType.MySQL);
// 加載mysql驅動
JDBC.loadDriverMySQL();
SDBConnection conn = new SDBConnection("jdbc:",
                                     "admin", "admin");
Store store = SDBFactory.connectStore(conn, desc);

在這段代碼中,首先咱們建立一個鏈接標識,三元組<主,謂,賓>or<s,p,o>之間使用哈希標識(LayoutType.LayoutTripleNodesHash)
測試

數據庫類型爲mysql。看下圖能夠更好的理解 何爲 hash關聯。
spa

其次是加載一個mysql的驅動;code

最後咱們建立鏈接,並使用工廠類 SDBFactory建立Store與jena之間創建關聯。orm

第二步  導入數據:

若是是第一次訪問mysql數據庫的話(數據庫中沒有任數據),咱們須要建立一個格式化好的表,咱們必須保證這段代碼只能執行一次,若是數據庫中存在數據的話,這段代碼將會有異常拋出。

// 初次鏈接須要建立三元組數據庫格式表
if( StoreUtils.isFormatted(store) == false)
{
    System.out.println("create table format and truc data");
    store.getTableFormatter().create();
    // store.getTableFormatter().truncate();// 清空數據
}

緊接着咱們能夠導入數據,方式能夠使用  Graph、model等,這裏我使用了graph的方式

// 導入測試數據
GraphSDB graph =  new GraphSDB(store);
Node node1 = Node.createURI("http://bar");
Node node2 = Node.createURI("http://car");
Node node3 = Node.createURI("http://dar");
graph.add(new Triple(node1,node2,node3));

第三步  關閉鏈接:

graph.close();
store.close();
conn.close();

完整用例:

public class JenaExe {
    @SuppressWarnings("deprecation")
    public static void main(String[] args) {
        try
        {
            // 鏈接標識符
            StoreDesc desc = new StoreDesc(LayoutType.LayoutTripleNodesHash,DatabaseType.MySQL);
            // 加載mysql驅動
            JDBC.loadDriverMySQL();
            SDBConnection conn = new SDBConnection("jdbc:",
                                                            "admin", "admin");
            Store store = SDBFactory.connectStore(conn, desc);
            // 初次鏈接須要建立三元組數據庫格式表
            if( StoreUtils.isFormatted(store) == false)
            {
                System.out.println("create table format and truc data");
                store.getTableFormatter().create();
                // store.getTableFormatter().truncate();// 清空數據
            }
            // 導入測試數據
            GraphSDB graph =  new GraphSDB(store);
            Node node1 = Node.createURI("http://bar");
            Node node2 = Node.createURI("http://car");
            Node node3 = Node.createURI("http://dar");
            graph.add(new Triple(node1,node2,node3));
            graph.close();
            store.close();
            conn.close();
        }catch(SDBException err)
        {
            System.out.println("SDB Exception:"+err.getMessage());
        }
        catch(SQLException err)
        {
            System.out.println("SQL Exception:"+err.getMessage());
        }
    }
  
}
相關文章
相關標籤/搜索