其实学习android很久了,关于数据存储,之前学习的时候也一同学习过,编程这些东西很久没用都忘得差不多了,最近做个项目要用到,所以又学习了一遍。

android中关于数据的存储有好几种,这次主要是SQLite的使用。

首先说一点,我的技术很烂,原理什么的不说了,就是讲一下怎么使用,包括“增删改查”这几个操作。

使用数据库的前提是有数据库,有表,所以我们首先是要有一个数据库,然后还得建一张表(至少一张表)。sql语句就是“create table XXX()”。作为一个数据库系统,SQLite也是遵守SQL92标准的,和其他的数据库都差不多,所以有过数据库开发经验的对这些sql语句都不陌生。

  开发中使用数据库

  创建数据库

android中提供了SQLiteOpenHelper这个类来帮助你管理数据库。包括创建和更新数据库。所以你只要继承SQLiteOpenHelper类来对数据库进行管理就行。

public class DBHelper extends SQLiteOpenHelper {private static final String DATABASE_NAME = "test.db";private static final int DATABASE_VERSION = 1;public DBHelper(Context context){super(context,DATABASE_NAME,null,DATABASE_VERSION);}@Overridepublic void onCreate(SQLiteDatabase db){db.execSQL("CREATE TABLE IF NOT EXISTS person(_id INTEGER PRIMARY KEY AUTOINCREMENT," +" name VARCHAR,age INTEGER, info TEXT)");//建表,对数据库进行操作等}@Overridepublic void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){db.execSQL("ALTER TABLE person COLUMN other STRING");}
}

SQLiteOpenHelper类的构造函数有四个参数
public SQLiteOpenHelper(Context context, String name, CursorFactory factory, int version) {this(context, name, factory, version, null);}

这是我在sdk源代码SQLiteOpenHelper类中复制的。context代表上下文,name是数据库名字,factory是游标工厂,一般情况下为null值,version是数据库版本,软件在今后的升级中会用到。

  在构造函数中就会创建数据库。

  使用数据库

  数据库已经创建好,通常我们通过getReadAbleDatabase()或getWriteableDatabase()方法来获取一个数据库实例。可以在onCreate()方法中对数据库进行操作。不过为了便于管理,还是建议大家重新写一个专门的工具类。

  创建表

其实在onCreate()方法中就是在创建表。

db.execSQL("CREATE TABLE IF NOT EXISTS person(_id INTEGER PRIMARY KEY AUTOINCREMENT," +" name VARCHAR,age INTEGER, info TEXT)");
表名是person,_id是主键,为自增长,name是verchar型,age是integer型,info是text型。

  表操作

  表的操作就是增删改查,android中提供了两种方法(就我知道的)。分别是sql语句和封装好的insert(),delete(),update(),query()。后边的这些方法也是对sql语句的封装。

    

  db.execSQL("insert into ....");  

  还有就是

  ContentValues cv = new ContentValues();

  cv.put();

  cv.put();

  db.insert("tableName",getNullColunmHack(),cv);

  函数原型是insert(String table, String nullColumnHack, ContentValues values),其实insert()的底层也是execSQL()。

  删

  和添加的操作差不多。db.execSQL()和db.delete()

  改

  和上边两个操作的也是相同的。

  查

  因为查询的结果是返回一个游标(Cursor)。rawQuery(String sql, String[] selectionArgs)。通过移动游标来进行数据的查询。

 1         Cursor c = db.rawQuery("SELECT * FROM person", null);2         while(c.moveToNext()){3             Person p = new Person();4             p.set_id(c.getInt(c.getColumnIndex("_id")));5             p.setName(c.getString(c.getColumnIndex("name")));6             p.setAge(c.getInt(c.getColumnIndex("age")));7             p.setInfo(c.getString(c.getColumnIndex("info")));8             persons.add(p);9         }
10         c.close();                

所有的操作也差不多就是这些。

最后添加几张截图。

最后是全部源代码

activity.java

