將Oracle作為NoSQL文件儲存
使用Java編寫透過SODA(Simple Oracle Document Access)在Oracle資料庫中使用JSON(而不僅僅是JSON!)。 SODA允許您的Java應用程式使用Oracle資料庫作為NoSQL文件儲存。
首先,要確保有一個Oracle 12.1.0.2例項,並且應用補丁20885778(注:並不是資料庫所有版本都適用)。
可以透過My Oracle Support()搜尋補丁編號,20885778或直接訪問此URL:/rs?type=patch&id=20885778。並確保遵循README.txt檔案中指定的所有安裝步驟進行安裝。
給使用者授予SODA_APP許可權(注:根據實際情況修改schemaName):
grant SODA_APP to schemaName;
以下通過Java程式演示SODA的幾個常用操作:
1.建立新集合2.將文件插入到集合中
3.通過其自動生成的鍵檢索第一個插入的文件
4.檢索匹配查詢示例或QBE的文件
import java.sql.Connection;
import java.sql.DriverManager;
import oracle.soda.rdbms.OracleRDBMSClient;
import oracle.soda.OracleDatabase;
import oracle.soda.OracleCursor;
import oracle.soda.OracleCollection;
import oracle.soda.OracleDocument;
import oracle.soda.OracleException;
import java.util.Properties;
import oracle.jdbc.OracleConnection;
public class testSODA {
public static void main(String[] args) {
// 設定連線字串,注意根據實際連線修改
String url ="jdbc:oracle:thin:@//hostName:port/serviceName";
Properties props =new Properties();
// 設定資料庫使用者名稱和密碼,注意根據實際連線修改
props.setProperty("user", "schemaName");
props.setProperty("password", "password");
OracleConnection conn =null;
try {
//獲取到Oracle例項的JDBC連線
conn = (OracleConnection) DriverManager.getConnection(url, props);
//啟用JDBC隱式語句快取記憶體
conn.setImplicitCachingEnabled(true);
conn.setStatementCacheSize(50);
// 獲取 OracleRDBMSClient – SODA的起點
OracleRDBMSClient cl =new OracleRDBMSClient();
// 獲取資料庫
OracleDatabase db = cl.getDatabase(conn);
// 建立名為"MyFirstJSONCollection"的集合.
// 注意:集合名稱區分大小寫。
//在RDBMS中建立名稱為“MyFirstJSONCollection”的表來儲存集合
OracleCollection col = db.admin().createCollection("MyFirstJSONCollection");
//建立幾個JSON文件,表示使用者和使用者有多少個朋友
OracleDocument doc1 =
db.createDocumentFromString(
"{ \"name\" : \"Alex\",\"friends\" : \"50\" }");
OracleDocument doc2 =
db.createDocumentFromString(
"{ \"name\" : \"Mia\",\"friends\" : \"300\" }");
OracleDocument doc3 =
db.createDocumentFromString(
"{ \"name\" : \"Gloria\",\"friends\" : \"399\" }");
// 將文件逐個插入到集合中。
// 注:SODA還提供了更高效的批次插入
OracleDocument resultDoc1 = col.insertAndGet(doc1);
OracleDocument resultDoc2 = col.insertAndGet(doc2);
OracleDocument resultDoc3 = col.insertAndGet(doc3);
//使用其自動生成的唯一ID(即金鑰)檢索第一個文件
System.out.println ("*透過唯一KEY檢索第一個文件*\n");
OracleDocument fetchedDoc = col.find().key(resultDoc1.getKey()).getOne();
System.out.println (fetchedDoc.getContentAsString());
//檢索代表至少有300位朋友的使用者的文件。使用以下查詢示例:{friends:{$ gte:300}}。
System.out.println ("\n*檢索代表至少有300位朋友的使用者的文件*\n");
OracleDocument f = db.createDocumentFromString(
"{ \"friends\" : { \"$gte\": 300 }}");
OracleCursor c =null;
try {
// 獲取遊標
c = col.find().filter(f).getCursor();
while (c.hasNext()) {
// 獲取下一個文件
fetchedDoc = c.next();
System.out.println (fetchedDoc.getContentAsString());
}
}
finally {
//必須關閉游標釋放資源
if (c !=null) {
c.close();
}
}
//刪除集合
if (args.length >0&& args[0].equals("drop")) {
col.admin().drop();
System.out.println ("\n* 集合被刪除 *");
}
}
catch (Exception e) {
e.printStackTrace();
}
finally {
if (conn !=null) {
try {
conn.close();
}
catch (Exception e) {
}
}
}
}
}
注意修改程式開頭的“url”字串。此外,在程式開頭設定的“使用者”和“密碼”屬性需要根據實際情況修改。
此外,編譯執行此程式還需要以下jar包:
1.Oracle資料庫12.1.0.2附帶的ojdbc6.jar。從這裡下載:
。
2.javax.json-1.0.4.jar。這是JSR353實現,從這裡下載:
。
3.orajsoda-version.jar。SODA jar,在這裡下載:
。
編譯並執行testSODA.java,確保必要的jar在類路徑中。執行以下操作:
javac-classpath "orajsoda.jar" testSODA.java
java-classpath "orajsoda-version.jar:ojdbc6.jar:javax.json-1.0.4.jar:."testSODA
您應該看到以下輸出:
*透過唯一KEY檢索第一個文件*
{"name" : "Alex", "friends" : "50" }
*檢索代表至少有300位朋友的使用者的文件*
{"name" : "Mia", "friends" : "300" }
{"name" : "Gloria", "friends" : "399" }
此示例使用了集合檢索文件的兩種方法:使用唯一KEY鍵或使用QBE。在上面的程式碼中查詢所有至少有300個朋友的使用者使用了以下QBE:
{"friends": {"$gte" : 300}}
如你所見,QBE是一個JSON格式字串,其結構類似於它試圖匹配的JSON文件。各種運算子可以出現在QBE內部。示例中,$ gte運算子用於查詢“friends”欄位設定為大於或等於300的所有文件。
要檢出支援此集合的表,可以使用SQLPlus或其他類似工具連線到上述示例中相關使用者下,並執行:
SQL>desc "MyFirstJSONCollection"
Name Null? Type
------------------------------------------------- ----------------------------
ID NOTNULL VARCHAR2(255)
CREATED_ON NOT NULL TIMESTAMP(6)
LAST_MODIFIED NOT NULLTIMESTAMP(6)
VERSION NOT NULLVARCHAR2(255)
JSON_DOCUMENT BLOB
正如您所看到的,已經建立了一個包含以下列的表:
ID Stores the auto-generatedkey
JSON_DOCUMENT Stores the document content
CREATED_ON Stores the auto-generated created-ontimestamp
LAST_MODIFIED Stores the auto-generated last-modifiedtimestamp
VERSION Stores the auto-generateddocument version
此表模式使用的是預設集合配置,但SODA集合是高度可配置的。例如,時間戳和版本列是可選的,有許多可能的方法來生成ID或版本等。
要刪除集合,刪除基礎表並清理資料庫中持久儲存的後設資料,請再次執行示例,但這次在最後的引數中使用“drop”引數:
java-classpath "orajsoda.jar:ojdbc6-12.1.0.2.0.jar:javax.json-1.0.4.jar:."testSODA drop
現在的輸出與前面的輸出不同,因為將再次插入相同的三個文件。但是,最後,集合將被刪除,並刪除基礎表。
注意:不要從SQL中刪除集合表。集合具有儲存在Oracle RDBMS中的後設資料,因此必須使用drop()方法正確刪除。參見程式碼中的:col.admin().drop()。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29337971/viewspace-2130197/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 將Mountain Lion文件的預設儲存位置從iCloud 改為本地硬碟AICloud硬碟
- MongoDB文件儲存MongoDB
- 將FileSystem轉換為ASM儲存ASM
- Laravel 使用 Elasticsearch 作為日誌儲存LaravelElasticsearch
- 使用NFS作為Glance儲存後端NFS後端
- 如何高效地將SQL資料對映到NoSQL儲存系統中SQL
- 利用Qt將網頁儲存為PDFQT網頁
- 在應用程式中將OJB作為一個儲存層使用(一) (轉)
- 在應用程式中將OJB作為一個儲存層使用(二) (轉)
- 在應用程式中將OJB作為一個儲存層使用(三) (轉)
- 在應用程式中將OJB作為一個儲存層使用(四) (轉)
- 在應用程式中將OJB作為一個儲存層使用(六) (轉)
- 在應用程式中將OJB作為一個儲存層使用(五) (轉)
- k8s使用rbd作為儲存K8S
- 相比NoSQL,關聯式資料庫為何不適合儲存影像? - RedditSQL資料庫
- 將圖片檔案儲存到Oracle的儲存過程Oracle儲存過程
- Oracle查詢結果 儲存為XMLOracleXML
- 子元件獲取父元件的值,將這個值作為狀態值儲存元件
- 如何將html程式碼儲存為Pdf檔案HTML
- oracle儲存過程將引數字串分割sqlOracle儲存過程字串SQL
- 成功安裝Oracle 11gR2 for Linux RAC,使用NFS作為共享儲存OracleLinuxNFS
- 騰訊重磅開源分散式NoSQL儲存系統DCache分散式SQL
- NOSQL儲存的基於事件的事務實現SQL事件
- 什麼時候該使用NoSQL儲存資料庫?SQL資料庫
- MATLAB將figure視窗儲存為圖片Matlab
- Matlab將.mat檔案儲存為.txt檔案Matlab
- 將PPT文件轉換為Word文件
- 沒有儲存的word文件怎麼找回來 恢復沒有儲存的word文件
- 作為最常用的儲存協議,企業如何進行NAS儲存統一管理?協議
- 利用oracle儲存過程執行作業系統命令Oracle儲存過程作業系統
- 為什麼選擇b+樹作為儲存引擎索引結構儲存引擎索引
- 將座標系統儲存為一個檔案.prj
- 將網頁儲存為圖片形式程式碼例項網頁
- Android將view儲存為圖片並放在相簿中AndroidView
- electron-store會將資料儲存為什麼格式
- Oracle儲存過程Oracle儲存過程
- Oracle 儲存型別Oracle型別
- oracle儲存研究方法Oracle