Android下最好的数据储存方式:关系型数据库sqlite。

 

数据库的创建:使用SqliteOpenHelper类

结合SqliteOpenHelper类和SQLiteDatabase类的帮助,我们可以方便地对数据库进行CURD操作。

 

数据库的创建:

我们主要通过在SqliteOpenHelper类的onCreate方法中创建数据库表。

那么,onCreate方法又是在什么时候执行的呢?

我们先写一下代码:

package com.whathecode.db;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper; public class DatabaseHelper extends SQLiteOpenHelper
{ public static final String CREATE_TABLE = "create table student("
+ "id integer primary key," + "age integer," + "name char(20))"; public DatabaseHelper(Context context)
{
super(context, "dbsample.db", null, 1);
} @Override
public void onCreate(SQLiteDatabase db)
{
db.execSQL(CREATE_TABLE);
} @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{ } }

 

通过上面的代码,我们可以创建一个dbsample.db的数据库。

实际上,当我们通过new关键字创建这个类的实例的时候,数据库文件并没有被创建出来。

事实上是,数据库是我们第一次连接的时候创建的。

亦即是通过SqliteOpenHelper的getReadableDatabase()方法或者getWritableDatabase方法的时候创建

SqliteOpenHelper的onCreate方法也是在这个时候执行。

因此,我们可以在onCreate方法中创建需要的表。

 

下面是MainActivity的代码:

package com.whathecode.sqlitedemo;

import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle; import com.whathecode.db.DatabaseHelper; public class MainActivity extends Activity
{ @Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //执行到这行的时候数据库没有被创建
DatabaseHelper dbh = new DatabaseHelper(this); //当执行到这行的时候数据被被创建出来
SQLiteDatabase readableDatabase = dbh.getReadableDatabase();
}
}

 

创建好数据库后,我们就可以对数据库进行CURD操作。

 

向数据库中插入数据:

使用SQLiteDatabase类中execSQL的方法,我们可以方便地操作数据库:

注意getReadableDatabase返回的数据库对象是只读的。

现在我们需要写入数据库,就需要调用getWritableDatabase方法

 

更新后的MainActivity代码:

package com.whathecode.sqlitedemo;

import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast; import com.whathecode.db.DatabaseHelper; public class MainActivity extends Activity
{
SQLiteDatabase readableDatabase = null;
DatabaseHelper dbh = null;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //执行到这行的时候数据库没有被创建
dbh = new DatabaseHelper(this); //当执行到这行的时候数据被被创建出来
readableDatabase = dbh.getReadableDatabase();
} public void insertData(View view)
{
SQLiteDatabase writableDatabase = dbh.getWritableDatabase();
if (writableDatabase.isOpen())
{ for (int i = 0; i < 20; i++)
{
//执行数据插入操作
writableDatabase.execSQL("insert into student values(?,?,?);",
new Object[] { i + 2, 10 + i, "android " + i });
}
writableDatabase.close();
Toast.makeText(this, "数据插入成功", Toast.LENGTH_SHORT).show();
}
}
}

看一下运行结果:

 

现在,我们使用sqlite3工具看看数据是否真的被插入了

 

看到了吧,数据一条不少被插入了.

 

SqliteDatabase类除了execSQL方法外还有其他的方法可以操作数据库:

  • create(SQLiteDatabase.CursorFactory factory)
  • delete(String table, String whereClause, String[] whereArgs)
  • query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)
  • rawQuery(String sql, String[] selectionArgs)

 

当使用execSQL执行任何的查詢语句都是没有返回结果的。

如果想返回结果,就要使用rawQuery方法。

 

当然,上面这些只是部分方法,其他的大家可以到官网查看API

其他的数据库查找,更新,删除操作都只是依瓢画葫芦。大家可以自行研究一下。

