android开发中的数据库SQLite的使用

其实学习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);

    }



    @Override

    public void onCreate(SQLiteDatabase db){

        db.execSQL("CREATE TABLE IF NOT EXISTS person(_id INTEGER PRIMARY KEY AUTOINCREMENT," +

                " name VARCHAR,age INTEGER, info TEXT)");//建表,对数据库进行操作等



    }



    @Override

    public 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();                

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

最后添加几张截图。

android开发中的数据库SQLite的使用android开发中的数据库SQLite的使用

最后是全部源代码

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     @Override

 34     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             @Override

 49             public void onClick(View v) {

 50                 add(v);

 51             }

 52         });

 53 

 54         query.setOnClickListener(new View.OnClickListener() {

 55             @Override

 56             public void onClick(View v) {

 57                 query(v);

 58             }

 59         });

 60 

 61         update.setOnClickListener(new View.OnClickListener() {

 62             @Override

 63             public void onClick(View v) {

 64                 update(v);

 65             }

 66         });

 67 

 68         delete.setOnClickListener(new View.OnClickListener() {

 69             @Override

 70             public void onClick(View v) {

 71                 deleteALL(v);

 72             }

 73         });

 74 

 75 //        drop.setOnClickListener(new View.OnClickListener() {

 76 //            @Override

 77 //            public void onClick(View v) {

 78 //                dropTable(v);

 79 //            }

 80 //        });

 81     }

 82 

 83 

 84     @Override

 85     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     <Button

 8         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 }
DBManager.java

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 }
Person.java

这就是全部的代码。

  总结

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

  dm = new DBManager(this);

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

你可能感兴趣的:(Android开发)