- 浏览: 70492 次
- 性别:
- 来自: 北京
最新评论
概述
SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库引擎。它支持大多数的SQL92标准,并且可以在所有主要的操作系统上运行。SQLite由SQL编译器、内核、后端以及附件组成。
SQLite通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展SQLite的内核变得更加方便。所有SQL语句都被编译成易读的、可以在SQLite虚拟机中执行的程序集。
SQLite可以支持高达2TB大小的数据库,每个数据库都是以单个文件的形式存在,这些数据都是以B-Tree的数据结构形式存储在磁盘上。
在事务处理方面,SQLite通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只有一个可以写入数据。在某个进程或线程想数据库执行写操作之前,必须获得独占锁。在获得独占锁之后,其他的读或写操作将不会再发生。
SQLite采用动态数据类型,当某个值插入到数据库时,SQLite将会检查它的类型,如果该类型与关联的列不匹配,SQLite则会尝试将该值转换成该列的类型,如果不能转换,则该值将作为本身的类型存储,SQLite称这为“弱类型”。但有一个特例,如果是INTEGER PRIMARY KEY,则其他类型不会被转换,会报一个“datatype missmatch”的错误。概括来讲,SQLite支持NULL、INTEGER、REAL、TEXT和BLOB数据类型,分别代表空值、整型值、浮点值、字符串文本、二进制对象。
使用
SQLiteOpenHelper 类
用SQLiteOpenHelper 类中的 getWritableDatabase()和getReadableDatabase()方法可以获得数据库的引用。
通过SQLiteOpenHelper提供的onCreate()和onUpgrade()方法可以对对数据库版本进行管理。onCreate()用于初次使用软件时生成数据库表,onUpgrade()用于升级软件时更新数据库表结构
当调用SQLiteOpenHelper的getWritableDatabase()或者getReadableDatabase()方法获取用于操作数据库的SQLiteDatabase实例的时候,如果数据库不存在,Android系统会自动生成一个数据库,接着调用onCreate()方法。
onCreate()方法在初次生成数据库时才会被调用,在onCreate()方法里可以生成数据库表结构及添加一些应用使用到的初始化数据。
onUpgrade()方法在数据库的版本发生变化时会被调用,一般在软件升级时才需改变版本号,而数据库的版本是由程序员控制的。假设数据库现在的版本是1,由于业务的变更,修改了数据库表结构,这时候就需要升级软件,升级软件时希望更新用户手机里的数据库表结构,为了实现这一目的,可以把原来的数据库版本设置为2,并且在onUpgrade()方法里面实现表结构的更新。当软件的版本升级次数比较多,这时在onUpgrade()方法里面可以根据原版号和目标版本号进行判断,然后做出相应的表结构及数据更新。
SQLiteDatabase类
Android提供了一个名为 SQLiteDatabase的类(SQLiteOpenHelper 类中的 getWritableDatabase()和getReadableDatabase()方法返回这个类的对象)。
SQLiteDatabase类封装了一些操作数据库的API,使用该类可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)操作(这些操作简称为CRUD)。
SQLiteDatabase的学习,应该重点掌握execSQL()和rawQuery()方法。
execSQL()方法可以执行insert、delete、update和CREATE TABLE之类有更改行为的SQL语句;
rawQuery()方法用于执行select语句。
简单示例
第一步:创建DatabaseHelper,它继承SQLiteOpenHelper,并实现了onCreate和onUpgrade方法。
第二步:添加插入方法
在Activity中添加数据
数据库简单的插入操作如上,后续会持续更新数据库相关的信息
转载请注明出处:[url]http://renyuan-1991.iteye.com/blogs/2246715 [/url]
希望爱好编程的小伙伴能加这个群,互相帮助,共同学习。群号: 141877583
SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库引擎。它支持大多数的SQL92标准,并且可以在所有主要的操作系统上运行。SQLite由SQL编译器、内核、后端以及附件组成。
SQLite通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展SQLite的内核变得更加方便。所有SQL语句都被编译成易读的、可以在SQLite虚拟机中执行的程序集。
SQLite可以支持高达2TB大小的数据库,每个数据库都是以单个文件的形式存在,这些数据都是以B-Tree的数据结构形式存储在磁盘上。
在事务处理方面,SQLite通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只有一个可以写入数据。在某个进程或线程想数据库执行写操作之前,必须获得独占锁。在获得独占锁之后,其他的读或写操作将不会再发生。
SQLite采用动态数据类型,当某个值插入到数据库时,SQLite将会检查它的类型,如果该类型与关联的列不匹配,SQLite则会尝试将该值转换成该列的类型,如果不能转换,则该值将作为本身的类型存储,SQLite称这为“弱类型”。但有一个特例,如果是INTEGER PRIMARY KEY,则其他类型不会被转换,会报一个“datatype missmatch”的错误。概括来讲,SQLite支持NULL、INTEGER、REAL、TEXT和BLOB数据类型,分别代表空值、整型值、浮点值、字符串文本、二进制对象。
使用
SQLiteOpenHelper 类
用SQLiteOpenHelper 类中的 getWritableDatabase()和getReadableDatabase()方法可以获得数据库的引用。
通过SQLiteOpenHelper提供的onCreate()和onUpgrade()方法可以对对数据库版本进行管理。onCreate()用于初次使用软件时生成数据库表,onUpgrade()用于升级软件时更新数据库表结构
当调用SQLiteOpenHelper的getWritableDatabase()或者getReadableDatabase()方法获取用于操作数据库的SQLiteDatabase实例的时候,如果数据库不存在,Android系统会自动生成一个数据库,接着调用onCreate()方法。
onCreate()方法在初次生成数据库时才会被调用,在onCreate()方法里可以生成数据库表结构及添加一些应用使用到的初始化数据。
onUpgrade()方法在数据库的版本发生变化时会被调用,一般在软件升级时才需改变版本号,而数据库的版本是由程序员控制的。假设数据库现在的版本是1,由于业务的变更,修改了数据库表结构,这时候就需要升级软件,升级软件时希望更新用户手机里的数据库表结构,为了实现这一目的,可以把原来的数据库版本设置为2,并且在onUpgrade()方法里面实现表结构的更新。当软件的版本升级次数比较多,这时在onUpgrade()方法里面可以根据原版号和目标版本号进行判断,然后做出相应的表结构及数据更新。
SQLiteDatabase类
Android提供了一个名为 SQLiteDatabase的类(SQLiteOpenHelper 类中的 getWritableDatabase()和getReadableDatabase()方法返回这个类的对象)。
SQLiteDatabase类封装了一些操作数据库的API,使用该类可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)操作(这些操作简称为CRUD)。
SQLiteDatabase的学习,应该重点掌握execSQL()和rawQuery()方法。
execSQL()方法可以执行insert、delete、update和CREATE TABLE之类有更改行为的SQL语句;
rawQuery()方法用于执行select语句。
简单示例
第一步:创建DatabaseHelper,它继承SQLiteOpenHelper,并实现了onCreate和onUpgrade方法。
public class DatabaseHelper extends SQLiteOpenHelper { // 数据库版本号 private static final int DATABASE_VERSION = 1; // 数据库名 private static final String DATABASE_NAME = "TestDB.db"; // 数据表名,一个数据库中可以有多个表(虽然本例中只建立了一个表) public static final String TABLE_NAME = "PersonTable"; public DatabaseHelper(Context context, String name, CursorFactory factory, int version, DatabaseErrorHandler errorHandler) { super(context, name, factory, version, errorHandler); } public DatabaseHelper(Context context, String name, CursorFactory factory, int version) { /**context:上下文环境 name:数据库名字 factory:游标工厂(可选) version:数据库模型版本号*/ super(context, name, factory, version); } //重写构造函数 public DatabaseHelper(Context context){ /**context:上下文环境 name:数据库名字 factory:游标工厂(可选) version:数据库模型版本号*/ super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { // 调用时间:数据库第一次创建时onCreate()方法会被调用 // onCreate方法有一个 SQLiteDatabase对象作为参数,根据需要对这个对象填充表和初始化数据 // 这个方法中主要完成创建数据库后对数据库的操作 System.out.println("---------DatabaseHelper onCreate---------"); // 构建创建表的SQL语句(可以从SQLite Expert工具的DDL粘贴过来加进StringBuffer中) StringBuffer sBuffer = new StringBuffer(); sBuffer.append("CREATE TABLE [" + TABLE_NAME + "] ("); sBuffer.append("[_id] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "); //这个字段名字必须是_id而且不管有没有用都不可省略 sBuffer.append("[name] TEXT,"); sBuffer.append("[age] INTEGER,"); sBuffer.append("[info] TEXT)"); // 执行创建表的SQL语句 db.execSQL(sBuffer.toString()); // 即便程序修改重新运行,只要数据库已经创建过,就不会再进入这个onCreate方法 System.out.println("---------DatabaseHelper 创建数据库成功---------"); } @Override public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) { // 调用时间:如果DATABASE_VERSION值被改为别的数,系统发现现有数据库版本不同,即会调用onUpgrade // onUpgrade方法的三个参数,一个 SQLiteDatabase对象,一个旧的版本号和一个新的版本号 // 这样就可以把一个数据库从旧的模型转变到新的模型 // 这个方法中主要完成更改数据库版本的操作 System.out.println("----------DatabaseHelper onUpgrade----------"); db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); onCreate(db); // 上述做法简单来说就是,通过检查常量值来决定如何,升级时删除旧表,然后调用onCreate来创建新表 // 一般在实际项目中是不能这么做的,正确的做法是在更新数据表结构时,还要考虑用户存放于数据库中的数据不丢失 } private void onpen() { System.out.println("--------open databaseHelper-------"); } }
第二步:添加插入方法
public DBManager(Context context){ helper = new DatabaseHelper(context); // 因为getWritableDatabase内部调用了mContext.openOrCreateDatabase(mName, 0, mFactory); //所以要确保context已初始化,我们可以把实例化DBManager的步骤放在Activity的onCreate里 db = helper.getWritableDatabase(); } public void add(List<Person> persons){ db.beginTransaction(); try { for(Person person : persons){ // 带两个参数的execSQL()方法,采用占位符参数.把参数值放在后面,顺序对应. // 一个参数的execSQL()方法中,用户输入特殊字符时需要转义,使用占位符有效区分了这种情况 db.execSQL("INSERT INTO "+DatabaseHelper.TABLE_NAME+" VALUES(null,?,?,?)",new Object[]{person.name,person.age,person.info}); } db.setTransactionSuccessful(); // 设置事务成功完成 System.out.println("设置事务成功完成"); }finally{ db.endTransaction(); // 结束事务(不主动结束事物以上的操作不会生效) System.out.println("endTransaction"); } }
在Activity中添加数据
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //使用数据库 DBManager mydb = new DBManager(this); Person person1 = new Person("张3",38,"是个好"); Person person2 = new Person("张4",48,"是个好人"); Person person3 = new Person("张5",58,"真是个好人"); List<Person> myp = new ArrayList<Person>(); myp.add(person1); myp.add(person2); myp.add(person3); mydb.add(myp); }
数据库简单的插入操作如上,后续会持续更新数据库相关的信息
转载请注明出处:[url]http://renyuan-1991.iteye.com/blogs/2246715 [/url]
希望爱好编程的小伙伴能加这个群,互相帮助,共同学习。群号: 141877583
发表评论
-
通过Url打开app页面并传递参数
2017-12-09 17:56 3978转载请注明出处:http:// ... -
Retrofit+RxJava搭建网络请求和数据解析框架
2017-06-29 18:20 0好久没写博客了,实话说,这一年相比往年可以说没什么进步,工作四 ... -
viewpager指示器
2016-11-08 16:04 0viewpager指示器 实现该需求的几种方法的基本原理和缺点 ... -
Android Studio模板,省去界面重复部分的开发
2016-07-06 16:05 0Android Studio模板,省去界面重复部分的开发 -
android studio 运行java代码
2016-06-21 17:50 2427转载请注明出处: http://renyuan-1991.it ... -
自定义组合控件的总结
2016-06-21 16:27 1554自定义组合控件的总结 转载请注明出处:http://renyu ... -
只显示年月的DatePicker
2016-06-12 17:30 3376转载请注明出处:http://renyuan-1991.ite ... -
Android的约束布局ConstaintLayout
2016-06-24 15:05 9924ConstaintLayout的初次使用总结 转载请注明出处 ... -
Android遮罩层引导页的实现
2016-06-03 16:28 0实现遮罩层引导页可以通过以下几种方式,本文主要记录张洪洋Hig ... -
手势密码
2016-05-24 14:52 0我们公司做的是理财产品,所以手势密码这个东西少不了,在写手势密 ... -
线性布局的权重weight使用详解
2016-01-20 14:29 2439对线性布局中权重的理解 转载请注明出处:http://ren ... -
setBackgroundResource导致Padding失效,settextsize
2016-01-18 19:50 1574通过setBackground设置9 patc ... -
NestedScrolling的使用及ScrollView的惯性滑动
2015-12-08 18:14 21570NestedScrolling的使用及ScrollView的惯 ... -
android-async-http使用和取消请求
2015-10-15 12:06 4995android-async-http使用总结 下载最新的包可以 ... -
触摸屏幕取消键盘
2015-10-13 18:09 1586当点击文本框和发送按钮的时候不需要取消键盘,点击屏幕其他按钮或 ... -
四种方式实现ListView中的倒计时一()
2015-09-29 12:33 0的奋斗奋斗奋斗 -
android 的屏幕适配问题,dp与px的换算
2015-08-08 19:11 1775在进入正题之前先了解 ... -
自定义ViewGroup实现动态创建可换行标签
2015-08-03 15:15 1216转载请注明:http://renyua ... -
Android第三方框架之xListView的使用方法
2014-11-09 19:18 5152==最近向用xListView实现刷新效果,在网上没有找到相关 ...
相关推荐
在Android开发中,SQLite是一个非常重要的组成部分,它是一个轻量级的、开源的、嵌入式的SQL数据库引擎,被广泛用于存储和管理应用程序中的数据。SQLite具有高效、可靠且易于集成的特点,使得它成为Android应用数据...
在这个“sqlite详解项目demo”中,我们将深入探讨如何在Android环境中使用SQLite进行数据库的管理,包括创建数据库、表的增删改查等基本操作。 首先,SQLite在Android中的应用通常涉及到以下几个关键组件: 1. **...
sqlite3使用详解,很详细的,用过多顶顶
在Android应用开发中,SQLite是一个不可或缺的组件,它是一个轻量级的关系型数据库管理系统,用于存储和管理应用程序中的数据。SQLite被广泛应用于Android系统,因为它的高效性、可靠性和易于集成的特点。本教程将...
### Android SQLite 详解 #### 一、SQLite简介 SQLite 是一款用 C 语言编写的开源嵌入式数据库引擎。这款数据库引擎支持 SQL92 的大部分标准,并能够在多种主流操作系统上运行,包括 Windows、Linux 和 macOS 等。...
《数据存储之SQLite详解》 SQLite,作为一款轻量级的数据库引擎,广泛应用于移动设备、嵌入式系统以及各种应用程序中,它以其开源、无服务器、自包含、可移植等特性深受开发者喜爱。本文将深入探讨SQLite的核心概念...
Android 中SQLite技术实例详解 Android 中SQLite技术实例详解是Android 应用程序中的一种常用数据库技术,本文将对 SQLite 技术进行详细的介绍和解释。 一、SQLite 数据库简介 SQLite 数据库是一个轻量级的数据库...
SQLite 是一个轻量级、开源的嵌入式数据库系统,广泛应用于移动应用、桌面应用以及服务器环境中的数据存储。它支持大部分标准SQL语法,但也有自己的一些特性和限制。以下是对SQLite支持的SQL语法的详细讲解,同时也...
18. `sqlite_open` 和 `sqlite_popen`:这两个函数用于打开SQLite数据库,`sqlite_popen`使用持久连接,而`sqlite_open`则不保证连接持久。 19. `sqlite_query`:执行SQL查询并返回结果句柄,结果句柄可用于进一步...
sqlite3使用详解.pdf sqlite3使用详解.pdf sqlite3使用详解.pdf sqlite3使用详解.pdf
《易语言源码Access转Sqlite详解》 在IT领域,数据库转换是一项常见的任务,尤其在数据迁移或系统升级过程中。本压缩包“易语言源码Access转Sqlite.rar”提供了一个使用易语言编写的解决方案,帮助用户将Microsoft ...
SQLite是一种轻量级的、开源的、自包含的数据库引擎,广泛应用于移动设备、嵌入式系统以及桌面应用程序。在本文中,我们将深入探讨SQLite数据库的相关知识点,包括其原理、特性、API使用、数据类型、SQL语法以及常见...
Android中SQLite应用详解