热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android数据存储之数据库(SQLite和litepal)

Android数据存储之数据库(SQlite和litepal)1、SQLite:Android提供了SQLiteOpenHelper来连接数据库,通过SQLiteDatabase来

Android数据存储之数据库(SQlite和litepal)

1、SQLite: Android提供了SQLiteOpenHelper来连接数据库,通过SQLiteDatabase来操作数据库,SQLiteDatabase类下由许多操作数据库的方法,最常见的有添加、删除和查询等操作。
SQLite提供了两种操作数据库的方法:
方法一:使用原生的数据库语句,关于数据库语句可以复习Java的SQLite相关语句操作
execSQL(String sql);
execSQL(String sql, Object[] bindArgs)
注:补充相关语句:
增——“insert into student(name,age) values(‘”+stu.getName()+”’”+”,”+stu.getAge()+”)”
删——“delete from student where studentid=?”,new String[]{id+”“}
改——“update student set name=?, age=? where studentid=?”,new String[] {stu.getName(),stu.getAge()+”“,stu.getStudentid()+”“}
查—— “select * from student where studentid=?”, new String[]{id+”“}
查询全部—-“select * from student “, null
方法二:
删:delete(String table, String whereClause, String[] whereArgs)
插入(增):insert(String table, String nullColumnHack, ContentValues values)
查询:query 、rawQuery
更新(改):update(String table, ContentValues values, String whereClause, String[] whereArgs)


下面封装了数据库的dao层和helper层,通过新建helper层新建了一个表格后,再通过dao层来操作数据表。
(1)helper层,新建类继承SQLiteOpenHelper,在构造方法中传入数据表名和上下文对象,重写onCreate执行数据库命令新建一个表格。

