Android(安卓)数据存储:五大存储之SQLite数据存储
一、SQLite介绍
SQLite优点:
1、轻量级 ,可移植性好,它是进程内的数据库引擎,使用SQLite一般只需要带上它的一个动态库。
2、绿色软件 –它的核心引擎本身不依赖第三方的软件,Android系统集成的。
3、单一文件 –就是数据库中所有的信息(比如表、视图、触发器、等)都包含在一个文件内。这个文件可以copy到其它目录或其它机器上,也照用不误。
4、内存数据库
SQLite缺点:
1、比较耗电
2、并发访问的锁机制,SQLite在并发(包括多进程和多线程)读写方面的性能一直不太理想。数据库可能会被写操作独占,从而导致其它读写操作阻塞或出错
3、SQL标准支持不全
二、基本使用(增删改查)
创建数据库
想要使用SQLite我们首先要创建一个数据库,这里需要创建一个class继承SQLiteOpenHelper。
Android为了让我们更方便的管理数据库,专门给提供了一个QLiteOpenHelper帮助类。它是一个抽象类有两个抽象方法,具体如下:
MySQLite类
package com.example.mysqlitedemo;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper;public class Mydbsqlite extends SQLiteOpenHelper{ //创建数据库 public Mydbsqlite(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); } public Mydbsqlite(Context context, String name){ this(context, name, null, 1); //反调上面的构造器 } //创建table表,只要有表存在的时候不会再执行这个方法 @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table if not exists logtable(id integer not null primary key autoincrement,name verchar(20),password verchar(20) )"); } //用于版本升级,需要更新版本时只需要将新的版本号数值比以前的大 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }}
MainActivity
public class MainActivity extends AppCompatActivity {private Mydbsqlite helper; private SQLiteDatabase db; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); helper=new MyOpenHelper(getApplication(),TableConfig.TABLE_WORK_DAILY); db=helper.getWritableDatabase(); } } }
查看表路径
DDMS——File Explorer——data——data——包名加类名——database
增
数据库的增加语句insert
db.insert(table, nullColumnHack, values)
参数解释:
table:表名
nullColumnHack:代表强行插入null值得数据列的列名。当values参数为null或不包含KEY—values对时该参数有效。
values:ContentValues值(类似于MAP),这里需要创建一个ContentValues值。通过put方法填入要出入的内容。
实例
private void insertdb() { ContentValues values=new ContentValues(); values.put("name", met_username.getText().toString()); values.put("password",met_password.getText().toString()); db.insert("logtable", null, values); }
删
数据库的删除语句
db.delete(table, whereClause, whereArgs)
参数解释:
whereClause:满足该whereClause子句的记录将会被删除
whereArgs:用于为whereClause子句传入参数
实例
private void deletedb() { db.delete("logtable", "name=?", new String[]{"zhangsan"}); Toast.makeText(getApplicationContext(), "删除成功", Toast.LENGTH_LONG).show(); }
改
数据库的改语句:
db.update(table, values, whereClause, whereArgs);
参数解释:
whereClause:满足该whereClause子句的记录将会被更新
whereArgs:用于为whereClause子句传入参数
实例
private void updatedb() { ContentValues values=new ContentValues(); values.put("password", "123455abc"); db.update("logtable", values, "name=?", new String[]{"zhangsan"}); Toast.makeText(getApplicationContext(), "修改成功", Toast.LENGTH_LONG).show(); }
查
数据库的查询语句
方式一
db.rawQuery(sql, selectionArgs)
方式二:
db.query(distinct,table, columns, selection, selectionArgs, groupBy, having, orderBy)
参数解释:
columns:要查询出来的列名
selection:查询条件子句,相当于select语句where关键字后面的部分,在条件子句允许使用占位符“?”
selectionArgs:对应于selection语句中占位符的值,值在数组中的位置与占位符在语句中的位置必须一致,否则就会有异常。
groupBy:用于控制分组
having:用于对分组进行过滤
orderBy:排序方式(ASC升序 DESC 降序)
limit:用于进行分页
实例
private void selectdb() { Cursor cursor=db.query("logtable", null, null, null, null, null, "id DESC limit 2 offset 3"); //offset抛弃最后两条,显示这两条上面那三条,offset主要用于分页显示的时候 //orderBy id DESC 按照id列进行降序排列 //db.rawQuery("select *from logtable", null); cursor.moveToFirst(); while(!cursor.isAfterLast()){ String name=cursor.getString(cursor.getColumnIndex("name")); String password=cursor.getString(cursor.getColumnIndex("password")); Log.d("用户名", name); Log.d("密码", password); cursor.moveToNext(); } }
注:
Cursor cursor=db.query("logtable", null, null, null, null, null, "id DESC ","2,3");//2:偏移量//3:显示数量
更多相关文章
- Android开发入门之路(续篇)
- Android支持库中Fragment的使用及参数传递
- Android集成支付----微信支付总结与封装
- Android(安卓)SQlite数据库常规操作
- Android相机开发实战
- Android(安卓)— 之内容提供器(Content Provider)
- Android(安卓)短信链接跳浏览器打开APP
- 【Android(安卓)数据库框架总结,总有一个适合你!】
- Android(安卓)使用SQLCipher对sqlite进行加解密