热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

android数据库的存储上限_Android本地存储——SQLite数据库

数据库的创建与升级Android中专门提供了SQLiteOpenHelper帮助类,帮助我们创建和升级数据库。SQLiteOpenHelper是一个抽象类࿰

数据库的创建与升级

Android中专门提供了SQLiteOpenHelper帮助类,帮助我们创建和升级数据库。SQLiteOpenHelper是一个抽象类,要想使用它,我们必须创建一个自己的帮助类。并重写onCreate()和onUpgrade()l两个抽象方法,从而对它进行使用。

SQLiteOpenHelper有两个构造方法:

SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory, int version)

SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory, int version,DatabaseErrorHandler errorHandler)

/*

第一个参数为Context

第二个参数为数据库名,创建数据库时使用此名字

第三个参数允许我们在查询数据时返回一个自定义Cursor

第四个参数表示数据库当前的版本号,用于对数据库进行升级

第五个参数用于处理数据库的异常

*/

SQLiteOpenHelper中的方法:

返回类型

方法

void

close() 关闭所有数据库对象(Close any open database object.)

String

getDatabaseName() 获取使用构造函数时传入的数据库名

SQLiteDatabase

getReadableDatabase() 打开或创建一个只读的数据库对象

SQLiteDatabase

getWritableDatabase() 打开或创建一个可读写的数据库对象

abstract void

onCreate(SQLiteDatabase db) 当数据库创建时调用

void

onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) 当数据库降级时调用

void

onOpen() 当数据库打开时调用

abstract void

onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 当数据库升级时调用

void

setWriteAheadLoggingEnabled(boolean enabled) 是否打印预写式日志

数据库文件通常存放在/data/data/packagename/databases/目录下

数据库只有在getReadableDatabase()或者getWritableDatabase()被调用时才真正被打开或创建。

onCreate()在数据库被创建时调用,重写这个方法创建表和表的初始种群

@Override

public void onCreate(SQLiteDatabase db){

db.execSQL(SQL_COMMAND);

//SQL_COMMAND为sql语句

}

当创建SQLiteOpenHelper对象时,需指定一个version参数,当参数高于之前的版本号时调用onUpgrade(),当参数低于之前的版本号时调用onDowngrade()

代码实现:

public class MyDatabaseHelper extends SQLiteOpenHelper {

public static final String CREATE_BOOK = "create table Book("

+ "id integer primary key autoincrement, "

+ "author text, "

+ "price real, "

+ "pages integer, "

+ "name text)";

public static final String CREATE_CATEGORY ="create table Category ("

+"id integer primary key autoincrement, "

+"category_name text, "

+"category_code integer)";

private Context mContext;

public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {

super(context, name, factory, version);

mContext = context;

}

@Override

public void onCreate(SQLiteDatabase db) {

db.execSQL(CREATE_BOOK);

db.execSQL(CREATE_CATEGORY);

Toast.makeText(mContext, "Create succeeded", Toast.LENGTH_SHORT).show();

}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

db.execSQL("drop table if exists Book");

db.execSQL("drop table if exists Category");

onCreate(db);

}

}

添加数据

添加数据主要有两种方法

1.使用execSQL()方法执行SQL语句,此方法适用于所有不返回结果的SQL语句

String sql = "insert into Book(name,author,pages,price)values(?,?,?,?)",

new String[]{"bookname","zsy","200","5.00"};

db.execSQL(sql);

//

2.使用insert()方法

ContentValues values = new ContentValues();

values.put("name", "The Da Vinci Code");

values.put("author", "Dan Brown");

values.put("pages", 454);

values.put("price", 16.96);

db.insert("Book", null, values);

insert()方法接受3个参数,第一个是表名,第二个用于在未添加数据时给某些可为空的队列复制NULL,一般用不到此功能,传入null即可,第三个为ContentValues对象

更新数据

1.使用execSQL()方法

2.使用updata()方法

SQLiteDatabase db = dbHelper.getWritableDatabase();

ContentValues values = new ContentValues();

values.put("price", 10.99);

db.update("Book", values, "name=?", new String[]{"The Da Vinci Code"});

updata()接受4个参数

表名

ContentValues对象,要更新的数据装在这里

4.约束更新一行或几行的数据,不指定的话默认更新所有行

删除数据

1.使用execSQL()方法

2.使用delete()方法

SQLiteDatabase db = dbHelper.getWritableDatabase();

db.delete("Book", "pages > ?", new String[]{"500"});

delete()接收三个参数

表名

3.约束删除某一行或某几行的数据,默认删除所有行

查询数据

1.使用execSQL()方法

2.使用inquery()方法

query()方法参数

对应SQL部分

描述

table

from_table_name

指定查询的表名

columns

select column1, column2

指定查询的列名

selection

where column = value

指定where的拘束条件

selectionArgs

-

为where中的占位符提供具体的值

groupBy

group by column

指定需要group by的列

having

having column = value

对 group by 后的结果进一步约束

orderBy

order by column1, column2

指定查询结果的排序方式

代码示例:

SQLiteDatabase db = dbHelper.getWritableDatabase();

Cursor cursor = db.query("Book",null,null,null,null,null,null);

if(cursor.moveToFirst()){

do{

String name = cursor.getString(cursor.getColumnIndex("name"));

String author = cursor.getString(cursor.getColumnIndex("author"));

int pages = cursor.getInt(cursor.getColumnIndex("pages"));

double price = cursor.getDouble(cursor.getColumnIndex("price"));

}while(cursor.moveToNext());

}

cursor.close();

不管你如何执行查询,都会返回一个 Cursor,这是 Android 的 SQLite 数据库游标,使用游标,你可以:

通过使用 getCount() 方法得到结果集中有多少记录;

通过 moveToFirst(), moveToNext(), 和 isAfterLast() 方法遍历所有记录;

通过 getColumnNames() 得到字段名;

通过 getColumnIndex() 转换成字段号;

通过 getString(),getInt() 等方法得到给定字段当前记录的值;

通过 requery() 方法重新执行查询得到游标;

通过 close() 方法释放游标资源;



推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
author-avatar
手机用户2602913907
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有