package com.example.wechatr.sqliteUtils;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class SqlDataBasehelper extends SQLiteOpenHelper {
public SqlDataBasehelper(Context context) {
super(context, "user.db", null,1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table user(userId integer primary key autoincrement,account" +
" varchar(20),password varchar(20))");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}

(2)dao层,获取helper层的数据表对象,通过getReadableDatabase获取操作对象后进行数据操作。

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.example.wechatr.user_message;
import java.util.ArrayList;
import java.util.List;

public class UserDao {
private SQLiteDatabase db = null;
private SqlDataBasehelper sbh = null;
public UserDao(Context context)
{
sbh = new SqlDataBasehelper(context);
}

public boolean queryuser(String account,String code)
{
db = sbh.getReadableDatabase();
//查询语句
Cursor Query= db.query("User",null,null,null,null,null,null);
while (Query.moveToNext())
{
String Ac = Query.getString(Query.getColumnIndex("account"));
String Co = Query.getString(Query.getColumnIndex("password"));
if (account.equals(Ac)&&code.equals(Co))
{
db.close();
return true;
}
}
db.close();
return false;
}
public List queryuser()
{
List list = new ArrayList<>();
db = sbh.getReadableDatabase();
Cursor Query= db.query("User",null,null,null,null,null,null);
while (Query.moveToNext())
{
String Ac = Query.getString(Query.getColumnIndex("account"));
String Co = Query.getString(Query.getColumnIndex("password"));
user_message user = new user_message(Ac,Co);
list.add(user);
}
db.close();
return list;
}
public boolean adduser(String Ac,String Co)
{
db = sbh.getReadableDatabase();
ContentValues values = new ContentValues();
values.put("account",Ac);
values.put("password",Co);
//插入语句
db.insert("user",null,values);
db.close();
return true;
}
public boolean deleteuser(String Ac)
{
db = sbh.getReadableDatabase();
//删除语句
db.delete("user","accOnut=?", new String[]{Ac});
db.close();
return true;
}
}

2、litepal litepal是开源的Android数据库框架,对平时用到的数据库功能进行封装,使得不用编写SQL语句就可以完成各种建立表格,增删改查等操作。
使用litepal之前需要对module进行配置:
(1)在配置文件.gradle中配置依赖:compile ‘org.litepal.android:core:1.4.1’
(2)配置litepal.xml:在assert文件夹下(若没有该文件夹,通过右击module目录–>New–>Directory创建)新建一个litepal.xml文件,编写如下内容:(具体意义看注释)


<litepal>

<dbname value="Bookbean" >dbname>

<version value="1" >version>
<list>
<mapping
class = "com.example.litepaltest.book">
mapping>
list>
litepal>

(3)修改AndroidManifest.xml文件:在该文件的


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.litepaltest">


<application
android:name="org.litepal.LitePalApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">

<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
intent-filter>
activity>
application>
manifest>

到此就已经配置好litepal环境,接下来使用litepal。
litepal使用LitePal.getDatabase()即可创建一个数据表,数据表名即是litepal.xml中的

package com.example.litepaltest;
import org.litepal.crud.DataSupport;
/**
* 让book bean 类继承DataSupport,以能够进行ARUD操作。
*/

public class book extends DataSupport{
private int id;
private String author;
private double price;
private int pages;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void setAuthor(String author) {
this.author = author;
}
public double getPrice() {
return price;
}
public void setPages(int pages) {
this.pages = pages;
}
public void setPrice(double price) {
this.price = price;
}
public int getPages() {
return pages;
}
public String getAuthor() {
return author;
}
}

通过getDatabase建立表才能开始操作数据表。

LitePal.getDatabase();

(1)添加数据操作:定义一个addData方法,里面新建一个book对象,将各自的数据元set设置初始化,最后调用save提交,将数据写入数据库表中。

public void addData()
{
book bookbean = new book();
bookbean.setAuthor("vincent");
bookbean.setId(10);
bookbean.setName("litepal");
bookbean.setPages(450);
bookbean.setPrice(20);
bookbean.save();
}

(2)更改数据表中已存在的数据:
创建实例后,通过setPrice和setId方法来更新数据, 最后调用updateAll方法来执行更新操作。这里的updateAll指定了限制条件,和database中的where指定条件类似,不指定的时候表示更新所有的数据。但如果想将所有数据复位为默认值,需要调用setDefault来设置。如下。

   /*
* 注:这里要注意,创建实例后,说有数据库的数据成员都已经被
* 默认设置为默认值,比如id默认是0,name默认是null等,
* 如果想把某个字段设置为默认值,使用set方法不能起到作用,
* 因为本身默认字段就是想设置的值,可以通过调用
* book bookbean = new book();
* book.setDefault("id");
* book.updateAll();
* 这样所有书的id都被更新为0了,所有书是因为updateAll里面没有指定
* 约束的条目。
* */

public void updataData()
{
book bookbean = new book();
bookbean.setPrice(13.33);
bookbean.setId(1);
bookbean.updateAll("name = ? and author = ?","The Lost Symbol","Dan Brown");
}

(3)删除数据操作:使用deleteAll,指定数据表名和后面两个约束条件,如下,删除所有价格低于15元的数据。如果不指定则表示删除所有的数据。

    /*使用litepal删除数据
* */

public void deleteData()
{
//删除所有价格低于15的书
DataSupport.deleteAll(book.class,"price,"15");
}

(4)查询数据操作:

 /*使用litepal查询数据
* findAll查询所有
* findFirst查询第一条
* findLast查询最后一条
* select:指定查询那几列数据,例如下面例子指查询name和author两列数据
* List list = DataSupport.select("name","author").find(book.class);
* where方法:指定查询约束条件,例如查询页数大于400的书
* List list = DataSupport.where("page>?","400").find(book.class);
* order方法:指定结果的排序方式,例如将查询结果按照价格高到低排序
* List list = DataSupport.order("price desc").find(book.class);
* limit方法:指定查询结果数量,例如只查询表中的前三条数据
* List list = DataSupport.limit(3).find(book.class);
* offset方法:指定查询结果的偏移量,例如查询第234
* List list = DataSupport.limit(3).offset(1).find(book.class);
* 可以对着5个方法连缀使用:
* List list = DataSupport.select("name","author","pages")
* .where("pages>?","400")
* .order("price desc")
* .limit(10)
* .find(book.class);
* */
public void queryData()
{
List list = DataSupport.findAll(book.class);
for (book b:list)
{
Log.e("tag","b :"+b.toString());
}
}

同时,litepal还支持连缀使用:

 List books = DataSupport.select("name","author","pages")
.where("pages>?","100")
.limit(10)
.order("pages")
.find(book.class);

当然,党litepal提供的接口不能满足我们的需求是,也可以使用原生的SQL语句来操作:

Cursor cursor = DataSupport.findBySQL("select * from book where id >?and name = ?","2","harry");
...
...
...

关于数据库的操作使用就到此。
附:############本次deamon########


推荐阅读
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 在Kubernetes上部署JupyterHub的步骤和实验依赖
    本文介绍了在Kubernetes上部署JupyterHub的步骤和实验所需的依赖,包括安装Docker和K8s,使用kubeadm进行安装,以及更新下载的镜像等。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文讨论了在Spring 3.1中,数据源未能自动连接到@Configuration类的错误原因,并提供了解决方法。作者发现了错误的原因,并在代码中手动定义了PersistenceAnnotationBeanPostProcessor。作者删除了该定义后,问题得到解决。此外,作者还指出了默认的PersistenceAnnotationBeanPostProcessor的注册方式,并提供了自定义该bean定义的方法。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 本文介绍了游标的使用方法,并以一个水果供应商数据库为例进行了说明。首先创建了一个名为fruits的表,包含了水果的id、供应商id、名称和价格等字段。然后使用游标查询了水果的名称和价格,并将结果输出。最后对游标进行了关闭操作。通过本文可以了解到游标在数据库操作中的应用。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • Java自带的观察者模式及实现方法详解
    本文介绍了Java自带的观察者模式,包括Observer和Observable对象的定义和使用方法。通过添加观察者和设置内部标志位,当被观察者中的事件发生变化时,通知观察者对象并执行相应的操作。实现观察者模式非常简单,只需继承Observable类和实现Observer接口即可。详情请参考Java官方api文档。 ... [详细]
author-avatar
me
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有