Android学习---数据库的增删改查(sqlite CRUD)
上一篇文章介绍了sqlite数据库的创建,以及数据的访问,本文将主要介绍数据库的增删改查.
下面直接看代码:
MyDBHelper.java(创建数据库,添加一列phone)
package com.amos.android_database; import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log; /**
* Created by amosli on 14-6-10.
*/
public class MyDBHelper extends SQLiteOpenHelper{
/**
* 创建数据库的构造方法
* @param context 应用程序上下文
* name 数据库的名字
* factory 查询数据库的游标工厂一般情况下用sdk默认的
* version 数据库的版本一般大于0
*/
public MyDBHelper(Context context) {
super(context, "test.db", null, 4);
}
private String tag = "MyDBHelper.class";
/**
* 在数据库第一次创建时会执行
* @param db
*/
@Override
public void onCreate(SQLiteDatabase db) {
Log.d(tag, "onCreate.....");
//创建一个数据库
db.execSQL("create table person (personid integer primary key autoincrement ,name varchar(30) )"); } /**
* 更新数据的时候调用的方法
* @param db
* @param oldVersion
* @param newVersion
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.d(tag,"onUpgrade*******");
//增加一列
db.execSQL("alter table person add phone varchar(13) null"); } }
PersonDao.java(增删查改都在这了)
package com.amos.android_database.dao; import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import com.amos.android_database.MyDBHelper;
import com.amos.android_database.domain.Person; import java.util.ArrayList;
import java.util.List; /**
* Created by amosli on 14-6-11.
*/
public class PersonDao {
private MyDBHelper myDBHelper;
public String tag = "PersonDao.class"; //在new出来的时候就实现myDBHelper初始化
public PersonDao(Context context) {
myDBHelper = new MyDBHelper(context);
} //增加
public void addPerson(String name, String phone) {
SQLiteDatabase database = myDBHelper.getWritableDatabase();
//先判断数据库是否可用
if (database.isOpen()) {
//执行插入操作
//database.execSQL("insert into person (name,phone) values('"+name+"','"+phone+"')"); //推荐如下写法
database.execSQL("insert into person (name,phone) values(?,?)", new Object[]{name, phone});
database.close();
}
} //查找
public boolean findPerson(String phone) {
boolean result = false;
SQLiteDatabase database = myDBHelper.getReadableDatabase();
if (database.isOpen()) {
//database.execSQL("select * from phone='"+phone+"'");
Cursor cursor = database.rawQuery("select * from person where phone=?", new String[]{phone});
if (cursor.moveToFirst()) {//游标是否移动到下一行,如果是,那说明有数据返回
Log.d(tag, "count:" + cursor.getColumnCount());
int nameIndex = cursor.getColumnIndex("name");
Log.d(tag, "name:" + cursor.getString(nameIndex));
cursor.close();
result = true;
} else {
result = false; }
database.close();
}
return result;
} //删除一条数据
public void deletePerson(String phone) {
SQLiteDatabase database = myDBHelper.getWritableDatabase();
if (database.isOpen()) {
database.execSQL("delete from person where phone=?", new Object[]{phone});
}
database.close();
} //更新一条数据
public void updatePerson(String phone, String newName, String newPhone) {
SQLiteDatabase database = myDBHelper.getWritableDatabase();
if (database.isOpen()) {
database.execSQL("update person set name=?,phone=? where phone=?", new Object[]{newName, newPhone, phone});
}
database.close();
} //查找所有person
public List<Person> findAllPerson(){
List<Person> personList = new ArrayList<Person>();
SQLiteDatabase database = myDBHelper.getReadableDatabase();
if(database.isOpen()){
Cursor cursor = database.rawQuery("select * from person ", null);
while(cursor.moveToNext()){
int nameIndex = cursor.getColumnIndex("name");
int phoneIndex = cursor.getColumnIndex("phone");
String name = cursor.getString(nameIndex);
String phone = cursor.getString(phoneIndex); Person person = new Person(name,phone);
Log.d(tag,person.toString()); personList.add(person);
} }
database.close();
return personList;
} }
注:
1.由上面的方法可以看到,查找数据主要调用的是rawQuery方法,而增删改都是通过execSQL执行数据的
2.一定要注意,使用database前一定要判断是否可用,使用database.isOpen();
3.使用完database一定要注意关闭数据库,database.close();不然会报异常!
AndroidManifest.xml(配置测试环境,看加粗部分)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.amos.android_database"
android:versionCode="1"
android:versionName="1.0">
<instrumentation android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.amos.android_database"/>
<uses-sdk android:minSdkVersion="7"/>
<application android:label="@string/app_name">
<uses-library android:name="android.test.runner"/>
<activity android:name="MyActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
测试类PersonDaoTest.java
package com.amos.android_database.test; import android.test.AndroidTestCase;
import android.util.Log;
import com.amos.android_database.dao.PersonDao;
import com.amos.android_database.domain.Person; /**
* Created by amosli on 14-6-11.
*/
public class PersonDaoTest extends AndroidTestCase{
private String tag = "PersonDaoTest.class"; public void testAdd() throws Exception{
PersonDao personDao = new PersonDao(getContext());
for(int i=0;i<100;i++){
personDao.addPerson("amsoli"+i,"131888870"+i);
}
Log.d(tag,"添加一些新用户");
}
public void testFind(){
PersonDao personDao = new PersonDao(getContext());
boolean result = personDao.findPerson("13188887776");
assertEquals(true,result);
}
public void testDelete(){
PersonDao personDao = new PersonDao(getContext());
personDao.deletePerson("13188887778");
} public void testUpdate(){
PersonDao personDao = new PersonDao(getContext());
personDao.updatePerson("13188887776","hi_amos","13188887775");
}
public void testFindAllPerson(){
PersonDao personDao = new PersonDao(getContext());
for (Person person : personDao.findAllPerson()) {
System.out.println(person.toString());
}
}
}
由于要反复测试,所以如果将数据库反复导出会非常麻烦,下面可以使用命令进行查看数据库中的数据:
1)进行命令行模式,注意是在platform-tools目录下,而非tools目录
sdk/platform-tools$ ./adb shell
2)使用cd命令切换到test.db的目录
#cd /data/data/com.amos.android_database/databases/
# ls
test.db
3)使用sqlite3打开test.db
# sqlite3 test.db
SQLite version 3.5.
Enter ".help" for instructions
sqlite> .database
seq name file
--- --------------- ----------------------------------------------------------
main /data/data/com.amos.android_database/databases/test.db sqlite> .table
android_metadata person
查看其中的数据:
sqlite> select * from person;
|amsoli0|
|amsoli1|
|amsoli2|
|amsoli3|
|amsoli4|
|amsoli5|
|amsoli6|
|amsoli7|
|amsoli8|
.........
注:
i:关于Sqlite的教程可以参考:http://www.w3cschool.cc/sqlite/sqlite-tutorial.html
ii:关于本方源代码可以查看:https://github.com/amosli/android_basic/tree/database
Android学习---数据库的增删改查(sqlite CRUD)的更多相关文章
- Android下数据库操作——增删改查
Android下数据库第一种方式增删改查 1.创建一个帮助类的对象,调用getReadableDatabase方法,返回一个SqliteDatebase对象 2.使用SqliteDat ...
- 安卓 Android 简单数据库(增删改查)
<Button android:id="@+id/delete_btn" android:layout_width="wrap_content" andr ...
- Android中Sqlite数据库进行增删改查
今天这篇文章写Sqlite数据库,通过一个小案例来完整讲一下数据库常见的CRUD操作. 先对知识点总结: SQLite数据库 轻量级关系型数据库 创建数据库需要使用的api:SQLiteOpenHel ...
- Android 系统API实现数据库的增删改查和SQLite3工具的使用
在<Android SQL语句实现数据库的增删改查>中介绍了使用sql语句来实现数据库的增删改查操作,本文介绍Android 系统API实现数据库的增删改查和SQLite3工具的使用. 系 ...
- Android SQL语句实现数据库的增删改查
本文介绍android中的数据库的增删改查 复习sql语法: * 增 insert into info (name,phone) values ('wuyudong','111') * 删 delet ...
- MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- Mybatis学习笔记(二) 之实现数据库的增删改查
开发环境搭建 mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包.这些软件工具均可以到各自的官方网站上下载 ...
- Django基础学习四_数据库的增删改查
今天主要学习两个东西 1.如何对数据库做增删改查 2.如果将数据库中的数据用html的方式返回到前台 一.对数据库中增删改查操作 1.首先需要先见表,见表的方法我们在“http://www.cnblo ...
- [译]聊聊C#中的泛型的使用(新手勿入) Seaching TreeVIew WPF 可编辑树Ztree的使用(包括对后台数据库的增删改查) 字段和属性的区别 C# 遍历Dictionary并修改其中的Value 学习笔记——异步 程序员常说的「哈希表」是个什么鬼?
[译]聊聊C#中的泛型的使用(新手勿入) 写在前面 今天忙里偷闲在浏览外文的时候看到一篇讲C#中泛型的使用的文章,因此加上本人的理解以及四级没过的英语水平斗胆给大伙进行了翻译,当然在翻译的过程中发 ...
随机推荐
- 11,SFDC 管理员篇 - 报表和数据的可视化
1,Report Builder 1,每一个report type 都有一个 primay object 和多个相关的object 2,Primary object with related obje ...
- (转)对《30个提高Web程序执行效率的好经验》的理解
阅读了博客园发布的IT文章<30个提高Web程序执行效率的好经验>,这30条准则对我们web开发是非常有用的,不过大家可能对其中的一些准则是知其然而不知其所以然. 下面是我对这些准则的理解 ...
- javascript call与apply关键字的作用
apply接受两个参数.第一个参数指定函数体内this对象的指向,第二个参数为一个带下标的集合. call则是apply的语法糖,如果参数数量固定,则可以不用带下标的集合传第二个参数. 1 2 3 4 ...
- 自己用C语言写单片机PIC18 serial bootloader
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). HyperBootlo ...
- 手持机(Android)开发应用总结
对于首次接触android的我,刚接到android开发的命令时,自己完全不懂任何android技术,可是由于项目的开发时间周期很短,必须强迫自己即学即用,到了最后才发现,技术其实只是工具,重要的是一 ...
- php工作笔记7-摇动手机,发出请求响应
1.调用
- JAVA EE中session的理解
转自[互动百科]http://www.baike.com/wiki/Session Session Session:在计算机中,尤其是在网络应用中,称为“会话”.Session直接翻译成中文比较困 ...
- VUE 入门笔记
前端的MVVM概念今年来也算是如火如荼,了解完 MVVM的概念,也该找个去尝试下 首先我先试了下 国内小而美的 VUE 试着照着文档敲出入门文件,内容都在注释里 <!doctype html&g ...
- NRF51822之IIC(MEMS_LIS2DH12)
在上篇介绍了OLED的II以写操作为主,没有进行读取操作.所以在现再补充读取的操作. 我在此以LIS2DH为例子 uint8_t temp; lis2dh_read_registers(LIS2DH_ ...
- asp.net 查询好的数据后 排序显示在桌面上
select top 10 * ,row()_number over ( order by 字段 desc) as rownum from 表 row()_number;简单的说row_numbe ...