Android中使用数据库

SQLiteDatabase和ContentProvider为我们提供一下函数

query()  //查询
insert() //插入
delete()  //删除
update()  //更新
//参数和返回值我没有写

数据库建库升级等原则

private final class DatabaseHelper extends SQLiteOpenHelper {
        public DatabaseHelper(final Context context) {
            super(context, DB_NAME, null, DB_VERSION);
        }
 
        /**
        * 1-->2 add header table
        * 2-->3 update info
        * 3--> update info haha
        *
        */
        public static final int DB_VERSION = 4;
        public static final String DB_NAME = "download";
 
        /**
         * Creates database the first time we try to open it.
         */
        @Override
        public void onCreate(final SQLiteDatabase db) {
            if (Constants.LOGVV) {
                Log.v(Constants.TAG, "populating new database");
            }
            onUpgrade(db, 0, DB_VERSION);
        }
 
        /**
         * Updates the database format when a content provider is used
         * with a database that was created with a different format.
         *
         * Note: to support downgrades, creating a table should always drop it first if it already
         * exists.
         */
        @Override
        public void onUpgrade(final SQLiteDatabase db, int oldV, final int newV) {
 
            for (int version = oldV + 1; version <= newV; version++) {
                upgradeTo(db, version);
            }
        }
 
