简介:一个让开发者使用SQLite数据库更加容易的库文件

LitePal for Android,项目地址:点击打开

LitePal是一个开源的android库,它让开发者使用SQLite数据变得容易。你甚至可以不用写SQL语句而完成数据库的大部分的操作,包括创建、更新表,crud操作(翻译不出来),聚合功能等。LitePal的一些初始化设置相当简单,你可以将它集成到你的项目中,而所花费的时间将不超过5分钟。

现在就体验它吧!

功能

1.使用对象关系映射(ORM)模式

2.几乎零设置(仅仅需要设置配置文件里面的一些属性)

3.自动维护所有表(比如:创建、修改或者是删除)

4.封装API以避免使用SQL语句

5.强悍的聚类查询功能

6.你任然可以使用SQL,但是比原有函数更容易、更友好

7.想了解更多,赶快自己体验吧

最新下载

快速设置

1.导库

Eclipse:从上面的下载地址下载最新的jar包,或者你可以点击这里查看所有的版本,并选择你需要的进行下载;将jar包赋值到你的Android项目的libs文件夹内。

Android Studio:修改的你的build.gradle文件,然后添加下面的依赖项

  1. dependencies {
  2. compile 'org.litepal.android:core:1.2.0'
  3. }

2.配置litepal.xml

在你项目的assets文件夹创建一个名为litepal.xml文件,然后赋值下面的代码到该文件中。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <litepal>
  3. <!--
  4. Define the database name of your application.
  5. By default each database name should be end with .db.
  6. If you didn't name your database end with .db,
  7. LitePal would plus the suffix automaticly for you.
  8. For example:
  9. <dbname value="demo" ></dbname>
  10. -->
  11. <dbname value="demo" ></dbname>
  12.  
  13. <!--
  14. Define the version of your database. Each time you want
  15. to upgrade your database, the version tag would helps.
  16. Modify the models you defined in the mapping tag, and just
  17. make the version value plus one, the upgrade of database
  18. will be processed automaticly without concern.
  19. For example:
  20. <version value="1" ></version>
  21. -->
  22. <version value="1" ></version>
  23.  
  24. <!--
  25. Define your models in the list with mapping tag, LitePal will
  26. create tables for each mapping class. The supported fields
  27. defined in models will be mapped into columns.
  28. For example:
  29. <list>
  30. <mapping class="com.test.model.Reader"></mapping>
  31. <mapping class="com.test.model.Magazine"></mapping>//包名+类名
  32. </list>
  33. -->
  34. <list>
  35. </list>
  36. </litepal>

这个就是仅仅需要的配置文件,它的一些属性使用起来也很简单。

dbname 项目的数据库的名称

version 配置数据库的版本。当你每次想要更新数据库的时候,在这里加一个值。

list 配置类映射

3.配置 LitePalApplication

你不想每次都通过上下文参数。为了使用APIs更简单,仅仅需要在AndroidManifest.xml文件中配置LitePalApplication,如下所示:

  1. <manifest>
  2. <application
  3. android:name="org.litepal.LitePalApplication"
  4. ...
  5. >
  6. ...
  7. </application>
  8. </manifest>

当然你也可以拥有你自己的程序并且已经在这里配置好了,就像这样:

  1. <manifest>
  2. <application
  3. android:name="com.example.MyOwnApplication"
  4. ...
  5. >
  6. ...
  7. </application>
  8. </manifest>

这个地方要注意,我一开始就是这里就是这里配置出错了,导致老是crash,我之后是参考了给的例子,然后新建了一个类来继承LitePalApplication,里面没有任何的代码,然后在上面写上程序的名称,详细见下面的代码。

没关系, LitePal任然可以使用,仅仅需要改变MyOWnApplication的继承方式,从Application到LitePalApplication,就像下面的这样:

  1. public class MyOwnApplication extends LitePalApplication {
  2. ...
  3. }

这些操作可以使程序运行顺利而没有任何的副作用。(╮(╯▽╰)╭翻译的好生硬啊!!!)

开始

设置之后,你现在可以体验强有力的函数功能。

 1.创建表

