您的位置:首页 > 移动开发 > Android开发

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

2016-09-17 10:27 471 查看


一、开发中使用数据库


1、创建数据库

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是数据库版本,软件在今后的升级中会用到。在构造函数中就会创建数据库。


2、使用数据库

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


3、创建表

  其实在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型。


4、表操作

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

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

还有就是
ContentValues cv = new ContentValues();
cv.put();​
db.insert("tableName",getNullColunmHack(),cv);

  函数原型是insert(String table, String nullColumnHack, ContentValues values),其实insert()的底层也是execSQL()。
(2)删
  和添加的操作差不多。db.execSQL()和db.delete()
(3)改
  和上边两个操作的也是相同的。
(4)查
  因为查询的结果是返回一个游标(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     @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,所以导致无法对数据库进行操作,一直显示的空指针异常,看了好久才发现忘了这一句
  
dm = new DBManager(this);​

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

由于本人初写博客,写的不好的地方还请大家能批评指正,希望能和大家相互学习、相互交流、共同成长。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android 数据库 sqlite