博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android学习---数据库的增删改查(sqlite CRUD)
阅读量:7036 次
发布时间:2019-06-28

本文共 7164 字,大约阅读时间需要 23 分钟。

上一篇文章介绍了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
findAllPerson(){ List
personList = new ArrayList
(); 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(配置测试环境,看加粗部分)

测试类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/# lstest.db

3)使用sqlite3打开test.db

# sqlite3 test.db    SQLite version 3.5.9Enter ".help" for instructions sqlite> .databaseseq  name             file                                                      ---  ---------------  ----------------------------------------------------------0    main             /data/data/com.amos.android_database/databases/test.db  sqlite> .tableandroid_metadata  person

查看其中的数据:

sqlite> select * from person;1|amsoli0|13188887002|amsoli1|13188887013|amsoli2|13188887024|amsoli3|13188887035|amsoli4|13188887046|amsoli5|13188887057|amsoli6|13188887068|amsoli7|13188887079|amsoli8|1318888708.........

 

 

注:

i:关于Sqlite的教程可以参考:

ii:关于本方源代码可以查看:

 

 

转载地址:http://xhjal.baihongyu.com/

你可能感兴趣的文章
SQL 语句技巧--聚合函数的灵活使用
查看>>
Java调用SQL Server的存储过程详解
查看>>
springmvc - SqlSession
查看>>
Json 简介
查看>>
zip()方法对数组进行重新组合
查看>>
60-高级路由:IPv6 静态路由
查看>>
40. Combination Sum II
查看>>
关于适配这件小事的前世今生
查看>>
稳压电源中的谐振变频器的特征
查看>>
修改Centos7的网卡名称ens160、eno192改为eth0、eth1
查看>>
VC+ADO 连接ACCESS和SQL SERVER的方法
查看>>
LOGO設計價格 之 全面解說和如何選擇 【原創】
查看>>
Python介绍与特点(自学python知识整理)
查看>>
stimulsoft入门教程:报表与页面上的图表(一)
查看>>
数字货币支付时代即将来袭
查看>>
系统优化脚本(此脚本为原始脚本,未按照shell规范写)
查看>>
Bootstrap常用样式的代码
查看>>
思科 典型QoS配置案例
查看>>
电路交换、报文交换、数据交换的区别
查看>>
plsql连接oracle方法
查看>>