热门标签 | 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() 方法释放游标资源;



推荐阅读
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文介绍如何使用 NSTimer 实现倒计时功能,详细讲解了初始化方法、参数配置以及具体实现步骤。通过示例代码展示如何创建和管理定时器,确保在指定时间间隔内执行特定任务。 ... [详细]
  • 深入理解 Oracle 存储函数:计算员工年收入
    本文介绍如何使用 Oracle 存储函数查询特定员工的年收入。我们将详细解释存储函数的创建过程,并提供完整的代码示例。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
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社区 版权所有