Android 为了让我们能够更加方便的管理数据库,特意提供了一个SQLiteOpenHelper帮助类,通过借助这个类就可以非常简单的对数据库进行创建和升级。

SQLiteOpenHelper是一个抽象类,我们要创建一个自己的帮助类去继承它。SQLiteOpenHelper有两个抽象方法,分别是onCreat()和onUpgrade(),我们必须在自己的帮助类里面重这两个方法,然后分别在这两个方法中去实现创建、升级数据库的逻辑。

SQLiteOpenHelper中还有两个非常重要的实例方法:getReadableDatabase()和getWritableDatabase()。这两个方法都可以创建或打开一个现有的数据库,并返回一个可对数据库进行读写操作的对象。不同的是,当数据不可写入的时候(如磁盘已满),getReadableDatabase()方法返回的对象将以只可读的方式去打开数据库,而getWriteableDatabase()方法将出现异常。

SQLiteOpenHelper中有两个构造方法可供重写,一般使用参数少一点的构造方法即可。

这个构造方法中接收4个参数,第一个参数是Context,第二个参数是数据库名,创建数据库时使用的就是这里指定的名称。第三个参数允许我们在查询数据的时候返回一个自定义的Cursor,一般都是传入null。第四个参数表示当前数据库的版本号。

构建出SQLiteOpenHelper的实例之后,再调用他的getReadableDatabase()或getWritableDatabase()方法就能够创建数据库了。数据库文件通常会放在/data/data/<pack name>/database/目录下。此时,重写的onCreate()方法也会得到执行。所以通常会在这里去处理一些创建表的逻辑。

新建项目DatabaseTest。

我们希望创建一个名为BookStore.db的数据库,然后在这个数据库中新建一张Book表,表中包含主键id、作者、价格、页数和书名等列。创建数据库表当然还是需要用建表语句的。

新建MyDatabaseHelper类继承SQLiteOpenHelper,代码如下:

package com.example.databasetest;import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast;/*** Created by ZHJ on 2018/3/3.*/public class MyDatabaseHelper extends SQLiteOpenHelper {public static final String CREATE_BOOK ="create table Book("+"id integer primary key autoincrement,"+"auto text,"+"price real,"+"pages integer"+"name text)";private Context mContext;public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version){super(context,name,factory,version);mContext = context;}@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL(CREATE_BOOK);Toast.makeText(mContext,"Create succeeded",Toast.LENGTH_SHORT).show();}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
}

我们把建表语句定义为一个字符串常量,然后在Oncreate()方法中又调用了SQLiteDatabase的execSQL()方法去执行这条建表语句,并弹出一个Toast提示创建成功,这样我们在保证创建数据库的同时还是成功创建Book表。

修改activity_main.xml的代码,如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"><Buttonandroid:id="@+id/create_database"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Create database"/></LinearLayout>

仅仅加入一个按钮,用于创建数据库。最后修改MainActivity中的代码,如下:

package com.example.databasetest;import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;public class MainActivity extends AppCompatActivity {  private MyDatabaseHelper dbHelper;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);dbHelper = new MyDatabaseHelper(this,"BookStore.db",null,1);Button createDatabase = (Button) findViewById(R.id.create_database);createDatabase.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {dbHelper.getWritableDatabase();}});}
}

我们在onCreate()方法中构建了一个MyDatabaseHelper对象,并且通过构造函数的参数将数据库指定为BookStore.db,版本号指定为1,然后在Create database按钮的点击事件里面调用了getWritableDatabase()方法,这样,当第一次点击Create database按钮时,就会检测到当前程序中并没有BookStore.db这个数据库于是会创建数据库并调用MyDatabaseHelper中的onCreate()方法,这样Book表也就得到了创建,然后会弹出一个Toast提示创建成功。再次点击Create database按钮时,会发现此时已经存在BookStore.db数据库了,不会再创建一次。

现在可以运行一下代码。

怎么样才能证明数据库已经创建成功了呢?

我们使用adb shell 来对数据库和表的创建情况进行检查。

