王 巖,施一飛,王明珠
(吉利學院,四川 成都 641423)
在安卓系統中,其采用的是一款輕量化數據庫SQLite,編程時如果單純使用SQLite 原生的操作語句編寫,那么在效率和容錯方面會表現一般,如可以開發一款映射插件來服務和SQLite 數據庫的溝通,就會在一定程度上提升編寫程序的效率。經過對國內多個安卓程序產品項目的調研,發現安卓映射插件在應用中均有著不同的程度,當該程序對于后端的溝通量不是很大時,可能就沒有必要安裝相關映射插件,當然絕大多數的程序比較復雜,還要考慮和PC 平臺及Web 平臺功能的一致性[1],所以大多數都安裝有公開的或者自行研發的映射插件,方便對于數據庫的溝通,達到自身程序運行目的。
安卓系統的開發主要基于Java 語言,以往在使用Java 語言進行各類數據庫的相關操作時,會經常用到諸如Hibernate 或MyBatis 等框架[2]。但對于SQLite 數據庫,并未有類似的框架,并且安卓系統不適合使用較復雜的大型框架,只能使用一些輕量級的框架。如OrmLite 框架等,但目前能支持 SQLite 數據庫的第三方框架,其種類欠豐富,功能欠完善,操作也欠優化[3]。
本次開發是在原有的ChopinLite 1.0 的版本上進行功能優化以及完善,之前的版本在添加刪除上不能夠進行批量添加刪除,只能一次一次的進行重復操作,且占用系統內存,浪費大量時間,操作不夠便捷,由此本次開發偏向批量操作等功能,著重開發以下5 個方面,本文就(4)(5)項的原理會加以重點說明。
(1)實體批量增加功能:用戶在添加大量實體時,會浪費很多時間,因此為了節約用戶的時間和提升用戶的工作效率,在以前的基礎上對其進行了優化,實現在數據庫中實體批量添加數據的功能。可以更加高效的操作數據庫中的內容,節約了大量的操作的時間。
(2)實體批量刪除功能:刪除數據的語句非常簡單,但是大量的刪除操作會消耗大部分時間,因此實體批量刪除操作應運而生。該功能在1.0 的基礎上進行優化,實現在數據庫中批量刪除數據的操作。
(3)實體批量修改功能:增刪改作為數據庫的基礎操作,修改用戶數據也是經常用到的功能之一。而修改數據的操作并不像添加和刪除實體那樣簡單,所需要的代碼極其煩瑣。因此在數據庫中實體批量修改就成了2.0 版本的重頭戲。
(4)實體批量覆蓋功能:覆蓋操作是把本地數據上傳到數據庫,與批量刷新操作不同,批量覆蓋是對數據庫已有的實體做更新操作,沒有的做添加操作,以本地數據為準。
(5)實體批量刷新功能:刷新實體同樣是數據庫經常進行的操作。單個實體進行刷新和批量實體刷新有所不同,需要先以數據庫為基準進行判斷,當實體存在于數據庫時,進行選擇操作,當實體并未在數據庫中查詢到時,進行添加操作。
本次開發的框架摒棄了其他類似框架的不足之處,使用者無須編寫配置文件,僅需使用框架中已經實現的各種操作方法,無須二次開發。該軟件的特性在于以非循環的方式實現增刪改查,更新和覆蓋的批量操作。
在實現單個實體添加的基礎上,運用全新的結構化查詢語言(Tructured Query Language,SQL)語句實現實體批量添加,節約用戶操作時間,提升用戶的工作效率,更高效的操作數據庫的內容,使用 數據訪問對象(Data Access Object,DAO)調用AddBatch 方法,可以批量添加實體。添加實體后,實體會自動獲得身份標識號(Identity Document,ID),成為持久態。
刪除與批量添加的原理相同,使用獨特的 SQL 語句,實現一次操作,批量刪除的結果。解放用戶繁雜的重復操作的同時減少計算機運行的壓力,節約資源,實現可持續發展。
批量修改功能在一定程度上簡化修改的煩瑣過程,內部程序僅采用一條 SQL 語句,達到批量修改的目的。使用 DAO 對象調用 EditBatch 方法,可以批量修改實體。(1)查詢再修改,FindAll 得到集合。(2)設置需要修改的實體的各類屬性。(3)最后修改集合或集合中的個例。
刷新實體的方法和其他功能有所不同,主要是調用了其他的方法。
刷新是以反射再賦值的方式實現了實體的批量刷新,主要是通過反射拿取數據庫里的值,賦值回本地。將數據庫與本地數據兩者ID 做對比,若兩者中存在相同ID,則把數據庫中的數據下載到本地。若數據庫中沒有該ID,則將本地數據添加到數據庫中。
使用 DAO 對象調用 AttachAndRefreshBatch 方法,可以更新實體,結果以數據庫為準,使用實例如下:

覆蓋的操作與刷新大同小異,本軟件的覆蓋操作以本地數據為準,將數據上傳到數據庫,與批量刷新操作不同的是,批量覆蓋是對數據庫已有的實體做更新操作,沒有的做添加操作。類似于上傳的原理,通過這樣的方式更新數據庫,使之兩邊數據保持一致。
安卓使用Replace into 語句,輕松實現了預期功能,SQLite 數據庫是通過直接覆蓋的方式進行操作的。批量覆蓋操作就是將數據庫與本地數據兩者ID 做對比,與刷新操作所不同的是:若兩者中存在相同ID,則把數據庫中的數據進行更新操作。若數據庫中沒有該ID,則直接進行添加操作。使用 DAO 對象調用AttachAndOverrideBatch 方法,可以更新實體,結果以數據庫為準,
使用實例如下:

安卓平臺相較于其他平臺,安卓具有開放性的優勢,這就意味安卓擁有更多的開發者,更多的用戶和應用。用戶和應用的多樣性會對插件的需求大量增加,可以讓插件得到快速的發展。安卓還是一個開源平臺,可以提供種類繁多的函數庫和有用的工具,減少開發者的工作量,同時還能增加創新性和軟件的交互性。目前安卓平臺的相關實體映射的插件較少,增加了所研究的映射插件的實用性。
在插件設計之初,并沒有考慮到用戶所使用的數據庫的多樣性的問題,只考慮了SQLite 數據庫。但實際上,一款優秀的插件則應該適應眾多的軟件,而不能專用化。所以,在后續的開發中,我們要讓插件的適用范圍更廣,例如在MySQL、Oracle、SQL Server 等數據庫中都可以使用。可以在Java SE 平臺使用Java 數據庫連接(Java Database Connect,JDBC) 工具向其他數據庫進行移植,以此來滿足在多種數據庫中均可進行使用的目的。
綜上所述,本次開發增加了批量操作的多種功能,既節省了時間,又使代碼更加簡練,操作更方便,節約了程序的運行內存,解放了計算機的運行壓力,為后續實體映射軟件的發展指明了新方向。