最近公司須要搞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()); } } }