首先定义模块。比如:你需要两个模块,专辑和歌曲,那么模块可以像下面这样定义:

  1. public class Album extends DataSupport {
  2.  
  3. private String name;
  4.  
  5. private float price;
  6.  
  7. private List<Song> songs = new ArrayList<Song>();
  8.  
  9. // generated getters and setters.
  10. ...
  11. }
  1. public class Song extends DataSupport {
  2.  
  3. private String name;
  4.  
  5. private int duration;
  6.  
  7. private Album album;
  8.  
  9. // generated getters and setters.
  10. ...
  11. }

然后在litepal.xml文件中将这些模块加入到映射列表中(在 2配置litepal.xml中已经有说明了):

  1. <list>
  2. <mapping class="org.litepal.litepalsample.model.Album"></mapping>
  3. <mapping class="org.litepal.litepalsample.model.Song"></mapping>
  4. </list>

好了,这个表将会在下次你操作数据库的时候自动生成。比如,使用如下代码获得SQLiteDatabase:

  1. SQLiteDatabase db = Connector.getDatabase();

现在表将会使用SQLs自动生成,就像这样:

  1. CREATE TABLE album (
  2. id integer primary key autoincrement,
  3. price real,
  4. name text
  5. );
  6.  
  7. CREATE TABLE song (
  8. id integer primary key autoincrement,
  9. duration integer,
  10. name text,
  11. album_id integer
  12. );

2.保存数据

保存API是面向对象的,每一个继承DataSupport的模块都将会拥有save()方法。

  1. Album album = new Album();
  2. album.setName("album");
  3. album.setPrice(10.99f);
  4. album.save();//将数据写入到数据库中
  5. Song song1 = new Song();
  6. song1.setName("song1");
  7. song1.setDuration(320);
  8. song1.setAlbum(album);
  9. song1.save();
  10. Song song2 = new Song();
  11. song2.setName("song2");;
  12. song2.setDuration(356);
  13. song2.setAlbum(album);
  14. song2.save();

这些将会插入album,song1和song2到关系数据库中。

3.更新数据

每一个继承DataSupport模块都拥有update()updateAll()方法,你可以依据一个指定的id来更新一首歌曲记录:

  1. Album albumToUpdate = new Album();
  2. albumToUpdate.setPrice(20.99f); // raise the price
  3. albumToUpdate.update(id);

或者你可以使用where条件更新多个记录:

  1. Album albumToUpdate = new Album();
  2. albumToUpdate.setPrice(20.99f); // raise the price
  3. albumToUpdate.updateAll("name = ?", "album");

4.删除数据

DataSupport中你可以使用静态方法delete()删除一个记录:

  1. DataSupport.delete(Song.class, id);

或者你可以使用静态 deleteAll()方法删除多条记录:

  1. DataSupport.deleteAll(Song.class, "duration > ?" , "350");

5.查询数据

从song表使用指定id查询单个记录:

  1. Song song = DataSupport.find(Song.class, id);

从song表中查询所有记录:

  1. List<Song> allSongs = DataSupport.findAll(Song.class);

使用群集的查询构建复杂的查询:

  1. List<Song> songs = DataSupport.where("name like ?", "song%").order("duration").find(Song.class);

看效果图:

Manifest.xml:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="ujs.database"
  4. android:versionCode="1"
  5. android:versionName="1.0" >
  6.  
  7. <uses-sdk
  8. android:minSdkVersion="14"
  9. android:targetSdkVersion="21" />
  10. <uses-permission android:name="android.permission.WRITE_USER_DICTIONARY"/>
  11. <uses-permission android:name="android.permission.RUN_INSTRUMENTATION"/>
  12.  
  13. <application
  14. android:name="ujs.database.Application"
  15. android:allowBackup="true"
  16. android:icon="@drawable/ic_launcher"
  17. android:label="@string/app_name"
  18. android:theme="@style/AppTheme" ><!-- 上面的Application名称 -->
  19. <activity
  20. android:name=".MainActivity"
  21. android:label="@string/app_name" >
  22. <intent-filter>
  23. <action android:name="android.intent.action.MAIN" />
  24.  
  25. <category android:name="android.intent.category.LAUNCHER" />
  26. </intent-filter>
  27. </activity>
  28. </application>
  29.  
  30. </manifest>

Application.java:

  1. package ujs.database;
  2.  
  3. import org.litepal.LitePalApplication;
  4.  
  5. public class Application extends LitePalApplication{
  6.  
  7. }

