知识点:
1.使用sql helper创建数据库
2.数据的增删查改(prdu:put、read、delete、update)
背景知识:
上篇文章学习了,今天学习的是保存数据到sql数据库中。相信大家对数据库都不陌生。对于大量重复的,有特定结构的数据的保存,用 sql数据库 来保存是最理想不过了。
下面将用一个关于联系人的数据库demo来具体学习。
具体知识:
1.定义contract类
在创建sql数据库之前,要创建contract类。那什么是contract类呢?
public void setphonenumber(string phone_number){
this._phone_number = phone_number;
}
}
2.使用sqlhelper创建数据库
就像保存文件在内部存储一样,android在私有的应用存储空间存储我们的数据库,这样就保证我们的数据是安全的。不能被其他应用访问到。
在设备上存储的数据库保存在:
/data/data/<package_name>/databases目录下
为了使用sqliteopenhelper,我们需要创建一个重写了oncreate(),onupgrade()和onopen()回调方法的子类。
3.数据的增删改查
增:传contentvalue值到insert()方法。
删:delete()方法
改:update()方法
contentvalues values = new contentvalues();
values.put(key_name, contact.getname());
values.put(key_ph_no, contact.getphonenumber());
return db.update(table_contacts, values, key_id + " = ?",
ew string[] { string.valueof(contact.getid()) });
查:query()方法
cursor cursor = db.query(table_contacts, new string[] { key_id,
key_name, key_ph_no }, key_id + "=?",
new string[] { string.valueof(id) }, null, null, null, null);
if (cursor != null)
cursor.movetofirst();
contact contact = new contact(integer.parseint(cursor.getstring(0)),
cursor.getstring(1), cursor.getstring(2));
return contact;
完整databasehelper代码如下:
import java.util.arraylist;
import java.util.list;
import android.content.contentvalues;
import android.content.context;
import android.database.cursor;
import android.database.sqlite.sqlitedatabase;
import android.database.sqlite.sqliteopenhelper;
public class databasehelper extends sqliteopenhelper {
// 数据库版本
private static final int database_version = 1;
// 数据库名
private static final string database_name = "contactsmanager";
//contact表名
private static final string table_contacts = "contacts";
//contact表的列名
private static final string key_id = "id";
private static final string key_name = "name";
private static final string key_ph_no = "phone_number";
public databasehelper(context context) {
super(context, database_name, null, database_version);
}
// 创建表
@override
public void oncreate(sqlitedatabase db) {
string create_contacts_table = "create table " + table_contacts + "("
+ key_id + " integer primary key," + key_name + " text,"
+ key_ph_no + " text" + ")";
db.execsql(create_contacts_table);
}
// 更新表
@override
public void onupgrade(sqlitedatabase db, int oldversion, int newversion) {
// 删除旧表
db.execsql("drop table if exists " + table_contacts);
//再次创建表
oncreate(db);
}
/**
*增删改查操作
*/
// 增加新的联系人
void addcontact(contact contact) {
sqlitedatabase db = this.getwritabledatabase();
contentvalues values = new contentvalues();
values.put(key_name, contact.getname());
values.put(key_ph_no, contact.getphonenumber());
// 插入行
db.insert(table_contacts, null, values);
db.close(); // 关闭数据库的连接
}
// 获取联系人
contact getcontact(int id) {
sqlitedatabase db = this.getreadabledatabase();
cursor cursor = db.query(table_contacts, new string[] { key_id,
key_name, key_ph_no }, key_id + "=?",
new string[] { string.valueof(id) }, null, null, null, null);
if (cursor != null)
cursor.movetofirst();
contact contact = new contact(integer.parseint(cursor.getstring(0)),
cursor.getstring(1), cursor.getstring(2));
return contact;
}
// 获取所有联系人
public list<contact> getallcontacts() {
list<contact> contactlist = new arraylist<contact>();
// select all query
string selectquery = "select * from " + table_contacts;
sqlitedatabase db = this.getwritabledatabase();
cursor cursor = db.rawquery(selectquery, null);
if (cursor.movetofirst()) {
do {
contact contact = new contact();
contact.setid(integer.parseint(cursor.getstring(0)));
contact.setname(cursor.getstring(1));
contact.setphonenumber(cursor.getstring(2));
contactlist.add(contact);
} while (cursor.movetonext());
}
return contactlist;
}
// 更新单个联系人
public int updatecontact(contact contact) {
sqlitedatabase db = this.getwritabledatabase();
contentvalues values = new contentvalues();
values.put(key_name, contact.getname());
values.put(key_ph_no, contact.getphonenumber());
//更新行
return db.update(table_contacts, values, key_id + " = ?",
new string[] { string.valueof(contact.getid()) });
}
// 删除单个联系人
public void deletecontact(contact contact) {
sqlitedatabase db = this.getwritabledatabase();
db.delete(table_contacts, key_id + " = ?",
new string[] { string.valueof(contact.getid()) });
db.close();
}
// 获取联系人数量
public int getcontactscount() {
string countquery = "select * from " + table_contacts;
sqlitedatabase db = this.getreadabledatabase();
cursor cursor = db.rawquery(countquery, null);
cursor.close();
return cursor.getcount();
}
}
还有一些代码不是本次学习的重点,就不贴出来了。有需要的留言找我要。
demo运行效果图:
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Android studio开发小型对话机器人app(实例代码)
Android通过Java sdk的方式接入OpenCv的方法
Android 通过cmake的方式接入opencv的方法步骤
Android Studio finish()方法的使用与解决app点击“返回”(直接退出)
Android 进度条 ProgressBar的实现代码(隐藏、出现、加载进度)
网友评论