        /**
         * Upgrade database from (version - 1) to version.
         */
        private void upgradeTo(SQLiteDatabase db, int version) {
            switch (version) {
                case 1:
                    createDownloadsTable(db);
                    break;
                case 2:
                    createHeadersTable(db);
                    break;
                case 3:
                    addColumn(db, DB_TABLE, Downloads.Impl.COLUMN_IS_PUBLIC_API,
                              "INTEGER NOT NULL DEFAULT 0");
                    addColumn(db, DB_TABLE, Downloads.Impl.COLUMN_ALLOW_ROAMING,
                              "INTEGER NOT NULL DEFAULT 0");
                    addColumn(db, DB_TABLE, Downloads.Impl.COLUMN_ALLOWED_NETWORK_TYPES,
                              "INTEGER NOT NULL DEFAULT 0");
                    break;
                case 103:
                    addColumn(db, DB_TABLE, Downloads.Impl.COLUMN_IS_VISIBLE_IN_DOWNLOADS_UI,
                              "INTEGER NOT NULL DEFAULT 1");
                    makeCacheDownloadsInvisible(db);
                    break;
                case 4:
                    addColumn(db, DB_TABLE, Downloads.Impl.COLUMN_BYPASS_RECOMMENDED_SIZE_LIMIT,
                            "INTEGER NOT NULL DEFAULT 0");
                    break;
                default:
                    throw new IllegalStateException("Don‘t know how to upgrade to " + version);
            }
        }

以上代码是摘自android 中的DownloadProvider的DatabaseHelper代码。我在这里主要是像推荐这种数据库的建表,最初接触这种建表方式是在以前阅读DownloadManager的时候发现,发现android中这种设计真的是非常精妙。这种方式,方便数据库的升级,在update数据库和create数据库的时候,可以共用建表,修改数据表的代码,同时可以清晰看到数据库的变化。

同时建议,在修改数据库版本的时候,在版本号上面增加注释,写上数据库升级的内容,方便自己以后看到数据库的变化,以及其他人在看代码时候,了解到数据库的变化。

数据库建表和数据存储建议

一些简单的配置文件,不建议存到数据库,存到sharepreference中,方便存取,同时也提高访问速度。

文件,图片等绝对不要存到数据库,存储文件路径到数据库中即可。

一些很复杂的数据,建议直接转成json存到数据库即可。一些缓存也可以这样存储。

其他要说的

数据库操作时候,不要在主线程操作。这是耗时操作,容易造成ANR.

在进行数据库中的数据显示时候,建议配合CursorLoader使用,这是android提供的异步数据加载,同时会在数据变化时候,自动重新刷新数据。

时间: 2024-08-11 08:03:21

Android中使用数据库的相关文章

android中SQLite数据库的增删改查

1.数据库帮助类PersonSQLiteOpenHelper package com.wzw.sqllitedemo.db; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper

Android中 与数据库有关的两个废除的方法

占没有查到替换的方法,先记着! The method startManagingCursor(Cursor) from the type Activity is deprecated The constructor SimpleCursorAdapter(Context, int, Cursor, String[], int[]) is deprecated Android中 与数据库有关的两个废除的方法,布布扣,bubuko.com

android中的数据库操作(转)

android中的数据库操作 android中的应用开发很难避免不去使用数据库,这次就和大家聊聊android中的数据库操作. 一.android内的数据库的基础知识介绍 1.用了什么数据库   android中采用的数据库是SQLite这个轻量级的嵌入式开源数据库,它是用c语言构建的.相关简介可以从链接查看. 2.数据库基本知识观花   对于一些和我一样还没有真正系统学习数据库技术的同学来说,把SQL92标准中的一些基本概念.基本语句快速的了解一下,是很有必要的,这样待会用Android的da

使用adb命令查看android中的数据库

在采用数据库操作时,经常会出现查询或删除等操作语句执行失败,但是有找不到具体原因.下面将介绍一种命令行方式进行数据库操作,来验证android中的数据库操作语句是否正确等. 具体操作步骤如下: (1)进入到控制台中,输入adb shell,进入到命令模式的环境中: (2)输入命令:cd /data/data/ (3)输入命令:cd com.android.*** ,进入你所在的数据库文件(其中,com.android.***是你的数据库所在文件): (4)可以使用ls -l 命令查看当前目录中的

android中的数据库操作【转】

http://blog.csdn.net/nieweilin/article/details/5919013 android中的数据库操作 android中的应用开发很难避免不去使用数据库,这次就和大家聊聊android中的数据库操作. 一.android内的数据库的基础知识介绍 1.用了什么数据库   android中采用的数据库是SQLite这个轻量级的嵌入式开源数据库,它是用c语言构建的.相关简介可以从链接查看. 2.数据库基本知识观花   对于一些和我一样还没有真正系统学习数据库技术的同

Android中SQLite数据库小计

2016-03-16 Android数据库支持 本文节选并翻译<Enterprise Android - Programing Android Database Applications for the Enterprise>.学习目标: 学习Android对SQL的支持. 理解在Java中使用SQL——通过SQLiteDatabase类. 创建数据库——SQLiteOpenHelper类. 理解loaders.cursors和adapters. 为了在程序中使用本地的,结构化的数据,需要完成

Android中SQLite数据库的简单使用

File file = new File("hah.txt"); //只是创建了一个对象file, file指向了hah.txt这个文件,hah.txt这个文件可能存在,也可能不存在.如果文件不存在,则不会被创建. 必须要有文件输出流对文件进行了写的操作,文件才会被创建. 游标:在访问数据库中表结构时,想访问表中的某一行的时候,数据库内部有一个快速的定位方式,这个定位方式是通过索引来实现的.游标相当于数组的指针,通过游标的上下移动来查找数据. 在Android中使用SQLite数据库,

Android中当数据库需要更新时我们该怎么办?

问题:Android数据库更新并保留原来的数据如何实现 Andoird的SQLiteOpenHelper类中有一个onUpgrade方法.帮助文档中只是说当数据库升级时该方法被触发.经过实践,解决了我一连串的 疑问:1. 帮助文档里说的"数据库升级"是指什么?你开发了一个应用,当前是1.0版本.该程序用到了数据库.到1.1版本时,你在数据库的某个表中增加了一个字段.那么软件1.0版本用的数据库在软件1.1版本就要被升级了(当然这里的升级包括两个概念,一个是应用升级还有就是数据库升级)

Android中Sqlite数据库多线程并发问题

最近在做一个Android项目, 为了改善用户体验,把原先必须让用户"等待"的过程改成在新线程中异步执行.但是这样做遇到了多个线程同时需要写Sqlite数据库,导致操作数据库失败. 本人对Java并不熟悉,只接触了2个多月(纯粹为了Android项目, 才开始接触JAVA), 在网上搜了一下, 发现JAVA在线程同步方面提供的功能相对于C#真少,只找到synchronized关键字, 而且还不提供timeout机制, 不过经过测试, 至少解决了目前的需求. 问题需求: 1. Andro