News.java:

  1. package ujs.database;
  2.  
  3. import org.litepal.crud.DataSupport;
  4.  
  5. public class News extends DataSupport {
  6. private String title;
  7. private String content;
  8.  
  9. public String getTitle() {
  10. return title;
  11. }
  12.  
  13. public void setTitle(String title) {
  14. this.title = title;
  15. }
  16.  
  17. public String getContent() {
  18. return content;
  19. }
  20.  
  21. public void setContent(String content) {
  22. this.content = content;
  23. }
  24.  
  25. }

把添加、查询和删除的功能写在了DataBase.java中:

  1. package ujs.database;
  2.  
  3. import org.litepal.crud.DataSupport;
  4. import org.litepal.tablemanager.Connector;
  5.  
  6. public class DataBase {
  7.  
  8. public DataBase() {
  9. super();
  10. // TODO Auto-generated constructor stub
  11. Connector.getDatabase();
  12. }
  13.  
  14. public void saveAlbum(String titleString, String content) {
  15. News news = new News();
  16. news.setTitle(titleString);
  17. news.setContent(content);
  18. news.save();//写到数据库中
  19. }
  20.  
  21. public void queryData() {
  22. News news = DataSupport.findFirst(News.class);
  23. System.out.println(news.getTitle());
  24. }
  25. public void deleteData(int id) {
  26. DataSupport.delete(News.class, id);
  27. }
  28.  
  29. }

然后在MainActivity.java中调用:

  1. package ujs.database;
  2.  
  3. import android.app.Activity;
  4. import android.os.Bundle;
  5. import android.view.Menu;
  6. import android.view.MenuItem;
  7. import android.view.View;
  8. import android.widget.Button;
  9.  
  10. public class MainActivity extends Activity {
  11. private Button insert, query, test;
  12. private DataBase dataBase;
  13. @Override
  14. protected void onCreate(Bundle savedInstanceState) {
  15. super.onCreate(savedInstanceState);
  16. setContentView(R.layout.activity_main);
  17. insert = (Button) findViewById(R.id.button1);
  18. query = (Button) findViewById(R.id.button2);
  19. test = (Button) findViewById(R.id.button3);
  20. insert.setOnClickListener(listener);
  21. query.setOnClickListener(listener);
  22. test.setOnClickListener(listener);
  23. dataBase = new DataBase();
  24. }
  25.  
  26. View.OnClickListener listener = new View.OnClickListener() {
  27.  
  28. @Override
  29. public void onClick(View v) {
  30. // TODO Auto-generated method stub
  31. switch (v.getId()) {
  32. case R.id.button1:
  33. dataBase.saveAlbum("1","first");
  34. break;
  35. case R.id.button2:
  36. dataBase.queryData();
  37. break;
  38. case R.id.button3:
  39. dataBase.deleteData(1);
  40. break;
  41. default:
  42. break;
  43. }
  44. }
  45. };
  46.  
  47. @Override
  48. public boolean onCreateOptionsMenu(Menu menu) {
  49. // Inflate the menu; this adds items to the action bar if it is present.
  50. getMenuInflater().inflate(R.menu.main, menu);
  51. return true;
  52. }
  53.  
  54. @Override
  55. public boolean onOptionsItemSelected(MenuItem item) {
  56. // Handle action bar item clicks here. The action bar will
  57. // automatically handle clicks on the Home/Up button, so long
  58. // as you specify a parent activity in AndroidManifest.xml.
  59. int id = item.getItemId();
  60. if (id == R.id.action_settings) {
  61. return true;
  62. }
  63. return super.onOptionsItemSelected(item);
  64. }
  65. }

下面上图片,id=1已经被删除了:

