• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > (试笔)一、Android四大框架之ContentProvider的学习与运用,实现SQLite的增删改查。,安卓sqlite增删改查

(试笔)一、Android四大框架之ContentProvider的学习与运用,实现SQLite的增删改查。,安卓sqlite增删改查

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了(试笔)一、Android四大框架之ContentProvider的学习与运用,实现SQLite的增删改查。,安卓sqlite增删改查等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

(试笔)一、Android四大框架之ContentProvider的学习与运用,实现SQLite的增删改查。,安卓sqlite增删改查


本文系原创博客,文中不妥烦请指出,如需转载摘要请注明出处!

 

ContentProvider的学习与运用

Alpha Dog

2016-04-13  10:27:06

 

 

  首先,项目的地址:https://github.com/DarkPointK/MyContentProvider.git。

  网上对于Android的Content Provider框架以及SQLite这款轻量级的嵌入式数据库的介绍有很多,我不再复述,在此我将着重于如何实现对数据库的操作。

  工作之余开始系统性的自主学习,在阅读了网络上很多大牛的各类技术文章教程后,想试着写一篇属于自己的博客,以记录一些心得成果还可给其他正在学习的朋友一点帮助,而对于文中存在的不妥之处还烦请指出。

  这是一个布局很简单的例子,主要内容在于后台对一个SQLite表的增删改查一系列操作。

 

 

  • “增”:进入应用时“删”“改”按钮不可用,在ET中输入想要添加的字符串后点击“增”弹出新增数据的URI(关于URI的介绍可以通过这片不错的文章了解:http://www.cnblogs.com/linjiqin/archive/2011/05/28/2061396.html);
  • “查”:会根据ET中输入的文字在表中搜索并将搜索到的行的_id显示在TV上,此时“删”“改”按钮变成可用;
  • “删”:被点击后也将使这两按钮不可用,并删除TV中显示的ID的行,在下次点击“查”并查得数据时按钮又被启用;
  • “改”:当查询到数据并在TV中显示ID时可以在ET中输入新的字符串,点击按钮即可改变相应ID行的数据为此字符串并会刷新搜索队列。

  而数据库的表在被创建后会存在于/data/data/package_name/databases文件夹中,如有需要在windows环境下查看表可以利用AS的Device Monitor导出:

 

  我们建立一个自己的项目在AS中,在这个项目中我们至多需要3个类,分别为:继承自SQLiteOpenHelper的类用于直接对数据库操作,继承自ContentProvider的类会被用于决定以何种方式操作数据库,然后就是我们的Activity。

  1.1继承自SQLiteOpenHelper的StringDataBase类:

  在继承SQLiteOpenHelper后我们需要重写它的onCreate()方法和onUpgrade()方法并且实现构造方法。当StringDataBase被初始化时,其构造方法将提交数据库名及其版本号给父类的方法得到处理。首次打开数据库onCreate()方法会被调用将会处理SQL_CREATE字串中的SQL语句,创建数据库得到一个“string”表。当版本号得到提升将调用onUpgrade()方法。

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteQueryBuilder;

import java.sql.SQLException;

/**
 * Created by Alpha Dog on 2016/4/8.
 */
public class StringDataBase extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "StringDatabase";
    private static final String TABLE_NAME = "string";
    private static final String KEY_NAME = "str";

    private static final String SQL_CREATE =
            "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "(_id INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_NAME + " TEXT)";
    private static final String SQL_DROP = "DROP TABLE IS EXISTS" + TABLE_NAME;

    public StringDataBase(Context context) {
        super(context, DATABASE_NAME, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(SQL_CREATE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL(SQL_DROP);
        onCreate(db);
    }

}

 

  重写完这两个方法后,开始着手完善将会被StringProvider类用到的所有对数据库增删改查操作的方法。

  在这一阶段,你可能会发现这里对数据库的操作都是通过以getWritableDataBase()方法获得一个可以操作数据库的SQLiteDatabase实例,且有读写权(此外,有getReadableDatabase()方法可获得只读权实例)。在获得SQLiteDatabase的实例后,调用相应的方法并将返回的结果作为返回值,当在StringProvider类中得到这些返回值时,可以进行下一步的处理。

public long addString(ContentValues values) throws SQLException {

        long id = getWritableDatabase().insert(TABLE_NAME, "", values);
        if (id <= 0) {
            throw new SQLException("Failed to add String");
        }

        return id;
    }

    public int deleteString(String id) {
        if (id == null) {
            return getWritableDatabase().delete(TABLE_NAME, null, null);
        } else {
            return getWritableDatabase().delete(TABLE_NAME, "_id=?", new String[]{id});
        }

    }

    public int updateString( ContentValues values,String id) {
        return getWritableDatabase().update(TABLE_NAME,values,"_id=?", new String[]{id});
    }

    public Cursor getString(String[] projection, String selection, String[] selectionArgs, String sortOrder) {

        SQLiteQueryBuilder sqb = new SQLiteQueryBuilder();
        sqb.setTables(TABLE_NAME);

        if (sortOrder == null || sortOrder == "") {
            sortOrder = "_id";
        }

        return sqb.query(getReadableDatabase(), projection, selection, selectionArgs, null, null, sortOrder);
    }

 

   对于SQLiteDatabase及SQLiteQueryBuilder在这里调用到的那些增删改查方法的参数列表有必要在这里细说:

    • getWritableDatabase().insert (String table, String nullColumnHack, ContentValues values)  第一个参数为要操作的表名;第三个参数类似于需要插入的Map,键为列名,值为值;第二个参数不为空时,当values的值为空将会在指定
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • (试笔)一、Android四大框架之ContentProvider的学习与运用,实现SQLite的增删改查。,安卓sqlite增删改查

相关文章

  • 2017-05-26Andriod中Style/Theme原理以及Activity界面文件选取过程浅析
  • 2017-05-26VMware中ubuntu忘记密码的解决办法(转)
  • 2017-05-26JSON解析和XML解析对比,JSON解析XML解析
  • 2017-05-26『原创』手把手教你搭建一个实用的油耗App(一),油耗app
  • 2017-05-26Android仿联系人列表分组悬浮列表实现,自定义PinnedHeaderListView实现
  • 2017-05-26Android学习笔记(26):Toast提示信息框浅析
  • 2017-05-26安卓当下最流行的吸顶效果的实现(转),安卓当下
  • 2017-05-26linux tcp GSO和TSO实现
  • 2017-05-26App引导界面,可以这么玩
  • 2017-05-26【React Native开发】React Native控件之ProgressBarAndroid进度条讲解(12)

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android中对Handle机制的理解
    • Android阻止AlertDialog关闭,androidalertdialog
    • Android自定义控件(二),android自定义控件
    • Linux设备模型之input子系统详解
    • Android,androidstudio
    • Linux之使用NTP服务管理/同步服务器时间
    • 新版mysql搭建多线程主从复制
    • Android Doze模式源码分析,androiddoze
    • android入门,看这一本书就够了,android入门,
    • Fiddler 手机抓包 手机联网异常解决方案,fiddler解决方案

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有