  1 package com.sqlitedemo.activity;2 3 import android.app.Activity;4 import android.os.Bundle;5 import android.view.View;6 import android.widget.Button;7 import android.widget.ListView;8 import android.widget.SimpleAdapter;9 import android.widget.Toast;10 11 import com.tiancz.sqlitedemo.R;12 import com.tiancz.sqlitedemo.com.tiancz.sqlitedemo.activity00_entity.DBManager;13 import com.tiancz.sqlitedemo.com.tiancz.sqlitedemo.activity00_entity.Person;14 15 import java.util.ArrayList;16 import java.util.HashMap;17 import java.util.List;18 import java.util.Map;19 20 /**21  * Created by tiancz on 2015/3/7.22  */23 public class activity00 extends Activity {24 25     private DBManager dm;26     private ListView lv;27 28     private Button add;29     private Button query;30     private Button update;31     private Button delete;32     private Button drop;33     @Override34     protected void onCreate(Bundle savedInstanceState) {35         super.onCreate(savedInstanceState);36         setContentView(R.layout.activity00);37 38         lv = (ListView)findViewById(R.id.lv_00);39         query = (Button)findViewById(R.id.query00);40         add = (Button)findViewById(R.id.add00);41         update = (Button)findViewById(R.id.update00);42         delete = (Button)findViewById(R.id.deleteAll00);43         drop = (Button)findViewById(R.id.drop00);44 45         dm = new DBManager(this);46 47         add.setOnClickListener(new View.OnClickListener() {48             @Override49             public void onClick(View v) {50                 add(v);51             }52         });53 54         query.setOnClickListener(new View.OnClickListener() {55             @Override56             public void onClick(View v) {57                 query(v);58             }59         });60 61         update.setOnClickListener(new View.OnClickListener() {62             @Override63             public void onClick(View v) {64                 update(v);65             }66         });67 68         delete.setOnClickListener(new View.OnClickListener() {69             @Override70             public void onClick(View v) {71                 deleteALL(v);72             }73         });74 75 //        drop.setOnClickListener(new View.OnClickListener() {76 //            @Override77 //            public void onClick(View v) {78 //                dropTable(v);79 //            }80 //        });81     }82 83 84     @Override85     protected void onDestroy(){86         super.onDestroy();87         dm.closeDB();88     }89 90     public void add(View view){91         List<Person> persons = new ArrayList<>();92         Person p1 = new Person("tom",21,"lively boy");93         Person p2 = new Person("bill",23,"handsome");94         Person p3 = new Person("gate",22,"sexy boy");95         Person p4 = new Person("joe",24,"hot boy");96         Person p5 = new Person("jhon",29,"pretty");97 98         persons.add(p1);99         persons.add(p2);
100         persons.add(p3);
101         persons.add(p4);
102         persons.add(p5);
103
104         dm.add(persons);
105     }
106     public void update(View view){
107         Person p = new Person();
108         p.setName("jhon");
109         p.setAge(40);
110         dm.updateAge(p);
111     }
112
113     public void deleteALL(View view){
114         dm.delete();
115     }
116
117     public void delete(View view){
118         Person p = new Person();
119         p.setAge(30);
120         dm.deleteOldPerson(p);
121     }
122
123 //    public void dropTable(View view){
124 //        dm.dropTable();
125 //    }
126
127     public void query(View view){
128         List<Person>persons    = dm.findAllPerson();
129         ArrayList<Map<String,String>> list = new ArrayList<>();
130         for (Person p:persons){
131             HashMap<String,String>map = new HashMap<>();
132             map.put("name",p.getName());
133             map.put("info","No."+p.get_id()+" "+p.getAge()+" years old,"+p.getInfo());
134             list.add(map);
135         }
136         SimpleAdapter adapter = new SimpleAdapter(this,list,android.R.layout.simple_list_item_2,
137                 new String[]{"name","info"},new int[]{android.R.id.text1,android.R.id.text2});
138         lv.setAdapter(adapter);
139         if(list.isEmpty()){
140             Toast.makeText(this,"列表里还没人呢",Toast.LENGTH_SHORT).show();
141         }
142     }
143 }

activity.xml

 1 <?xml version="1.0" encoding="utf-8"?>2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"3               android:layout_width="match_parent"4               android:layout_height="match_parent"5               android:orientation="vertical">6 7     <Button8         android:id="@+id/add00"9         android:layout_width="wrap_content"
10         android:layout_height="wrap_content"
11         android:text="Add"/>
12     <Button
13         android:id="@+id/update00"
14         android:layout_width="wrap_content"
15         android:layout_height="wrap_content"
16         android:text="update"/>
17     <Button
18         android:id="@+id/deleteAll00"
19         android:layout_width="wrap_content"
20         android:layout_height="wrap_content"
21         android:text="deleteAll"/>
22     <Button
23         android:id="@+id/delete00"
24         android:layout_width="wrap_content"
25         android:layout_height="wrap_content"
26         android:text="delete"/>
27     <Button
28         android:id="@+id/drop00"
29         android:layout_width="wrap_content"
30         android:layout_height="wrap_content"
31         android:text="drop"/>
32     <Button
33         android:id="@+id/query00"
34         android:layout_width="wrap_content"
35         android:layout_height="wrap_content"
36         android:text="query"/>
37
38     <ListView
39         android:id="@+id/lv_00"
40         android:layout_width="fill_parent"
41         android:layout_height="wrap_content">
42     </ListView>
43 </LinearLayout>

DBHelper.java

