有沒有Java版類似SQLite的開源庫?
[導(dǎo)讀]能嵌入JAVA代碼被調(diào)用,又能進(jìn)行數(shù)據(jù)計(jì)算的開源庫,數(shù)據(jù)庫類的有HSQLDB/Derby/H2等。這幾個(gè)和SQLite的毛病一樣,入庫過程非常繁瑣,要檢查表名是否重復(fù)、建表結(jié)構(gòu)、讀文件、解析字段、插入記錄、建索引等,而且沒法處理不規(guī)則的文本和特殊數(shù)據(jù)源;至于近年來計(jì)算庫逐漸被重視...
能嵌入JAVA代碼被調(diào)用,又能進(jìn)行數(shù)據(jù)計(jì)算的開源庫,數(shù)據(jù)庫類的有HSQLDB/Derby/H2等。這幾個(gè)和SQLite的毛病一樣,入庫過程非常繁瑣,要檢查表名是否重復(fù)、建表結(jié)構(gòu)、讀文件、解析字段、插入記錄、建索引等,而且沒法處理不規(guī)則的文本和特殊數(shù)據(jù)源;至于近年來計(jì)算庫逐漸被重視的功能--JSON計(jì)算,雖然內(nèi)嵌數(shù)據(jù)庫也是趕鴨子上架,但這幾個(gè)還不如內(nèi)嵌數(shù)據(jù)庫。DataFrame類的計(jì)算庫有Tablesaw/ Joinery/ Morpheus等,在多層JSON(半結(jié)構(gòu)化數(shù)據(jù))的讀取和計(jì)算上,它們比數(shù)據(jù)庫要方便多了,但二維結(jié)構(gòu)化數(shù)據(jù)的計(jì)算又遠(yuǎn)不如數(shù)據(jù)庫。二維結(jié)構(gòu)化數(shù)據(jù)和多層JSON的計(jì)算都足夠強(qiáng),又支持多種數(shù)據(jù)源,可處理不規(guī)則文本的嵌入式JAVA開源庫,集算器SPL是個(gè)更好的選擇。JAVA調(diào)用SPL只需JDBC接口,基本看一遍就會(huì)。比如把tab分隔的文本文件Orders.txt按Client列順序排序,按Amount列逆序排序:
…
Class.forName("com.esproc.jdbc.InternalDriver");
Connection connection =DriverManager.getConnection("jdbc:esproc:local://");
Statement statement = connection.createStatement();
String str="=T(\"D:/Orders.txt\").sort(Client,- Amount)";
ResultSet result = statement.executeQuery(str);
…
一個(gè)T函數(shù)就相當(dāng)于內(nèi)嵌數(shù)據(jù)庫入庫那一整套過程,比那些內(nèi)嵌的數(shù)據(jù)庫方案要方便多了。
為了數(shù)據(jù)庫程序員的方便,SPL也支持SQL語句,比如上面的排序可改寫為:?
str="$select * from d:/Orders.txt order by Client, Amount desc"
再講講剛才的sort函數(shù),這樣的基本計(jì)算函數(shù)SPL有上百個(gè),可以直接完成大多數(shù)常規(guī)計(jì)算。下面試舉一些:
//條件查詢
str="=T(\"D:/Orders.txt\").select(Amount>1000