LitePal——安卓数据库library
简介:一个让开发者使用SQLite数据库更加容易的库文件
LitePal for Android,项目地址:点击打开
LitePal是一个开源的android库,它让开发者使用SQLite数据变得容易。你甚至可以不用写SQL语句而完成数据库的大部分的操作,包括创建、更新表,crud操作(翻译不出来),聚合功能等。LitePal的一些初始化设置相当简单,你可以将它集成到你的项目中,而所花费的时间将不超过5分钟。
现在就体验它吧!
功能
1.使用对象关系映射(ORM)模式
2.几乎零设置(仅仅需要设置配置文件里面的一些属性)
3.自动维护所有表(比如:创建、修改或者是删除)
4.封装API以避免使用SQL语句
5.强悍的聚类查询功能
6.你任然可以使用SQL,但是比原有函数更容易、更友好
7.想了解更多,赶快自己体验吧
最新下载
- litepal-1.2.0.jar (library contains *.class files)
- litepal-1.2.0-src.jar (library contains *.class files and *.java files)
快速设置
1.导库
Eclipse:从上面的下载地址下载最新的jar包,或者你可以点击这里查看所有的版本,并选择你需要的进行下载;将jar包赋值到你的Android项目的libs文件夹内。
Android Studio:修改的你的build.gradle文件,然后添加下面的依赖项
- dependencies {
- compile 'org.litepal.android:core:1.2.0'
- }
2.配置litepal.xml
在你项目的assets文件夹创建一个名为litepal.xml文件,然后赋值下面的代码到该文件中。
- <?xml version="1.0" encoding="utf-8"?>
- <litepal>
- <!--
- Define the database name of your application.
- By default each database name should be end with .db.
- If you didn't name your database end with .db,
- LitePal would plus the suffix automaticly for you.
- For example:
- <dbname value="demo" ></dbname>
- -->
- <dbname value="demo" ></dbname>
- <!--
- Define the version of your database. Each time you want
- to upgrade your database, the version tag would helps.
- Modify the models you defined in the mapping tag, and just
- make the version value plus one, the upgrade of database
- will be processed automaticly without concern.
- For example:
- <version value="1" ></version>
- -->
- <version value="1" ></version>
- <!--
- Define your models in the list with mapping tag, LitePal will
- create tables for each mapping class. The supported fields
- defined in models will be mapped into columns.
- For example:
- <list>
- <mapping class="com.test.model.Reader"></mapping>
- <mapping class="com.test.model.Magazine"></mapping>//包名+类名
- </list>
- -->
- <list>
- </list>
- </litepal>
这个就是仅仅需要的配置文件,它的一些属性使用起来也很简单。
dbname 项目的数据库的名称
version 配置数据库的版本。当你每次想要更新数据库的时候,在这里加一个值。
list 配置类映射
3.配置 LitePalApplication
你不想每次都通过上下文参数。为了使用APIs更简单,仅仅需要在AndroidManifest.xml文件中配置LitePalApplication,如下所示:
- <manifest>
- <application
- android:name="org.litepal.LitePalApplication"
- ...
- >
- ...
- </application>
- </manifest>
当然你也可以拥有你自己的程序并且已经在这里配置好了,就像这样:
- <manifest>
- <application
- android:name="com.example.MyOwnApplication"
- ...
- >
- ...
- </application>
- </manifest>
这个地方要注意,我一开始就是这里就是这里配置出错了,导致老是crash,我之后是参考了给的例子,然后新建了一个类来继承LitePalApplication,里面没有任何的代码,然后在上面写上程序的名称,详细见下面的代码。
没关系, LitePal任然可以使用,仅仅需要改变MyOWnApplication的继承方式,从Application到LitePalApplication,就像下面的这样:
- public class MyOwnApplication extends LitePalApplication {
- ...
- }
这些操作可以使程序运行顺利而没有任何的副作用。(╮(╯▽╰)╭翻译的好生硬啊!!!)
开始
设置之后,你现在可以体验强有力的函数功能。
1.创建表
首先定义模块。比如:你需要两个模块,专辑和歌曲,那么模块可以像下面这样定义:
- public class Album extends DataSupport {
- private String name;
- private float price;
- private List<Song> songs = new ArrayList<Song>();
- // generated getters and setters.
- ...
- }
- public class Song extends DataSupport {
- private String name;
- private int duration;
- private Album album;
- // generated getters and setters.
- ...
- }
然后在litepal.xml文件中将这些模块加入到映射列表中(在 2配置litepal.xml中已经有说明了):
- <list>
- <mapping class="org.litepal.litepalsample.model.Album"></mapping>
- <mapping class="org.litepal.litepalsample.model.Song"></mapping>
- </list>
好了,这个表将会在下次你操作数据库的时候自动生成。比如,使用如下代码获得SQLiteDatabase:
- SQLiteDatabase db = Connector.getDatabase();
现在表将会使用SQLs自动生成,就像这样:
- CREATE TABLE album (
- id integer primary key autoincrement,
- price real,
- name text
- );
- CREATE TABLE song (
- id integer primary key autoincrement,
- duration integer,
- name text,
- album_id integer
- );
2.保存数据
保存API是面向对象的,每一个继承DataSupport的模块都将会拥有save()方法。
- Album album = new Album();
- album.setName("album");
- album.setPrice(10.99f);
- album.save();//将数据写入到数据库中
- Song song1 = new Song();
- song1.setName("song1");
- song1.setDuration(320);
- song1.setAlbum(album);
- song1.save();
- Song song2 = new Song();
- song2.setName("song2");;
- song2.setDuration(356);
- song2.setAlbum(album);
- song2.save();
这些将会插入album,song1和song2到关系数据库中。
3.更新数据
每一个继承DataSupport模块都拥有update()和updateAll()方法,你可以依据一个指定的id来更新一首歌曲记录:
- Album albumToUpdate = new Album();
- albumToUpdate.setPrice(20.99f); // raise the price
- albumToUpdate.update(id);
或者你可以使用where条件更新多个记录:
- Album albumToUpdate = new Album();
- albumToUpdate.setPrice(20.99f); // raise the price
- albumToUpdate.updateAll("name = ?", "album");
4.删除数据
在DataSupport中你可以使用静态方法delete()删除一个记录:
- DataSupport.delete(Song.class, id);
或者你可以使用静态 deleteAll()方法删除多条记录:
- DataSupport.deleteAll(Song.class, "duration > ?" , "350");
5.查询数据
从song表使用指定id查询单个记录:
- Song song = DataSupport.find(Song.class, id);
从song表中查询所有记录:
- List<Song> allSongs = DataSupport.findAll(Song.class);
使用群集的查询构建复杂的查询:
- List<Song> songs = DataSupport.where("name like ?", "song%").order("duration").find(Song.class);
看效果图:
Manifest.xml:
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="ujs.database"
- android:versionCode="1"
- android:versionName="1.0" >
- <uses-sdk
- android:minSdkVersion="14"
- android:targetSdkVersion="21" />
- <uses-permission android:name="android.permission.WRITE_USER_DICTIONARY"/>
- <uses-permission android:name="android.permission.RUN_INSTRUMENTATION"/>
- <application
- android:name="ujs.database.Application"
- android:allowBackup="true"
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name"
- android:theme="@style/AppTheme" ><!-- 上面的Application名称 -->
- <activity
- android:name=".MainActivity"
- android:label="@string/app_name" >
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- </application>
- </manifest>
Application.java:
- package ujs.database;
- import org.litepal.LitePalApplication;
- public class Application extends LitePalApplication{
- }
News.java:
- package ujs.database;
- import org.litepal.crud.DataSupport;
- public class News extends DataSupport {
- private String title;
- private String content;
- public String getTitle() {
- return title;
- }
- public void setTitle(String title) {
- this.title = title;
- }
- public String getContent() {
- return content;
- }
- public void setContent(String content) {
- this.content = content;
- }
- }
把添加、查询和删除的功能写在了DataBase.java中:
- package ujs.database;
- import org.litepal.crud.DataSupport;
- import org.litepal.tablemanager.Connector;
- public class DataBase {
- public DataBase() {
- super();
- // TODO Auto-generated constructor stub
- Connector.getDatabase();
- }
- public void saveAlbum(String titleString, String content) {
- News news = new News();
- news.setTitle(titleString);
- news.setContent(content);
- news.save();//写到数据库中
- }
- public void queryData() {
- News news = DataSupport.findFirst(News.class);
- System.out.println(news.getTitle());
- }
- public void deleteData(int id) {
- DataSupport.delete(News.class, id);
- }
- }
然后在MainActivity.java中调用:
- package ujs.database;
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.Menu;
- import android.view.MenuItem;
- import android.view.View;
- import android.widget.Button;
- public class MainActivity extends Activity {
- private Button insert, query, test;
- private DataBase dataBase;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- insert = (Button) findViewById(R.id.button1);
- query = (Button) findViewById(R.id.button2);
- test = (Button) findViewById(R.id.button3);
- insert.setOnClickListener(listener);
- query.setOnClickListener(listener);
- test.setOnClickListener(listener);
- dataBase = new DataBase();
- }
- View.OnClickListener listener = new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- switch (v.getId()) {
- case R.id.button1:
- dataBase.saveAlbum("1","first");
- break;
- case R.id.button2:
- dataBase.queryData();
- break;
- case R.id.button3:
- dataBase.deleteData(1);
- break;
- default:
- break;
- }
- }
- };
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- // Inflate the menu; this adds items to the action bar if it is present.
- getMenuInflater().inflate(R.menu.main, menu);
- return true;
- }
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- // Handle action bar item clicks here. The action bar will
- // automatically handle clicks on the Home/Up button, so long
- // as you specify a parent activity in AndroidManifest.xml.
- int id = item.getItemId();
- if (id == R.id.action_settings) {
- return true;
- }
- return super.onOptionsItemSelected(item);
- }
- }
下面上图片,id=1已经被删除了:
LitePal——安卓数据库library的更多相关文章
- Android学习之基础知识九 — 数据存储(持久化技术)之使用LitePal操作数据库
上一节学习了使用SQLiteDatabase来操作SQLite数据库的方法,接下来我们开始接触第一个开源库:LitePal.LitePal是一款开源的Android数据库框架,它采用了对象关系映射(O ...
- 4、Android-数据存储方案(使用LitePal操作数据库)
4.5.使用LitePal操作数据库 4.5.1.LitePal简介 LitePal是一款开源的Android数据库框架 采用了关系映射(ORM)的模式 将经常使用的一些数据库做了封装 是得不用编写S ...
- Android:日常学习笔记(10)———使用LitePal操作数据库
Android:日常学习笔记(10)———使用LitePal操作数据库 引入LitePal 什么是LitePal LitePal是一款开源的Android数据库框架,采用了对象关系映射(ORM)的模式 ...
- Android开发——使用LitePal开源数据库
前言:之前使用Android内置的数据库,感觉一大堆SQL语句,一不小心就错了,很难受,学习了这个LItePal的开源数据库,瞬间觉得Android内置的数据库简直是垃圾般的存在 LitePal Gi ...
- LitePal——Android数据库框架完整使用手册
LitePal for Android LitePal是一个开源的Android库,使开发人员使用SQLite数据库非常简单.您无需编写任何SQL语句就可以完成大部分数据库操作,包括创建或升级表,增. ...
- Android开发——使用LitePal开源数据库框架
前言:之前使用Android内置的数据库,感觉一大堆SQL语句,一不小心就错了,很难受,学习了这个LItePal的开源数据库框架,瞬间觉得Android内置的数据库简直是垃圾般的存在 LitePal ...
- litepal创建数据库表失败
今天学习郭神的litepal框架遇到了一个坑,就是程序正常跑了,但是数据库和表完全没创建!!!!!!! 先核对了litepal.xml文件,确认配置正确,assets文件夹放的也正确,最后发现竟然是因 ...
- android SQLite(安卓数据库的插入显示删除)
1.利用android自带数据库实现增加.删除.显示用户等操作 只是一个基本模型,为即将的与 复利计算apk整合做牺牲. 就不上传百度云供大家下载了 等整合了复利计算再上传. 数据的插入和显示: ...
- 安卓数据库sqllite查看工具Android Debug Database使用教程
要使用Android Debug Database,首先得在安卓项目的build.gradle(module:app)文件中加入如下代码: debugCompile 'com.amitshekhar. ...
随机推荐
- Java探索之旅(4)——方法和Random&Math类
1.基本知识点 ❶方法在C++里面称为函数.调用方法时,应该类型兼容--即不需显式类型转换即可将形参传递给实参. ❷形参的改变不影响实参的值. ❸Java注重模块化设计和自顶向下的设 ...
- hadoop2.6.0完全分布式部署
这里是hadoop最小的配置,也就是修改最少量的东西让hadoop跑起来. 系统是 Centos6.7 64位, hadoop是2.6.0,虚拟机是VMWare WorkStation 假设虚拟机启动 ...
- 面试题: !=!=未看12 略多 sql语句练习 非常 有用
JAVA面试总结 2015年03月25日 16:53:40 阅读数:4306 刚才看到的,先转载过来,没准以后用到…… 面试总结 2013年8月6日: 问题2:Hibernate的核心接口有哪些? ...
- 第四课4、ROS客户端
ROS客户端提供一些列库文件用于用户开发.它利用许多ROS概念并使它通过代码可以获取. 下面是ROS程序中的接口 ROSCPP客户端(c++客户端) 首先新建一个包 然后catkin_make一下 在 ...
- hdu1074
#include <iostream> #include <string> #include <cstring> #include <stack> #i ...
- hdu1059
#include <stdio.h> #include <string.h> #define MAXN 120005 int main() { int num[7]; int ...
- Gson应用:从json格式简单字符串中获取value
import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStreamReader; i ...
- [WPF自定义控件]从ContentControl开始入门自定义控件
1. 前言 我去年写过一个在UWP自定义控件的系列博客,大部分的经验都可以用在WPF中(只有一点小区别).这篇文章的目的是快速入门自定义控件的开发,所以尽量精简了篇幅,更深入的概念在以后介绍各控件的文 ...
- JAVA包学习笔记
包 什么是包 为了使类易于查找和使用,为了避免命名冲突和限定类的访问权限,可以将一组相关类与接口"包裹"在一起形成包. 有可能同名类的存在而导致命名冲突,而位于不同包中的类及时同名 ...
- Ocelot(四)- 认证与授权
Ocelot(四)- 认证与授权 作者:markjiang7m2 原文地址:https://www.cnblogs.com/markjiang7m2/p/10932805.html 源码地址:http ...