 1 package com.tiancz.sqlitedemo.com.tiancz.sqlitedemo.activity00_entity;2 3 import android.content.Context;4 import android.database.sqlite.SQLiteDatabase;5 import android.database.sqlite.SQLiteOpenHelper;6 7 /**8  * Created by tiancz on 2015/3/8.9  */
10 public class DBHelper extends SQLiteOpenHelper {
11     private static final String DATABASE_NAME = "test.db";
12     private static final int DATABASE_VERSION = 1;
13     public DBHelper(Context context){
14         super(context,DATABASE_NAME,null,DATABASE_VERSION);
15     }
16
17     @Override
18     public void onCreate(SQLiteDatabase db){
19         db.execSQL("CREATE TABLE IF NOT EXISTS person(_id INTEGER PRIMARY KEY AUTOINCREMENT," +
20                 " name VARCHAR,age INTEGER, info TEXT)");
21
22     }
23
24     @Override
25     public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){
26         db.execSQL("ALTER TABLE person COLUMN other STRING");
27     }
28 }

DBManager.java

 1 package com.tiancz.sqlitedemo.com.tiancz.sqlitedemo.activity00_entity;2 3 import android.content.ContentValues;4 import android.content.Context;5 import android.database.Cursor;6 import android.database.sqlite.SQLiteDatabase;7 8 import java.util.ArrayList;9 import java.util.List;
10
11 /**
12  * Created by tiancz on 2015/3/8.
13  */
14 public class DBManager {
15     private DBHelper helper;
16     private SQLiteDatabase db;
17
18     public DBManager(Context context){
19         helper = new DBHelper(context);
20         db = helper.getWritableDatabase();
21     }
22
23     public void add(List<Person> persons){
24         db.beginTransaction();
25         try{
26             for (Person p:persons){
27                 db.execSQL("INSERT INTO person VALUES(null,?,?,?)",
28                         new Object[]{p.getName(),p.getAge(),p.getInfo()});
29             }
30             db.setTransactionSuccessful();
31         }catch(Exception e){
32             e.printStackTrace();
33         }finally {
34             db.endTransaction();
35         }
36     }
37
38     public void updateAge(Person p){
39         ContentValues cv = new ContentValues();
40         cv.put("age",p.getAge());
41         db.update("person",cv,"name=?",new String[]{p.getName()});
42     }
43
44     public void delete(){
45         db.execSQL("delete from person where name='tom'");
46         db.execSQL("delete from person where name='bill'");
47         db.execSQL("delete from person where name='gate'");
48         db.execSQL("delete from person where name='joe'");
49         db.execSQL("delete from person where name='jhon'");
50     }
51
52     public void deleteOldPerson(Person p){
53         db.delete("person","age=?",new String[]{String.valueOf(p.getAge())});
54     }
55
56     public List<Person> findAllPerson(){
57         ArrayList<Person> persons = new ArrayList<Person>();
58         Cursor c = db.rawQuery("SELECT * FROM person", null);
59         while(c.moveToNext()){
60             Person p = new Person();
61             p.set_id(c.getInt(c.getColumnIndex("_id")));
62             p.setName(c.getString(c.getColumnIndex("name")));
63             p.setAge(c.getInt(c.getColumnIndex("age")));
64             p.setInfo(c.getString(c.getColumnIndex("info")));
65             persons.add(p);
66         }
67         c.close();
68         return persons;
69     }
70
71 //    public void dropTable(){
72 //        db.execSQL("drop table person");
73 //    }
74
75     public void closeDB(){
76         db.close();
77     }
78
79
80 }

Person.java

 1 package com.tiancz.sqlitedemo.com.tiancz.sqlitedemo.activity00_entity;2 3 /**4  * Created by tiancz on 2015/3/8.5  */6 public class Person {7     private int _id;8     private String name;9     private int age;
10     private String info;
11
12     public Person(){}
13
14     public Person(String name,int age,String info){
15         this.name=name;
16         this.age=age;
17         this.info=info;
18     }
19
20     public int get_id() {
21         return _id;
22     }
23
24     public void set_id(int _id) {
25         this._id = _id;
26     }
27
28     public int getAge() {
29         return age;
30     }
31
32     public void setAge(int age) {
33         this.age = age;
34     }
35
36     public String getName() {
37         return name;
38     }
39
40     public void setName(String name) {
41         this.name = name;
42     }
43
44     public String getInfo() {
45         return info;
46     }
47
48     public void setInfo(String info) {
49         this.info = info;
50     }
51 }

