一 配置litepal
1.在app/build.gradle中的dependencies閉包中添加依賴:
compile 'org.litepal.android:core:1.4.1'
2.在app/src/mian目錄里 new一個Directory,命名為assets目錄,在目錄中創建一個file,命名litepal.xml。並進行編輯:
1 <?xml version="1.0" encoding="utf-8" ?> 2 <litepal> 3 <dbname value="BookStore"></dbname> 4 5 <version value="1"></version> 6 <list> 7 8 </list> 9 </litepal>
dbname用於指定數據庫名,version指定版本號。
3.配置LitePalApplication,修改AndroidMainActivity中的代碼,在<application>中添加:
android:name="org.litepal.LitePalApplication"
二 創建和升級數據庫
在litepal中采用的是對象關系映射模型,可以使用面向對象的思想來編寫數據庫,即把表映射成了對應的類,表中的列就是類中的數據類型,再給各種數據寫上對應的get和set方法。
(1)創建數據庫:
如先創建一個Book表,則創建book類。如下:
1 public class Book { 2 3 private int id; 4 private String author; 5 private double price; 6 private int pages; 7 private String name; 8 9 public int getId() { 10 return id; 11 } 12 13 public void setId(int id) { 14 this.id = id; 15 } 16 17 public String getAuthor() { 18 return author; 19 } 20 21 public void setAuthor(String author) { 22 this.author = author; 23 } 24 25 public double getPrice() { 26 return price; 27 } 28 29 public void setPrice(double price) { 30 this.price = price; 31 } 32 33 public int getPages() { 34 return pages; 35 } 36 37 public void setPages(int pages) { 38 this.pages = pages; 39 } 40 41 public String getName() { 42 return name; 43 } 44 45 public void setName(String name) { 46 this.name = name; 47 } 48 }
在Book類中我們定義了類中對應表中的各列的字段。這就是映射。
將Book類添加到映射模型列表中,修改litepal.xml中的代碼如下:注意一定要寫完整的類名。
<list> <mapping class="com.example.litepaltest.Book"></mapping> </list>
現在只要進行任意一次數據庫操作,數據庫就會被創建,book表也會被創建,所以使用Litepal.getDatabase()方法來進行最簡單的數據庫操作,以達到創建數據庫和表的目的。
(2)升級數據庫:
之前使用SQliteOpenHelper來進行對數據庫操作時,雖然也可以升級,但是每次升級會先刪除之前存在的表,如果表中存有數據就會造成不必要的損失。而使用litepal則不會在更新時候刪除之前存在的表和數據。
如我們在book表中新加一個列,只要在book類中新加入一個字段和相應的方法即可。代碼如下:
1 private String press; 2 3 public String getPress() { 4 return press; 5 } 6 7 public void setPress(String press) { 8 this.press = press; 9 }
同時還可以加入一個新的表Category表來分類書籍。新建一個Category類,同樣字段對應相應的行,如下:
1 public class Category { 2 private int id; 3 private String categoryName; 4 private int categoryCode; 5 6 public int getId() { 7 return id; 8 } 9 10 public void setId(int id) { 11 this.id = id; 12 } 13 14 public void setCategoryName(String categoryName) { 15 this.categoryName = categoryName; 16 } 17 18 public void setCategoryCode(int categoryCode) { 19 this.categoryCode = categoryCode; 20 } 21 }
這時,只需要在litepal.xml中修改相應的版本號,並加入新添加的表的類名就可。(版本號增加為2)
1 <litepal> 2 <dbname value="BookStore"></dbname> 3 4 <version value="2"></version> 5 <list> 6 <mapping class="com.example.litepaltest.Book"></mapping> 7 <mapping class="com.example.litepaltest.Category"></mapping> 8 </list> 9 </litepal>
三 添加數據
添加數據很簡單,只需要將要添加的表繼承自LitePalSupport類(原繼承DataSupport類,現在已經棄用了)。
public class Book extends LitePalSupport
然后在MainActivity中添加相關要添加的數據,最后用save()進行保存即可。如下:
1 Button addData = (Button) findViewById(R.id.add_data); 2 addData.setOnClickListener(new View.OnClickListener() { 3 @Override 4 public void onClick(View view) { 5 Book book = new Book(); 6 book.setName("the da wei"); 7 book.setAuthor("mask"); 8 book.setPages(33); 9 book.setPrice(19.33); 10 book.setPress("Unkonw"); 11 book.save(); 12 } 13 });
如上,先創建出一個Book的實例,然后調用Book類中的設置好的set方法設置數據,然后用save()方法來進行保存數據。
四 更新數據
我們修改表中一本書的價格和出版社,其中有限制條件作者和書名。代碼如下:
1 Button updateData = (Button) findViewById(R.id.update_data); 2 updateData.setOnClickListener(new View.OnClickListener() { 3 @Override 4 public void onClick(View view) { 5 Book book = new Book(); 6 book.setPrice(14.99); 7 book.setPress("Auchor"); 8 book.updateAll("name=? and author=?", "the a", "maskd"); 9 } 10 });
先將表實例化,然后通過set修改要更新的數據,通過updateAll()方法來更新,其中第一個參數是限制的條件,之后是限制條件具體的參數。如果不指定條件語句的話,表示所有的數據都更新。
如果想將列的內容更新為默認值的話,使用如下代碼:就可以將目標列中的值設為默認值了。
book.setToDefault("pages");
五 刪除數據
刪除數據假設還是繼承自datasupport類:代碼如下
1 Button deleteButton = (Button) findViewById(R.id.delete_data); 2 deleteButton.setOnClickListener(new View.OnClickListener() { 3 @Override 4 public void onClick(View view) {6 DataSupport.deleteAll(Book.class,"price<?","12.00"); 7 } 8 });
其中刪除刪除deleteAll方法第一個參數是對應的表,第二個和第三個參數相當於SQL語句中的where和對應的數值。