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#中泛型的使用的文章,因此加上本人的理解以及四级没过的英语水平斗胆给大伙进行了翻译,当然在翻译的过程中发 ...
随机推荐
- Android基础
今天学习Android基本环境及基础知识,正确来说是重新温习Android知识,因为初次接触Android开发已经是两年前的事,如今又回到Android开发依然那么熟悉,依然可以让人很兴奋,Andro ...
- cmd执行mysql操作
(以下已安装到本机的mysql为例) 登录mysql数据库,如果没有在环境变量配置path到mysql中的bin目录,需要手动进入该目录中 执行:mysql -u用户名 -p密码 (注意:只要进入了m ...
- js面向对象的实现(example 二)
//这个方法和上篇文章(js面向对象的实现(example 一))中的方法类似,但是更为简洁 //通过函数赋值的方式来构造对象 //同样通过闭包的方式来封装对象及内部变量 (function () { ...
- 三维场景中使用BillBoard技术
三维场景中对于渲染效果不是很精致的物体可以使用BillBoard技术实现,使用该技术需要将物体实时朝向摄像机,即计算billboard的旋转矩阵M. 首先根据摄像机位置cameraPos和billBo ...
- cs11_c++_lab4a
SparseVector.hh class SparseVector { private: //结构体不一定会用到,不用初始化 struct node { int index; int value; ...
- css定位和浮动
1.css中一切元素皆为框.div.p.h1等为块框:span.strong等为行内框,(在文本中每一行会被自动默认为行框,行框和行内框是不一样的概念).通过display可以改变框的类型,行内框通过 ...
- "System Protection" is disabled in Win10 default settings
We could find some important clue in Restore Point because "System Protection" of volume C ...
- PHP5.3、PHP5.4下安装ZendOptimizer或Zend Guard Loader的方法
现在很多PHP程序都需要ZendOptimizer环境,但是ZendOptimizer在PHP5.2之后已经被支持,那怎么办,Zend也不会这么做,原来PHP5.3开始ZendOptimizer正式改 ...
- Nginx的安装配置 例子
1.下载 2.解压 3.运行 a.双击nginx.bat b.启动Nginx 会发现进程里面已经开始运行 4.配置 a.双击打开配置文件夹里面的nginx.conf b.修改 upstream tee ...
- vs2013单元测试练习过程
1.打开VS2013 --> 新建一个项目.这里我们默认创建一个控制台项目.取名为UnitTestDemo 2.在解决方案里面新增一个单元测试项目.取名为UnitTestDemoTest 创建完 ...