LitePal——安卓数据库library的更多相关文章

  1. Android学习之基础知识九 — 数据存储(持久化技术)之使用LitePal操作数据库

    上一节学习了使用SQLiteDatabase来操作SQLite数据库的方法,接下来我们开始接触第一个开源库:LitePal.LitePal是一款开源的Android数据库框架,它采用了对象关系映射(O ...

  2. 4、Android-数据存储方案(使用LitePal操作数据库)

    4.5.使用LitePal操作数据库 4.5.1.LitePal简介 LitePal是一款开源的Android数据库框架 采用了关系映射(ORM)的模式 将经常使用的一些数据库做了封装 是得不用编写S ...

  3. Android:日常学习笔记(10)———使用LitePal操作数据库

    Android:日常学习笔记(10)———使用LitePal操作数据库 引入LitePal 什么是LitePal LitePal是一款开源的Android数据库框架,采用了对象关系映射(ORM)的模式 ...

  4. Android开发——使用LitePal开源数据库

    前言:之前使用Android内置的数据库,感觉一大堆SQL语句,一不小心就错了,很难受,学习了这个LItePal的开源数据库,瞬间觉得Android内置的数据库简直是垃圾般的存在 LitePal Gi ...

  5. LitePal——Android数据库框架完整使用手册

    LitePal for Android LitePal是一个开源的Android库,使开发人员使用SQLite数据库非常简单.您无需编写任何SQL语句就可以完成大部分数据库操作,包括创建或升级表,增. ...

  6. Android开发——使用LitePal开源数据库框架

    前言:之前使用Android内置的数据库,感觉一大堆SQL语句,一不小心就错了,很难受,学习了这个LItePal的开源数据库框架,瞬间觉得Android内置的数据库简直是垃圾般的存在 LitePal ...

  7. litepal创建数据库表失败

    今天学习郭神的litepal框架遇到了一个坑,就是程序正常跑了,但是数据库和表完全没创建!!!!!!! 先核对了litepal.xml文件,确认配置正确,assets文件夹放的也正确,最后发现竟然是因 ...

  8. android SQLite(安卓数据库的插入显示删除)

    1.利用android自带数据库实现增加.删除.显示用户等操作 只是一个基本模型,为即将的与 复利计算apk整合做牺牲. 就不上传百度云供大家下载了 等整合了复利计算再上传. 数据的插入和显示:   ...

  9. 安卓数据库sqllite查看工具Android Debug Database使用教程

    要使用Android Debug Database,首先得在安卓项目的build.gradle(module:app)文件中加入如下代码: debugCompile 'com.amitshekhar. ...

随机推荐

  1. Java探索之旅(4)——方法和Random&Math类

    1.基本知识点    ❶方法在C++里面称为函数.调用方法时,应该类型兼容--即不需显式类型转换即可将形参传递给实参.    ❷形参的改变不影响实参的值.    ❸Java注重模块化设计和自顶向下的设 ...

  2. hadoop2.6.0完全分布式部署

    这里是hadoop最小的配置,也就是修改最少量的东西让hadoop跑起来. 系统是 Centos6.7 64位, hadoop是2.6.0,虚拟机是VMWare WorkStation 假设虚拟机启动 ...

  3. 面试题: !=!=未看12 略多 sql语句练习 非常 有用

    JAVA面试总结 2015年03月25日 16:53:40 阅读数:4306 刚才看到的,先转载过来,没准以后用到…… 面试总结 2013年8月6日: 问题2:Hibernate的核心接口有哪些?   ...

  4. 第四课4、ROS客户端

    ROS客户端提供一些列库文件用于用户开发.它利用许多ROS概念并使它通过代码可以获取. 下面是ROS程序中的接口 ROSCPP客户端(c++客户端) 首先新建一个包 然后catkin_make一下 在 ...

  5. hdu1074

    #include <iostream> #include <string> #include <cstring> #include <stack> #i ...

  6. hdu1059

    #include <stdio.h> #include <string.h> #define MAXN 120005 int main() { int num[7]; int ...

  7. Gson应用:从json格式简单字符串中获取value

    import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStreamReader; i ...

  8. [WPF自定义控件]从ContentControl开始入门自定义控件

    1. 前言 我去年写过一个在UWP自定义控件的系列博客,大部分的经验都可以用在WPF中(只有一点小区别).这篇文章的目的是快速入门自定义控件的开发,所以尽量精简了篇幅,更深入的概念在以后介绍各控件的文 ...

  9. JAVA包学习笔记

    包 什么是包 为了使类易于查找和使用,为了避免命名冲突和限定类的访问权限,可以将一组相关类与接口"包裹"在一起形成包. 有可能同名类的存在而导致命名冲突,而位于不同包中的类及时同名 ...

  10. Ocelot(四)- 认证与授权

    Ocelot(四)- 认证与授权 作者:markjiang7m2 原文地址:https://www.cnblogs.com/markjiang7m2/p/10932805.html 源码地址:http ...