这就是全部的代码。

  总结

  刚开始做的时候忘了实例化DBManager,所以导致无法对数据库进行操作,一直显示的空指针异常,看了好久才发现忘了这一句

  dm = new DBManager(this);

  对于信息越来越多,数据库的使用越发显得重要。学习android,数据库的学习必不可少。

android开发中的数据库SQLite的使用相关推荐

  1. SQLite数据库及在Android开发中的基本使用

    SQLite数据库及在Android开发中的基本使用 SQLite数据库的特点 轻量级数据库,无需搭建服务器. SQLite环境配置 这里提供从官网下载的方法,如果有Android Studio的项目 ...

  2. android中资源文件的两种访问方式,在android开发中进行数据存储与访问的多种方式介绍...

    在android开发中进行数据存储与访问的多种方式介绍 更新时间:2013年06月07日 16:24:23   作者: 很多时候我们的软件需要对处理后的数据进行存储或再次访问,Android为数据存储 ...

  3. Android数据存储:数据库基础,在Android应用中使用数据库,附加Menu菜单选项的一些说明

    为什么**持久性数据很重要: 在计分器那个应用中,是将球队得分存储在变量里,当我们旋转应用时Activity被销毁,得分记录也没有了.将设备旋转为新的方向时,Activity被重现创建,得分又变成默认 ...

  4. android 开发使用adb操作sqlite

    android 开发使用adb操作sqlite. 1.启动模拟器或连接android实体机 2.在命令行输入:adb shell 3.进入目录:data/data/应用程序包名/databases/ ...

  5. XamarinSQLite教程在Xamarin.Android项目中提取数据库文件

    XamarinSQLite教程在Xamarin.Android项目中提取数据库文件 由于不能直接打开该文件,开发者需要先将数据库文件从Android系统中提取出来.操作步骤如下. (5)选择MyDoc ...

  6. XamarinSQLite教程在Xamarin.Android项目中定位数据库文件

    XamarinSQLite教程在Xamarin.Android项目中定位数据库文件 实际开发中,经常需要验证数据库操作的正确性.这个时候,需要打开数据库文件,进行确认.下面是如何找到MyDocumen ...

  7. android权限--android开发中的权限及含义(下)

    android权限--android开发中的权限及含义(下) android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权 ...

  8. android中的mvp模式怎么定义,详解MVP模式在Android开发中的应用

    一.MVP介绍 随着UI创建技术的功能日益增强,UI层也履行着越来越多的职责.为了更好地细分视图(View)与模型(Model)的功能,让View专注于处理数据的可视化以及与用户的交互,同时让Mode ...

  9. Android开发中保存数据的四种方法方法

    本文来自:安卓航班网 在Android开发中我们会接触到四种数据存储方式,每种存储方式都各有不同:以下安卓航班分别列举了Android开发中的不同存储方式的特点. 一,Preferences Pref ...

最新文章

  1. 简单ajax类, 比较小, 只用ajax功能时, 可以考虑它
  2. openais的前世今生
  3. PyCharm调试错误
  4. 前端学习(2329):angular之路由
  5. 你的食物变质没?用AI算法来检测一下吧
  6. sp烘焙流程_小手雷-PBR材质流程(一)——(基本材质)
  7. android 翻转切换view,Android ViewFlipper翻转视图使用详解
  8. 一个 冒泡排序 和 选择排序 的简单c程序
  9. 6-2 第六天 规划项目功能分布
  10. pythonfor循环语句例子_Python for循环学习总结
  11. 算法笔记--无向图的桥、割点、边双连通分量和点双连通分量
  12. 友元函数类图_要达到形式的公平,需要具备的前提条件是()。
  13. STM32笔记 (十)定时器(基本定时器)利用基本定时器实现毫秒延时
  14. java 自定义列表_自定义列表标签
  15. 三极管实现的锁存电路
  16. cygwin3下编译redis6.2
  17. NeRF 神经辐射场
  18. openwrt 配置过程
  19. 英语基础知识: 并列结构
  20. 浅谈mysql的执行计划是何方神圣

热门文章

  1. centos7源代码安装mysql5.7_CentOS7源码编译安装MySQL5.7.11
  2. 迭代反投影法代码_程序员的数学笔记3--迭代法
  3. vue 判断同一数组内的值是否一直_前端代码+后端API,值得一学的Vue高仿音乐播放器实战项目
  4. mysql不能删除外键吗,MySQL不能删除外键约束所需的索引
  5. 过于离谱,我实现憋不住了!
  6. PID算法搞不懂?看这篇文章。
  7. php编程 第一节,PHP第一节php简介_PHP
  8. HDLBits答案(9)_卡诺图与最简SOP式
  9. VHDL编码器和译码器的设计
  10. python3键盘事件_python+selenium3 鼠标事件和键盘事件