Android 第十一课 SQlite 数据库存储相关推荐

  1. 【转】Android使用嵌入式关系型SQLite数据库存储数据【学习记录】

    为什么80%的码农都做不了架构师?>>>    除了可以使用文件或SharedPreferences存储数据,还可以选择使用SQLite数据库存储数据. 在Android平台上,集成 ...

  2. 使用嵌入式关系型SQLite数据库存储数据

    除了可以使用文件或SharedPreferences存储数据,还可以选择使用SQLite数据库存储数据. 在Android平台上,集成了一个嵌入式关系型数据库-SQLite,SQLite3支持 NUL ...

  3. sqlite数据库android使用教程,Android开发教程之 SQLite数据库的使用

    在开发Android应用程序时经常需要存储数据,Android系统提供了SQLite数据库,还提供了SQLiteOpenHelper类,使我们可以很方便的操作数据库.通过一个例子来说明在Android ...

  4. android属于数据库管理系统,详细谈谈Android系统中的SQLite数据库的应用

    数据库是按照数据结构来组织.存储和管理数据的仓库,而在信息话的社会,数据库又不单单仅限与数据的相关内容,现在数据库技术是管理信息系统.办公自动化系统.决策支持系统等各类信息系统的核心部分,而SQL是结 ...

  5. Android studio+SQLCipher加密SQLite数据库的几个坑

    Android studio SQLCipher加密SQLite数据库的几个坑 前言:Android 自带的SQLite数据库可以用于数据存储,但是,大家都知道其数据是存储于手机的data/data/ ...

  6. Android 绿豆通讯录【SQLite数据库---数据库(增删改查、展示数据)】

    前情提要:Android 数据库(SQLite) [简介.创建.使用(增删改查.事务.实战演练).数据显示控件(ListView.Adapter.实战演练-绿豆通讯录)] https://blog.c ...

  7. android:Android中用文件初始化sqlite数据库(zz)

        很多时候在应用安装初始化时,需要创建本地数据库,同时为数据库添加数据,之后再从数据库中读取数据. 这里有2个思路 1.先在本地创建一个能支持android使用的sqlite数据库文件,启动时, ...

  8. 安卓视频开发 mysql_在Android应用中使用SQLite数据库(传智播客视频笔记)

    在Android应用中使用SQLite数据库 应用生成的数据库文件保存为/data/data/应用包名/databases/name.db,生成的文件可用SQLite Expert打开 (name是自 ...

  9. Android SQLite 数据库存储

    SQLite说明 SQLite是一款轻型的关系型数据库服务器,移动设备的数据库存储都是用SQLite 应用运行需要保存一系列有一定结构的数据,比如:公司员工信息 存储的文件类型:.db 数据保存的路径 ...

最新文章

  1. linux 守护进程管理 supervisor 简介 可用于docker容器内守护进程
  2. 安装eclipse for c/c++环境
  3. 预览文章: c++ primer学习笔记,二:标准库类型
  4. ITK:计算图像的最小,最大,方差和均值
  5. 图片和图形之性能和视图层次结构(18)
  6. 嵌入式tomcat例子
  7. 著名开源项目_著名开源项目案例研究
  8. php 卡迪尔的秘密
  9. js中的关键子in的使用方法
  10. python中xpath如何获取内容_python requests + xpath 获取分页详情页数据存入到txt文件中...
  11. 听了那么多语音识别,你知道它的发展史吗?
  12. 2018数学建模国赛A题《高温作业专用服装设计》优秀论文(本文由西南民族大学白白不加糖、薄荷CC糖原创)
  13. 教你实战Flutter Deskstop之Tinypng(熊猫图片压缩)GUI工具
  14. 软件系统的沙盘测试是什么东西,沙盘(一款安全软件)_百度百科
  15. 鸿蒙系统的软件怎么下载,鸿蒙系统官网下载软件电脑版
  16. 共享 || 我自己觉得好看的20款可商用字体
  17. Datawhale---Task2(EDA-数据探索性分析)
  18. PAT L3-001 凑零钱(01背包(布尔背包)+记录路径)
  19. matlab如何生成极坐标,如何在matlab中极坐标画图
  20. 将RGB颜色转换成16bit颜色

热门文章

  1. python 重定向 ctf_3.CTF——python利用工具
  2. python如何跳出外层循环_失去循环标签的Python,我这样实现跳出外层循环
  3. java之hibernate之基于外键的一对一单向关联映射
  4. atcoder A - Frog 1(DP)
  5. Scala 学习笔记
  6. applicationcontext理解使用
  7. 【转】VS2013中如何解决error C4996: 'fopen'问题
  8. Asp.net Vnext IValueProvider
  9. 【leetcode】Path Sum II
  10. [转]VS2010中的单元测试