知识点:Gg5HTML5中文学习网 - HTML5先行者学习网
1.使用SQL Helper创建数据库Gg5HTML5中文学习网 - HTML5先行者学习网
2.数据的增删查改(PRDU:Put、Read、Delete、Update)Gg5HTML5中文学习网 - HTML5先行者学习网
背景知识:Gg5HTML5中文学习网 - HTML5先行者学习网
上篇文章学习了android保存文件,今天学习的是保存数据到SQL数据库中。相信大家对数据库都不陌生。对于大量重复的,有特定结构的数据的保存,用 SQL数据库 来保存是最理想不过了。Gg5HTML5中文学习网 - HTML5先行者学习网
下面将用一个关于联系人的数据库Demo来具体学习。Gg5HTML5中文学习网 - HTML5先行者学习网
具体知识:Gg5HTML5中文学习网 - HTML5先行者学习网
1.定义Contract类Gg5HTML5中文学习网 - HTML5先行者学习网
在创建SQL数据库之前,要创建Contract类。那什么是Contract类呢?Gg5HTML5中文学习网 - HTML5先行者学习网
Gg5HTML5中文学习网 - HTML5先行者学习网
Contract Class的定义:Gg5HTML5中文学习网 - HTML5先行者学习网
Contract Class,又可以叫做Companion Class。Gg5HTML5中文学习网 - HTML5先行者学习网
Android Developer的帮助文档是这么说的:Gg5HTML5中文学习网 - HTML5先行者学习网
< A contract class is a container for constants that define names for URIs, Gg5HTML5中文学习网 - HTML5先行者学习网
tables, and columns. The contract class allows you to use the same constantsGg5HTML5中文学习网 - HTML5先行者学习网
across all the other classes in the same package. This lets you change a Gg5HTML5中文学习网 - HTML5先行者学习网
column name in one place and have it propagate throughout your code.>Gg5HTML5中文学习网 - HTML5先行者学习网
Contact 类是定义URI、表、列的名字的容器。这个类允许我们在同一包的不同类下使用相同的常量。Gg5HTML5中文学习网 - HTML5先行者学习网
我们在一处修改了列名,同时传播到我们代码的每个地方。Gg5HTML5中文学习网 - HTML5先行者学习网
Gg5HTML5中文学习网 - HTML5先行者学习网Gg5HTML5中文学习网 - HTML5先行者学习网package com.example.sqlitetest;
Gg5HTML5中文学习网 - HTML5先行者学习网//Contract类
Gg5HTML5中文学习网 - HTML5先行者学习网public class Contact {
Gg5HTML5中文学习网 - HTML5先行者学习网 Gg5HTML5中文学习网 - HTML5先行者学习网 int _id;
Gg5HTML5中文学习网 - HTML5先行者学习网 String _name;
Gg5HTML5中文学习网 - HTML5先行者学习网 String _phone_number;
Gg5HTML5中文学习网 - HTML5先行者学习网 Gg5HTML5中文学习网 - HTML5先行者学习网 public Contact(){
Gg5HTML5中文学习网 - HTML5先行者学习网 Gg5HTML5中文学习网 - HTML5先行者学习网 }
Gg5HTML5中文学习网 - HTML5先行者学习网 public Contact(int id, String name, String _phone_number){
Gg5HTML5中文学习网 - HTML5先行者学习网 this._id = id;
Gg5HTML5中文学习网 - HTML5先行者学习网 this._name = name;
Gg5HTML5中文学习网 - HTML5先行者学习网 this._phone_number = _phone_number;
Gg5HTML5中文学习网 - HTML5先行者学习网 }
Gg5HTML5中文学习网 - HTML5先行者学习网 Gg5HTML5中文学习网 - HTML5先行者学习网 public Contact(String name, String _phone_number){
Gg5HTML5中文学习网 - HTML5先行者学习网 this._name = name;
Gg5HTML5中文学习网 - HTML5先行者学习网 this._phone_number = _phone_number;
Gg5HTML5中文学习网 - HTML5先行者学习网 }
Gg5HTML5中文学习网 - HTML5先行者学习网 public int getID(){
Gg5HTML5中文学习网 - HTML5先行者学习网 return this._id;
Gg5HTML5中文学习网 - HTML5先行者学习网 }
Gg5HTML5中文学习网 - HTML5先行者学习网 Gg5HTML5中文学习网 - HTML5先行者学习网 public void setID(int id){
Gg5HTML5中文学习网 - HTML5先行者学习网 this._id = id;
Gg5HTML5中文学习网 - HTML5先行者学习网 }
Gg5HTML5中文学习网 - HTML5先行者学习网 Gg5HTML5中文学习网 - HTML5先行者学习网 public String getName(){
Gg5HTML5中文学习网 - HTML5先行者学习网 return this._name;
Gg5HTML5中文学习网 - HTML5先行者学习网 }
Gg5HTML5中文学习网 - HTML5先行者学习网 Gg5HTML5中文学习网 - HTML5先行者学习网 public void setName(String name){
Gg5HTML5中文学习网 - HTML5先行者学习网 this._name = name;
Gg5HTML5中文学习网 - HTML5先行者学习网 }
Gg5HTML5中文学习网 - HTML5先行者学习网 Gg5HTML5中文学习网 - HTML5先行者学习网 public String getPhoneNumber(){
Gg5HTML5中文学习网 - HTML5先行者学习网 return this._phone_number;
Gg5HTML5中文学习网 - HTML5先行者学习网 }
Gg5HTML5中文学习网 - HTML5先行者学习网 public void setPhoneNumber(String phone_number){Gg5HTML5中文学习网 - HTML5先行者学习网
this._phone_number = phone_number;Gg5HTML5中文学习网 - HTML5先行者学习网
}Gg5HTML5中文学习网 - HTML5先行者学习网
}Gg5HTML5中文学习网 - HTML5先行者学习网
Gg5HTML5中文学习网 - HTML5先行者学习网2.使用SQLHelper创建数据库Gg5HTML5中文学习网 - HTML5先行者学习网
就像保存文件在内部存储一样,Android在私有的应用存储空间存储我们的数据库,这样就保证我们的数据是安全的。不能被其他应用访问到。Gg5HTML5中文学习网 - HTML5先行者学习网
在设备上存储的数据库保存在:Gg5HTML5中文学习网 - HTML5先行者学习网
/data/data/<package_name>/databases目录下Gg5HTML5中文学习网 - HTML5先行者学习网
Gg5HTML5中文学习网 - HTML5先行者学习网
为了使用SQLiteOpenHelper,我们需要创建一个重写了onCreate(),onUpgrade()和onOpen()回调方法的子类。Gg5HTML5中文学习网 - HTML5先行者学习网
3.数据的增删改查Gg5HTML5中文学习网 - HTML5先行者学习网
增:传ContentValue值到insert()方法。Gg5HTML5中文学习网 - HTML5先行者学习网
Gg5HTML5中文学习网 - HTML5先行者学习网
SQLiteDatabase db = this.getWritableDatabase();Gg5HTML5中文学习网 - HTML5先行者学习网
Gg5HTML5中文学习网 - HTML5先行者学习网
ContentValues values = new ContentValues();Gg5HTML5中文学习网 - HTML5先行者学习网
values.put(KEY_NAME, contact.getName());Gg5HTML5中文学习网 - HTML5先行者学习网
values.put(KEY_PH_NO, contact.getPhoneNumber()); Gg5HTML5中文学习网 - HTML5先行者学习网
Gg5HTML5中文学习网 - HTML5先行者学习网
db.insert(TABLE_CONTACTS, null, values);Gg5HTML5中文学习网 - HTML5先行者学习网
db.close();Gg5HTML5中文学习网 - HTML5先行者学习网
Gg5HTML5中文学习网 - HTML5先行者学习网删:delete()方法Gg5HTML5中文学习网 - HTML5先行者学习网
Gg5HTML5中文学习网 - HTML5先行者学习网
SQLiteDatabase db = this.getWritableDatabase();Gg5HTML5中文学习网 - HTML5先行者学习网
db.delete(TABLE_CONTACTS, KEY_ID + " = ?",Gg5HTML5中文学习网 - HTML5先行者学习网
new String[] { String.valueOf(contact.getID()) });Gg5HTML5中文学习网 - HTML5先行者学习网
db.close();Gg5HTML5中文学习网 - HTML5先行者学习网
Gg5HTML5中文学习网 - HTML5先行者学习网 改:update()方法Gg5HTML5中文学习网 - HTML5先行者学习网
Gg5HTML5中文学习网 - HTML5先行者学习网 SQLiteDatabase db = this.getWritableDatabase();
Gg5HTML5中文学习网 - HTML5先行者学习网ContentValues values = new ContentValues();Gg5HTML5中文学习网 - HTML5先行者学习网
values.put(KEY_NAME, contact.getName());Gg5HTML5中文学习网 - HTML5先行者学习网
values.put(KEY_PH_NO, contact.getPhoneNumber());Gg5HTML5中文学习网 - HTML5先行者学习网
Gg5HTML5中文学习网 - HTML5先行者学习网
return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?",Gg5HTML5中文学习网 - HTML5先行者学习网
ew String[] { String.valueOf(contact.getID()) });Gg5HTML5中文学习网 - HTML5先行者学习网
Gg5HTML5中文学习网 - HTML5先行者学习网查:query()方法Gg5HTML5中文学习网 - HTML5先行者学习网
Gg5HTML5中文学习网 - HTML5先行者学习网SQLiteDatabase db = this.getReadableDatabase();
Gg5HTML5中文学习网 - HTML5先行者学习网Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID,Gg5HTML5中文学习网 - HTML5先行者学习网
KEY_NAME, KEY_PH_NO }, KEY_ID + "=?",Gg5HTML5中文学习网 - HTML5先行者学习网
new String[] { String.valueOf(id) }, null, null, null, null);Gg5HTML5中文学习网 - HTML5先行者学习网
if (cursor != null)Gg5HTML5中文学习网 - HTML5先行者学习网
cursor.moveToFirst();Gg5HTML5中文学习网 - HTML5先行者学习网
Contact contact = new Contact(Integer.parseInt(cursor.getString(0)),Gg5HTML5中文学习网 - HTML5先行者学习网
cursor.getString(1), cursor.getString(2));Gg5HTML5中文学习网 - HTML5先行者学习网
return contact;Gg5HTML5中文学习网 - HTML5先行者学习网
Gg5HTML5中文学习网 - HTML5先行者学习网完整DatabaseHelper代码如下:Gg5HTML5中文学习网 - HTML5先行者学习网
Gg5HTML5中文学习网 - HTML5先行者学习网package com.example.sqlitetest;
Gg5HTML5中文学习网 - HTML5先行者学习网import java.util.ArrayList;Gg5HTML5中文学习网 - HTML5先行者学习网
import java.util.List;Gg5HTML5中文学习网 - HTML5先行者学习网
import android.content.ContentValues;Gg5HTML5中文学习网 - HTML5先行者学习网
import android.content.Context;Gg5HTML5中文学习网 - HTML5先行者学习网
import android.database.Cursor;Gg5HTML5中文学习网 - HTML5先行者学习网
import android.database.sqlite.SQLiteDatabase;Gg5HTML5中文学习网 - HTML5先行者学习网
import android.database.sqlite.SQLiteOpenHelper;Gg5HTML5中文学习网 - HTML5先行者学习网
public class DatabaseHelper extends SQLiteOpenHelper {Gg5HTML5中文学习网 - HTML5先行者学习网
// 数据库版本Gg5HTML5中文学习网 - HTML5先行者学习网
private static final int DATABASE_VERSION = 1;Gg5HTML5中文学习网 - HTML5先行者学习网
// 数据库名Gg5HTML5中文学习网 - HTML5先行者学习网
private static final String DATABASE_NAME = "contactsManager";Gg5HTML5中文学习网 - HTML5先行者学习网
//Contact表名Gg5HTML5中文学习网 - HTML5先行者学习网
private static final String TABLE_CONTACTS = "contacts";Gg5HTML5中文学习网 - HTML5先行者学习网
//Contact表的列名Gg5HTML5中文学习网 - HTML5先行者学习网
private static final String KEY_ID = "id";Gg5HTML5中文学习网 - HTML5先行者学习网
private static final String KEY_NAME = "name";Gg5HTML5中文学习网 - HTML5先行者学习网
private static final String KEY_PH_NO = "phone_number";Gg5HTML5中文学习网 - HTML5先行者学习网
public DatabaseHelper(Context context) {Gg5HTML5中文学习网 - HTML5先行者学习网
super(context, DATABASE_NAME, null, DATABASE_VERSION);Gg5HTML5中文学习网 - HTML5先行者学习网
}Gg5HTML5中文学习网 - HTML5先行者学习网
// 创建表Gg5HTML5中文学习网 - HTML5先行者学习网
@OverrideGg5HTML5中文学习网 - HTML5先行者学习网
public void onCreate(SQLiteDatabase db) {Gg5HTML5中文学习网 - HTML5先行者学习网
String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("Gg5HTML5中文学习网 - HTML5先行者学习网
+ KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT,"Gg5HTML5中文学习网 - HTML5先行者学习网
+ KEY_PH_NO + " TEXT" + ")";Gg5HTML5中文学习网 - HTML5先行者学习网
db.execSQL(CREATE_CONTACTS_TABLE);Gg5HTML5中文学习网 - HTML5先行者学习网
}Gg5HTML5中文学习网 - HTML5先行者学习网
// 更新表Gg5HTML5中文学习网 - HTML5先行者学习网
@OverrideGg5HTML5中文学习网 - HTML5先行者学习网
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {Gg5HTML5中文学习网 - HTML5先行者学习网
// 删除旧表Gg5HTML5中文学习网 - HTML5先行者学习网
db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);Gg5HTML5中文学习网 - HTML5先行者学习网
//再次创建表Gg5HTML5中文学习网 - HTML5先行者学习网
onCreate(db);Gg5HTML5中文学习网 - HTML5先行者学习网
}Gg5HTML5中文学习网 - HTML5先行者学习网
/**Gg5HTML5中文学习网 - HTML5先行者学习网
*增删改查操作Gg5HTML5中文学习网 - HTML5先行者学习网
*/Gg5HTML5中文学习网 - HTML5先行者学习网
// 增加新的联系人Gg5HTML5中文学习网 - HTML5先行者学习网
void addContact(Contact contact) {Gg5HTML5中文学习网 - HTML5先行者学习网
SQLiteDatabase db = this.getWritableDatabase();Gg5HTML5中文学习网 - HTML5先行者学习网
ContentValues values = new ContentValues();Gg5HTML5中文学习网 - HTML5先行者学习网
values.put(KEY_NAME, contact.getName());Gg5HTML5中文学习网 - HTML5先行者学习网
values.put(KEY_PH_NO, contact.getPhoneNumber());Gg5HTML5中文学习网 - HTML5先行者学习网
// 插入行Gg5HTML5中文学习网 - HTML5先行者学习网
db.insert(TABLE_CONTACTS, null, values);Gg5HTML5中文学习网 - HTML5先行者学习网
db.close(); // 关闭数据库的连接Gg5HTML5中文学习网 - HTML5先行者学习网
}Gg5HTML5中文学习网 - HTML5先行者学习网
// 获取联系人Gg5HTML5中文学习网 - HTML5先行者学习网
Contact getContact(int id) {Gg5HTML5中文学习网 - HTML5先行者学习网
SQLiteDatabase db = this.getReadableDatabase();Gg5HTML5中文学习网 - HTML5先行者学习网
Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID,Gg5HTML5中文学习网 - HTML5先行者学习网
KEY_NAME, KEY_PH_NO }, KEY_ID + "=?",Gg5HTML5中文学习网 - HTML5先行者学习网
new String[] { String.valueOf(id) }, null, null, null, null);Gg5HTML5中文学习网 - HTML5先行者学习网
if (cursor != null)Gg5HTML5中文学习网 - HTML5先行者学习网
cursor.moveToFirst();Gg5HTML5中文学习网 - HTML5先行者学习网
Contact contact = new Contact(Integer.parseInt(cursor.getString(0)),Gg5HTML5中文学习网 - HTML5先行者学习网
cursor.getString(1), cursor.getString(2));Gg5HTML5中文学习网 - HTML5先行者学习网
return contact;Gg5HTML5中文学习网 - HTML5先行者学习网
}Gg5HTML5中文学习网 - HTML5先行者学习网
Gg5HTML5中文学习网 - HTML5先行者学习网
// 获取所有联系人Gg5HTML5中文学习网 - HTML5先行者学习网
public List<Contact> getAllContacts() {Gg5HTML5中文学习网 - HTML5先行者学习网
List<Contact> contactList = new ArrayList<Contact>();Gg5HTML5中文学习网 - HTML5先行者学习网
// Select All QueryGg5HTML5中文学习网 - HTML5先行者学习网
String selectQuery = "SELECT * FROM " + TABLE_CONTACTS;Gg5HTML5中文学习网 - HTML5先行者学习网
SQLiteDatabase db = this.getWritableDatabase();Gg5HTML5中文学习网 - HTML5先行者学习网
Cursor cursor = db.rawQuery(selectQuery, null);Gg5HTML5中文学习网 - HTML5先行者学习网
if (cursor.moveToFirst()) {Gg5HTML5中文学习网 - HTML5先行者学习网
do {Gg5HTML5中文学习网 - HTML5先行者学习网
Contact contact = new Contact();Gg5HTML5中文学习网 - HTML5先行者学习网
contact.setID(Integer.parseInt(cursor.getString(0)));Gg5HTML5中文学习网 - HTML5先行者学习网
contact.setName(cursor.getString(1));Gg5HTML5中文学习网 - HTML5先行者学习网
contact.setPhoneNumber(cursor.getString(2));Gg5HTML5中文学习网 - HTML5先行者学习网
contactList.add(contact);Gg5HTML5中文学习网 - HTML5先行者学习网
} while (cursor.moveToNext());Gg5HTML5中文学习网 - HTML5先行者学习网
}Gg5HTML5中文学习网 - HTML5先行者学习网
return contactList;Gg5HTML5中文学习网 - HTML5先行者学习网
}Gg5HTML5中文学习网 - HTML5先行者学习网
// 更新单个联系人Gg5HTML5中文学习网 - HTML5先行者学习网
public int updateContact(Contact contact) {Gg5HTML5中文学习网 - HTML5先行者学习网
SQLiteDatabase db = this.getWritableDatabase();Gg5HTML5中文学习网 - HTML5先行者学习网
ContentValues values = new ContentValues();Gg5HTML5中文学习网 - HTML5先行者学习网
values.put(KEY_NAME, contact.getName());Gg5HTML5中文学习网 - HTML5先行者学习网
values.put(KEY_PH_NO, contact.getPhoneNumber());Gg5HTML5中文学习网 - HTML5先行者学习网
//更新行Gg5HTML5中文学习网 - HTML5先行者学习网
return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?",Gg5HTML5中文学习网 - HTML5先行者学习网
new String[] { String.valueOf(contact.getID()) });Gg5HTML5中文学习网 - HTML5先行者学习网
}Gg5HTML5中文学习网 - HTML5先行者学习网
// 删除单个联系人Gg5HTML5中文学习网 - HTML5先行者学习网
public void deleteContact(Contact contact) {Gg5HTML5中文学习网 - HTML5先行者学习网
SQLiteDatabase db = this.getWritableDatabase();Gg5HTML5中文学习网 - HTML5先行者学习网
db.delete(TABLE_CONTACTS, KEY_ID + " = ?",Gg5HTML5中文学习网 - HTML5先行者学习网
new String[] { String.valueOf(contact.getID()) });Gg5HTML5中文学习网 - HTML5先行者学习网
db.close();Gg5HTML5中文学习网 - HTML5先行者学习网
}Gg5HTML5中文学习网 - HTML5先行者学习网
Gg5HTML5中文学习网 - HTML5先行者学习网
// 获取联系人数量Gg5HTML5中文学习网 - HTML5先行者学习网
public int getContactsCount() {Gg5HTML5中文学习网 - HTML5先行者学习网
String countQuery = "SELECT * FROM " + TABLE_CONTACTS;Gg5HTML5中文学习网 - HTML5先行者学习网
SQLiteDatabase db = this.getReadableDatabase();Gg5HTML5中文学习网 - HTML5先行者学习网
Cursor cursor = db.rawQuery(countQuery, null);Gg5HTML5中文学习网 - HTML5先行者学习网
cursor.close();Gg5HTML5中文学习网 - HTML5先行者学习网
return cursor.getCount();Gg5HTML5中文学习网 - HTML5先行者学习网
}Gg5HTML5中文学习网 - HTML5先行者学习网
}Gg5HTML5中文学习网 - HTML5先行者学习网
Gg5HTML5中文学习网 - HTML5先行者学习网还有一些代码不是本次学习的重点,就不贴出来了。有需要的留言找我要。Gg5HTML5中文学习网 - HTML5先行者学习网
Demo运行效果图:Gg5HTML5中文学习网 - HTML5先行者学习网
Gg5HTML5中文学习网 - HTML5先行者学习网
Gg5HTML5中文学习网 - HTML5先行者学习网
Gg5HTML5中文学习网 - HTML5先行者学习网
Gg5HTML5中文学习网 - HTML5先行者学习网
Gg5HTML5中文学习网 - HTML5先行者学习网
Gg5HTML5中文学习网 - HTML5先行者学习网
Gg5HTML5中文学习网 - HTML5先行者学习网
Gg5HTML5中文学习网 - HTML5先行者学习网