Android下的数据储存方式(三)的更多相关文章

  1. Android下的数据储存方式

      安卓系统默认提供了一下几种数据储存的方式: Shared Preferences 内部储存 外部储存 SQLite数据库 保存到网络服务器   使用Shared Preferences       ...

  2. Android下的数据储存方式( 二)

    在上一篇文章中我们介绍了SharedPreferences的使用方法. 今天我们继续介绍另一种储存数据的方式:使用内部储存和外部储存 每一个Android设备都拥有两个数据储存区域:外部储存和外部储存 ...

  3. 关系型数据库与HBase的数据储存方式差别

    现在Bigtable型(列族)数据库应用越来越广,功能也非常强大. 可是非常多人还是把它当做关系型数据库在使用,用原来关系型数据库的思维建表.存储.查询. 本文以hbase举例讲述数据模式的变化. 传 ...

  4. Android下的数据存储与訪问 --- 以文件的形式

    Android下的数据存储与訪问 --- 以文件的形式 1.1 储存文件存放在手机内存中: // *** 储存数据到 /data/data/包名/files/jxn.txt文件里 String dat ...

  5. Android MVP模式简单易懂的介绍方式 (三)

    Android MVP模式简单易懂的介绍方式 (一) Android MVP模式简单易懂的介绍方式 (二) Android MVP模式简单易懂的介绍方式 (三) 讲完M和P,接下来就要讲V了.View ...

  6. Android笔记:数据储存

    1.文件存储 文件存储是Android 中最基本的一种数据存储方式,它不对存储的内容进行任何的格式化处理,所有数据都是原封不动地保存到文件当中的,因而它比较适合用于存储一些简单的文本数据或二进制数据. ...

  7. Android中的数据储存

    数据的储存是一个十分重要的功能,它涉及到各种类型的数据,各种的储存方式,今天就接触了Android中数据储存的简单应用,有一种方式是可以将存入的数据原封不动的存储起来,这里要用到openfileout ...

  8. Android 里的数据储存

    数据持久化 关于数据储存,这个话题已经被反复讨论过很多次了,我是不建议把网络存储这种方式纳入到数据储存的范围的,因为这个和Android没多少关系,因此就有如下的分类: 本地储存(也称之为数据持久化, ...

  9. android下的数据存储

    android下数据存储的几种方式:(简单讨论) 1.文件 举例:登陆时“记住密码” 因为是基于Linux系统,直接建文件,文件会出现在项目工程:而手机登陆时,应该把文件放在手机里,通常数据放在dat ...

随机推荐

  1. linux 下 mysql 安装(不用编译的方式)

    环境是centos6.x.相信其他的也大同小异.相对来说这种方式我用的比较多. 一些环境依赖表库: yum install perl yum install libaio 1)下载:在mysql的网站 ...

  2. win7 telnet

    一.telnet连接 1.linux linux下可以通过net stat 查看22端口来确认端口是否开放. 然后在cmd中可通过telnet 10.0.200.151 22来连接. 2.win7 w ...

  3. Ubuntu 14.04 下 Chromium 出现 未安装Adobe Flash Player 问题解决

    Ubuntu 14.04 中,其他浏览器在安装Adobe Flash插件后可以播放视频及音乐,但是Chromium浏览器则会提示缺少Adobe Flash 插件. 原因:之前Chromium使用Net ...

  4. 第64课 C++中的异常处理(上)

    1. C++内置的异常处理:try-catch (1)try语句处理正常代码逻辑 (2)catch语句处理异常情况 (3)try语句中的异常由对应的catch语句处理,如果对应的catch中没有处理该 ...

  5. 这段时间对c#和java的感受

    这段时间对c#和java的感受 虽然很多书上说语法相似,但实际这是一个接近于门外汉的看法 真正的不同是 c#对更贴近系统API,      而java倡导跨平台 因而c#语法关键字更多,更细, 而ja ...

  6. Java中正则Matcher类的matches()、lookAt()和find()的区别

    在Matcher类中有matches.lookingAt和find都是匹配目标的方法,但容易混淆,整理它们的区别如下: matches:整个匹配,只有整个字符序列完全匹配成功,才返回True,否则返回 ...

  7. 在AppDelegate 或其它地方用UITabBarController怎么办

    1.解决了TabBarController,每个地方都要用到的时候?     创建一个单例,然后在创建UITabBarController时,赋值给这个单例,不管是登录还是抽屉,保证最终的根控制器是U ...

  8. 开发之UI篇

    首先这里介绍一个软件一个插件,它们的主要功能是方便开发者看UI(如尺寸,颜色,大小等),两个配合使用 一. Sketch软件 1.Sketch  看ui图,还可以切图 2.Sketch 如何切图: 1 ...

  9. 【深入ASP.NET原理系列】--ASP.NET页面生命周期

    前言 ASP.NET页面运行时候,页面将经历一个生命周期,在生命周期中将执行一系列的处理步骤.包括初始化.实例化控件.还原和维护状态.运行时间处理程序代码以及进行呈现.熟悉页面生命周期非常重要,这样我 ...

  10. HTML-学习笔记(文本格式化,引用,计算机代码)

    HTML 可定义很多供格式化输出的元素,比如粗体和斜体字. <b>定义粗体字体 <p>这是一段<b>粗体字体</b>通过标签定义</p> & ...