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

一、开发中使用数据库

1、创建数据库

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


    
    
  1. public class DBHelper extends SQLiteOpenHelper {
  2.     private static final String DATABASE_NAME = "test.db";
  3.     private static final int DATABASE_VERSION = 1;
  4.     public DBHelper(Context context){
  5.         super(context,DATABASE_NAME,null,DATABASE_VERSION);
  6.     }
  7.  
  8.     @Override
  9.     public void onCreate(SQLiteDatabase db){
  10.         db.execSQL("CREATE TABLE IF NOT EXISTS person(_id INTEGER PRIMARY KEY AUTOINCREMENT," +
  11.                 " name VARCHAR,age INTEGER, info TEXT)");//建表,对数据库进行操作等
  12.  
  13.     }
  14.  
  15.     @Override
  16.     public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){
  17.         db.execSQL("ALTER TABLE person COLUMN other STRING");
  18.     }
  19. }

SQLiteOpenHelper类的构造函数有四个参数


    
    
  1. public SQLiteOpenHelper(Context context, String name, CursorFactory factory, int version) {
  2.         this(context, name, factory, version, null);
  3.     }

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

2、使用数据库

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

3、创建表

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


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

4、表操作

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

(1)增

 


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

还有就是


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

 

二、源代码

activity.java

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

activity.xml

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

DBHelper.java

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

三、效果

四、总结

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

  


   
   
  1. dm = new DBManager(this);​

  

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

 

由于本人初写博客,写的不好的地方还请大家能批评指正,希望能和大家相互学习、相互交流、共同成长。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GraysonWP

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值