项目目录
- 一、项目概述
- 二、开发环境
- 三、详细设计
- 1、主界面的搭建
- 2、SQLite数据库
- 2.1、SQLite是什么?
- 2.2、为什么要用SQLite?
- 2.3、SQLite有什么特点?
- 3、SQLite相关的类
- 3.1、SQLiteOpenHelper
- 3.2、SQLiteDatabase
- 3.3、Cursor
- 4、创建数据库与版本管理
- 5、实现增删改查
- 四、项目效果
- 五、项目总结
- 六、源码下载
一、项目概述
本次项目主要实现了对联系人信息(姓名和电话)的增加、删除、修改和查询功能,在删除和修改用户前,可以通过姓名搜索到指定联系人的信息,方便用户操作。通过SQLiteDatabase来存储数据,SQLite数据库和其他的SQL数据库不同, 我们并不需要在手机上另外安装一个数据库软件,Android系统已经集成了这个数据库,功能非常强大,而且使用也很方便快捷。我们下面会详细介绍SQLite数据库。
二、开发环境
开发环境还是老样子哈,Android Studio版本3.6.1及以上都可以顺利运行。
三、详细设计
1、主界面的搭建
最外层布局采用线性布局LinearLayout。orientation方向选择的也是vertical垂直排列。下面先是放置了一个小的LinearLayout,里面先放一个文本框来显示标题,再放一个图片框,显示图标。然后不断调整内外边距,找到最合适的位置。
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="通讯录"
android:textSize="40sp"
android:textStyle="bold"
android:textColor="@color/DarkCyan"
android:layout_margin="20dp"
android:gravity="center"/>
<ImageView
android:layout_width="200dp"
android:layout_height="200dp"
android:src="@drawable/contact"
android:layout_marginBottom="10dp"
android:layout_gravity="center"/>
下面是四个操作按钮,id分别以它们的功能命名,其实四个按钮除了id和text内容不同,其他都是一样的,背景background选择的是写好的btn_selector,在其中设置了按钮的外边框和弧度,而且按钮按下时会有相应的颜色变化。
<Button
android:id="@+id/main_add"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="添加联系人"
android:gravity="center"
android:textColor="@color/Honeydew"
android:background="@drawable/btn_selector"
android:textSize="20sp"
android:layout_margin="10dp"/>
<Button
android:id="@+id/main_delete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="删除联系人"
android:gravity="center"
android:textColor="@color/Honeydew"
android:background="@drawable/btn_selector"
android:textSize="20sp"
android:layout_margin="10dp"/>
<Button
android:id="@+id/main_update"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="修改联系人"
android:gravity="center"
android:textColor="@color/Honeydew"
android:background="@drawable/btn_selector"
android:textSize="20sp"
android:layout_margin="10dp"/>
<Button
android:id="@+id/main_query"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="查询联系人"
android:gravity="center"
android:textColor="@color/Honeydew"
android:background="@drawable/btn_selector"
android:textSize="20sp"
android:layout_margin="10dp"/>
我们看下主界面的示意图:
2、SQLite数据库
2.1、SQLite是什么?
SQLite是一个轻量级的关系型数据库,运算速度快,占用资源少,很适合在移动设备上使用, 不仅支持标准SQL语法,还遵循ACID(数据库事务)原则,无需账号,使用起来非常方便!Android内置的SQLite是SQLite 3版本的。
2.2、为什么要用SQLite?
前面我们学习了使用文件与SharedPreference来保存数据,但是在很多情况下,文件并不一定是有效的,如多线程并发访问是相关的;app要处理可能变化的复杂数据结构等等。比如银行的存钱与取钱!使用前两者就会显得很无力或者繁琐,数据库的出现可以解决这种问题,而Android又给我们提供了这样一个轻量级的SQLite,那肯定要好好用啊。
2.3、SQLite有什么特点?
SQLite支持五种数据类型:NULL,INTEGER,REAL(浮点数),TEXT(字符串文本)和BLOB(二进制对象) 虽然只有五种,但是对于varchar,char等其他数据类型都是可以保存的;因为SQLite有个最大的特点:
你可以将各种数据类型的数据保存到任何字段中,而不用关心字段声明的数据类型是什么。
比如你可以在Integer类型的字段中存放String字符串,当然除了声明为主键INTEGER PRIMARY KEY的字段只能够存储64位整数。
另外,SQLite 在解析CREATE TABLE 语句时,会忽略 CREATE TABLE 语句中跟在字段名后面的数据类型信息。如下面语句会忽略 name字段的类型信息:
CREATE TABLE person (personid integer primary key autoincrement, name varchar(20))
SQlite通过文件来保存数据库,一个文件就是一个数据库,数据库中又包含多个表格,表格里又有 多条记录,每个记录由多个字段构成,每个字段有对应的值,每个值我们可以指定类型,也可以不指定 类型(主键除外) |
3、SQLite相关的类
3.1、SQLiteOpenHelper
抽象类,我们通过继承该类,然后重写数据库创建以及更新的方法, 我们还可以通过该类的对象获得数据库实例,或者关闭数据库。
3.2、SQLiteDatabase
数据库访问类:我们可以通过该类的对象来对数据库做一些增删改查的操作。最核心的类!
3.3、Cursor
游标,有点类似于JDBC里的resultset,结果集!可以简单理解为指向数据库中某 一个记录的指针。
4、创建数据库与版本管理
Android给我们提供了SQLiteOpenHelper的两个方法:onCreate( )与onUpgrade( )来实现
onCreate(database):首次使用软件时生成数据库表。
onUpgrade(database,oldVersion,newVersion):在数据库的版本发生变化时会被调用, 一般在软件升级时才需改变版本号,而数据库的版本是由程序员控制的。
class MyHelper extends SQLiteOpenHelper{
public MyHelper(Context context){
super(context,"dzh.db",null,1);//数据库文件夹名为dzh.db
}
//数据库第一次创建时被调用
@Override
public void onCreate(SQLiteDatabase db){
db.execSQL("CREATE TABLE person(_id INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(20),phone VARCHAR(20))");
}
//软件版本号发生改变时调用
@Override
public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){
}
上述代码第一次启动应用,我们会创建这个dzh.db的文件,并且会执行onCreate()里的方法, 创建一个person的表,它有两个字段:主键personId和name字段;接着如果我们修改db的版本号,那么下次启动就会调用onUpgrade()里的方法,这里我们没有去填写方法,感兴趣的小伙伴可以试一下!这就是创建数据库的模板代码!
5、实现增删改查
本项目使用Android给我们提供的操作数据库的一些API方法,先将它们集成在ContactsDao中,然后在增删改查四个Activity中,直接调用对应方法即可。下面教大家如何使用数据库进行增删改查操作:
- 首先打开数据库,想要访问数据库,第一步肯定先打开。
//打开数据库
public void open() throws SQLException {
myDBOpenHelper=new MyDBOpenHelper(context);
try {
sqLiteDatabase=myDBOpenHelper.getWritableDatabase();
}catch (SQLException e){
sqLiteDatabase=myDBOpenHelper.getReadableDatabase();
}
}
- 有开就有关,在操作完数据库后记得关闭数据库。
//关闭数据库
public void close(){
if(sqLiteDatabase!=null){
sqLiteDatabase.close();
sqLiteDatabase=null;
}
}
- 添加数据,想要添加数据就是通过values的键值对进行插入数据。
//添加联系人
public long addContacts(Contacts c){
//先创建集合对象
ContentValues values=new ContentValues();
//插入键值对
values.put("name",c.name);
values.put("phone",c.phone);
return sqLiteDatabase.insert("contacts",null,values);
}
- 删除数据,肯定是根据主键来删除对应的记录,用的是where约束。
//删除联系人
public int deleteContacts(Contacts c){
return sqLiteDatabase.delete("contacts","name=?",new String[]{String.valueOf(c.name)});
}
- 修改数据,也是通过where约束找到对应键的记录,然后修改它的其他非键属性。
//修改联系人
public int updateContacts(Contacts c){
ContentValues value=new ContentValues();
value.put("phone",c.phone);
return sqLiteDatabase.update("contacts",value,"name=?",new String[]{String.valueOf(c.name)});
}
- 查询数据,使用cursor游标,从第一行遍历到最后一行,在遍历每一行记录中,获得到每个字段的值,这样就获取到所有对象的数据了。
//根据姓名查找联系人
public Contacts getContacts(String name){
Cursor cursor=sqLiteDatabase.query("contacts",null,"name=?",new String[]{name},null,null,null);
Contacts contacts=new Contacts();
while(cursor.moveToNext()){
contacts.name=cursor.getString(cursor.getColumnIndex("name"));
contacts.phone=cursor.getString(cursor.getColumnIndex("phone"));
}
return contacts;
}
四、项目效果
通讯录的运行演示视频如下:
Android Studio实现一个简单的通讯录
五、项目总结
本次通讯录项目主要考验学生对于SQLite数据库的使用,还是比较基础的,刚接触Android不久的同学只要动手打一遍就掌握了。这些数据库知识点在今后的Android项目中会经常使用,因此希望大家能够熟练掌握SQLite的使用,方便后续开发项目。
六、源码下载
点击右侧链接,即可下载源码:Android Studio实现通讯录项目
还可以关注我的公众号《萌新加油站》,后台回复:通讯录
这凡尘到底有什么可留恋的?
原来,都是这些小欢喜啊。
它们在我的生命里唱着歌,跳着舞。
活着,也就成了一件特别让人不舍的事情。
2016.3.12 17:34 YXN