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.java1 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 数据库
- Android开发—数据库应用—使用数据库(SQLite)--查看模拟器目录
- Android 开发中使用 SQLite 数据库
- Android 开发中使用 SQLite 数据库
- Android 开发中使用 SQLite 数据库
- Android 开发中使用 SQLite 数据库
- Android 开发中使用 SQLite 数据库
- Android 开发中使用 SQLite 数据库
- Android开发中使用SQLite 数据库
- android开发(24)使用SQLiteOpenHelper的onUpgrade实现数据库版本升级
- Android 开发中使用 SQLite 数据库
- Android 开发中使用 SQLite 数据库
- Android 开发中使用 SQLite 数据库
- Android 开发中使用 SQLite 数据库
- Android 开发中使用 SQLite 数据库
- Android开发中使用SQLite 数据库
- Android 开发中使用 SQLite 数据库
- Android 开发中使用 SQLite 数据库
- Android 开发中使用 SQLite 数据库
- Android 开发中使用 SQLite 数据库