Android使用SQLite数据库的示例

一. 简介

SQLite数据库是一个轻量级的DBMS(数据库管理系统)。SQLite使用单个文件存储数据,Android标准库包含SQLite库以及配套使用的一些Java辅助类。主要特点:轻量级,单一文件,跨平台,开源。

二. Android中SQLite数据库的使用

1、创建SQLite数据库

SQLiteDatabase db=
SQLiteDatabase.openOrCreateDatabase(
"/data/data/" + getPackageName() + "/test.db",
 null);

执行完这条语句,可以在adb shell下进入/data/data/package-name/下看到刚才创建的数据库文件

在Android中使用SQLiteDatabase的静态方法
openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory)打开或者创建一个数据库。

它会自动去检测是否存在这个数据库,如果存在则打开,反之不存在就创建一个数据库;创建成功则返回一个SQLiteDatabase对象,失败抛出FileNotFoundException异常。

除了以上方法,Android还提供了SQLiteOpenHelper这个类来创建数据库,首先继承SQLiteOpenHelper,重写onCreate和onUpgrade方法及构造方法

public class MySqliteHelper extends SQLiteOpenHelper{

public MySqliteHelper(Context context) {
  super(context, "mysqlite.db", null, 1);
  //传入四个参数
  //第一个参数context 上下文对象
  //第二个参数mysqlite.db 数据库名称(文件名)
  //第三个参数一般为null
  //第四个参数数据库版本号,这里写1
}

@Override
public void onCreate(SQLiteDatabase db) {
  /* 数据库创建的时候会回调此方法,可以用db对象执行SQL语
   * 句,创建所需要的表
   */
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//当数据库升级时调用此方法
}
}

接着在需要创建数据库的时候调用

SQLiteOpenHelper dbHelper = new MySqliteHelper(this);
SQLiteDatabase db = dbHelper.getWritableDatabase();

使用SQLiteOpenHelper创建的数据库,保存在/data/data/package-name/databases/目录下,通过adb shell可以看到创建的数据库文件

2、创建数据库中的数据表

数据库创建完成后,要创建保存数据的表,表是存放在数据库中的。示例代码入下

  private void createTable(SQLiteDatabase db){
    //SQL语句
    String sql =
    "create table stutable(_id integer primary key autoincrement,name text,age integer)";
    db.execSQL(sql);
  }

这里附上SQLite数据类型

NULL: 这个值可为空值

VARCHAR(n):长度不固定且其最大长度为 n 的字串,n不能超过 4000。

CHAR(n):长度固定为n的字串,n不能超过 254。

INTEGER: 值被标识为整数,依据值的大小可以依次被存储为1,2,3,4,5,6,7,8….

REAL: 所有值都是浮动的数值,被存储为8字节的IEEE浮动标记序号.

TEXT: 值为文本字符串,使用数据库编码存储(TUTF-8, UTF-16BE or UTF-16-LE).

BLOB: 值是BLOB数据块,以输入的数据格式进行存储。如何输入就如何存储,不改变格式。

DATA :包含了 年份、月份、日期

执行完上述语句,可以通过ADM将数据库文件导出到电脑上

通过可视化工具打开数据库文件可以看到之前创建的表,以及定义的表字段

除了执行定义创建表的方法外,还可以在继承SQLiteOpenHelper类中的onCreate方法来初始化表结构,在后面的例子使用继承SQLiteOpenHelper方式创建表。

3、对表进行操作(数据表的增删改查)

增:在表中增加数据,可以使用SQLiteDatabase类中提供的execSQL(String sql)执行一条插入数据的SQL语句来插入数据,不过,AndroidSQLiteDatabase类提供了更为简单的方法来执行插入数据操作

  //SQLiteDatabase类中提供的方法
  public long insert(
     String table,//要操作表名
     String nullColumnHack,//空列的默认值
     ContentValues values
//ContentValues封装了列名称和列值的Map
     ); 

  private void insertToTable(SQLiteDatabase db){
    ContentValues cv = new ContentValues();
    cv.put("name","wxq");
    cv.put("age",11);
    db.insert("stutable",null,cv);
  }

执行insertTable方法,再次导出数据库可以看到stutable表中增加了一条数据

删:好吧,刚插入一条数据。。。

同样Android提供了delete方法

  //SQLiteDatabase类中提供的方法
  public int delete(
      String table,//表名称
      String whereClause,//删除条件
      String[] whereArgs); //删除条件值数组

  private void deleteToTable(SQLiteDatabase db){
    //删除条件,这里以name为条件,也可以是age = ?
    String whereClasuse = "name = ?";
    //删除条件参数,
    String[] whereArgs = new String[]{"wxq"};
    //执行删除
    db.delete("stutable",whereClasuse,whereArgs);
  }

执行上述语句,将会删除stutable表中刚才插入的数据。

改:

  //SQLiteDatabase类中提供的方法
  public int update(
  //表名称
  String table,
  //和行列ContentValues键值对应的key-value
  ContentValues values,
  //更新条件
  String whereClause,
  //更新条件数组
  String[] whereArgs
  );

  private void updateToTable(SQLiteDatabase db){
    //实例化ContentValues
    ContentValues cv= new ContentValues();
    cv.put("age",23);
    //更新条件
    String whereClause = "name = ?";
    //更新条件数组
    String[] whereArgs = new String[]{"wxq"};
    db.update("stutable",cv,whereClause,whereArgs);
  }

执行完更新语句,导出数据库文件,在可视化工具中查看

查:在Android中查询数据是通过Cursor类来实现的,可以使用SQLiteDatabase.query()方法时,这里使用别一个方法rawQuery

  public Cursor rawQuery(
  String sql,//查询的SQL语句
  String[] selectionArgs//当SQL语句中含有?,这里代表值
  );

  public void queryToTable(SQLiteDatabase db){
    String sql = "select * from stutable";//全查
    Cursor c = db.rawQuery(sql,null);//这里会返回一个Cursor(游标)对象
  }

使用SQLite的一个Demo(英雄管理系统)

主要操作数据库的代码

public class HeroSqliteManager {
  private SQLiteOpenHelper dbHelper;
  private SQLiteDatabase db;
  private static HeroSqliteManager instance;

  private static final String TABLE_NAME = "hero";
  private static final String NAME_FIELD = "name";
  private static final String ICOID_FIELD = "icoId";
  private static final String ATTACK_FIELD = "attack";
  private static final String DEFENSE_FIELD = "defense";

  public static HeroSqliteManager getInstance() {
    if (instance == null) {
      synchronized (HeroSqliteManager.class) {
        if (instance == null) {
          instance = new HeroSqliteManager();
        }
      }
    }
    return instance;
  }

  private HeroSqliteManager() {
    dbHelper = new HeroSqliteHelper(HeroApplication.getContext());
    db = dbHelper.getWritableDatabase();
  }

  /**
   * 插入记录
   * @param hero
   */
  public void insertData(Hero hero) {
    ContentValues cv = new ContentValues();
    cv.put(NAME_FIELD, hero.name);
    cv.put(ICOID_FIELD, hero.icoId);
    cv.put(ATTACK_FIELD, hero.attack);
    cv.put(DEFENSE_FIELD, hero.defense);
    db.insert(TABLE_NAME, null, cv);
  }

  /**
   * 删除记录
   * @param
   */
  public void deleteData(int id) {
    String whereClasuse = "_id = ?";
    String[] whereArgs = new String[]{String.valueOf(id)};
    db.delete(TABLE_NAME, whereClasuse, whereArgs);
  }

  /**
   * 修改记录
   * @param hero
   */
  public void updateData(Hero hero) {
    ContentValues cv = new ContentValues();
    cv.put(NAME_FIELD, hero.name);
    cv.put(ICOID_FIELD, hero.icoId);
    cv.put(ATTACK_FIELD, hero.attack);
    cv.put(DEFENSE_FIELD, hero.defense);
    String whereClasuse = "_id = ?";
    String[] whereArgs = new String[]{String.valueOf(hero.id)};
    db.update(TABLE_NAME, cv, whereClasuse, whereArgs);
  }

  /**
   * 查询所有的英雄
   * @return
   */
  public List<Hero> selectData() {
    List<Hero> heroList = new ArrayList<>();
    Cursor c = db.rawQuery("select * from " + TABLE_NAME, null);
    while (c.moveToNext()) {
      Hero hero = new Hero();
      hero.id = c.getInt(c.getColumnIndex("_id"));
      hero.name = c.getString(c.getColumnIndex(NAME_FIELD));
      hero.icoId = c.getInt(c.getColumnIndex(ICOID_FIELD));
      hero.attack = c.getInt(c.getColumnIndex(ATTACK_FIELD));
      hero.defense = c.getInt(c.getColumnIndex(DEFENSE_FIELD));
      heroList.add(hero);
    }
    c.close();
    return heroList;
  }

  /**
   * 按name查询
   * @param name
   * @return
   */
  public Hero selectForName(String name) {
    Cursor c = db.rawQuery("select * from " + TABLE_NAME + " where name = ?", new String[]{name});
    Hero hero = null;
    if (c.moveToNext()) {
      hero = new Hero();
      hero.id = c.getInt(c.getColumnIndex("_id"));
      hero.name = c.getString(c.getColumnIndex(NAME_FIELD));
      hero.icoId = c.getInt(c.getColumnIndex(ICOID_FIELD));
      hero.attack = c.getInt(c.getColumnIndex(ATTACK_FIELD));
      hero.defense = c.getInt(c.getColumnIndex(DEFENSE_FIELD));
    }
    c.close();
    return hero;
  }

  public void destroy() {
//    if (db != null) {
//      db.close();
//    }
//    db = null;
  }
}

SQLiteDemo

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android SQLite数据库基本操作方法

    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能.而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库.那么就来看一下在Android程序中怎么去操作SQLite数据库来实现一些需求的吧,仍然以一个小例子开始: 在创建Android项目之前,我们应该想一下我们要定义的数据库的相关信息和里面的表格的相关信息,为了日后数据库的更新更加方便 ,我们可以用一个专门的类保存数据库的相关信息,以后如果要更新数据库的话只需要该动这个类

  • Android批量插入数据到SQLite数据库的方法

    Android中在sqlite插入数据的时候默认一条语句就是一个事务,因此如果存在上万条数据插入的话,那就需要执行上万次插入操作,操作速度可想而知.因此在Android中插入数据时,使用批量插入的方式可以大大提高插入速度. 有时需要把一些数据内置到应用中,常用的有以下几种方式: 1.使用db.execSQL(sql) 这里是把要插入的数据拼接成可执行的sql语句,然后调用db.execSQL(sql)方法执行插入. public void inertOrUpdateDateBatch(List<

  • Android SQLite数据库版本升级的管理实现

    Android SQLite数据库版本升级的管理实现 我们知道在SQLiteOpenHelper的构造方法: super(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) 中最后一个参数表示数据库的版本号.当新的版本号大于当前的version时会调用方法: onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 所以我们

  • Android编程之SQLite数据库操作方法详解

    本文实例讲述了Android SQLite数据库操作方法.分享给大家供大家参考,具体如下: SQLite and Android SQLite简介 SQLite是一个非常流行的嵌入式数据库,它支持SQL语言,并且只利用很少的内存就有很好的性能.此外,它还是开源的,任何人都可以使用它. SQLite由以下几个组件组成:SQL编译器.内核.后端以及附件.SQLite通过利用虚拟机和虚拟数据库引擎(VDBE),使调试.修改和扩展SQLite的内核变得更加方便. SQLite支持的数据类型包括: 1.

  • Android SQLite事务处理结合Listview列表显示功能示例

    本文实例讲述了Android SQLite事务处理结合Listview列表显示功能.分享给大家供大家参考,具体如下: 前面的文章里介绍过事务的特点如原子性,隔离性,一致性,持久性.下面就结合Android的sqlite来说下,这次的文章里会把listview也结合起来用.实际上android里的事务和我们数据库里的是一样的.也是开启事务,操作,提交事务.如果出现问题就回滚. public void Transaction(){ SQLiteDatabase database=db.getRead

  • Android开发笔记SQLite优化记住密码功能

    本文实例为大家分享了Android SQLite优化记住密码功能的具体代码,供大家参考,具体内容如下 package com.example.alimjan.hello_world; /** * Created by alimjan on 7/4/2017. */ import com.example.alimjan.hello_world.bean.UserInfo; import com.example.alimjan.hello_world.dataBase.UserDBHelper; i

  • android SQLite数据库总结

    SQLite SQLite是一种超轻量级的嵌入式数据库,大小只有几百KB,但是其语法支持标准SQL语法,同时还遵循了数据库的ACID事务,所以学过其他数据库的开发人员都很容易掌握其使用. sql语法就不介绍了,直接看在android中的使用 SQLiteOpenHelper--封装好的数据库操作辅助类,需重写 重写方法 onCreate:初始化数据库,创建表,添加初始数据 onUpgrade:数据库版本升级时的数据库操作,如备份删除数据库等 常用方法 getReadableDatabase() 

  • Android利用listview控件操作SQLite数据库实例

    在本实例中,首先我们利用SQLiteOpenHelper类建立一个数据库,并写好增.删.查等方法,通过SimpleCursorAdapter连接listview实现数据库的增加.查询以及长按删除的功能. 首先,我们先认识一下什么是SQLiteOpenHelper类. Android为了操作SQlite数据库,提供了SQLiteDatabase类,其内封装了insert .delete.update .query .执行SQL命令等操作.同时又为SQLiteDatabase提供了一个辅助类,SQL

  • Android使用SQLite数据库的示例

    一. 简介 SQLite数据库是一个轻量级的DBMS(数据库管理系统).SQLite使用单个文件存储数据,Android标准库包含SQLite库以及配套使用的一些Java辅助类.主要特点:轻量级,单一文件,跨平台,开源. 二. Android中SQLite数据库的使用 1.创建SQLite数据库 SQLiteDatabase db= SQLiteDatabase.openOrCreateDatabase( "/data/data/" + getPackageName() + "

  • Android操作SQLite数据库(增、删、改、查、分页等)及ListView显示数据的方法详解

    本文实例讲述了Android操作SQLite数据库(增.删.改.查.分页等)及ListView显示数据的方法.分享给大家供大家参考,具体如下: 由于刚接触android开发,故此想把学到的基础知识记录一下,以备查询,故此写的比较啰嗦: 步骤如下: 一.介绍: 此文主要是介绍怎么使用android自带的数据库SQLite,以及把后台的数据用ListView控件显示 二.新建一个android工程--DBSQLiteOperate 工程目录: 三.清单列表AndroidManifest.xml的配置

  • android 拷贝sqlite数据库到本地sd卡的方法

    sqlite小型数据库,在开发的时候用于保存数据,在这不做关于它的介绍,本文只是写出了怎么拷贝应用的数据到本地sd卡中.如:一个数据库名为dandy.db的,拷贝到本地中叫seeker.db 代码如下: /** * 拷贝数据库到sd卡 * * @deprecated <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> */ public static void copyDat

  • Python 操作SQLite数据库的示例

    SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中.在很多嵌入式产品中使用了它,它占用资源非常的低,python 中默认继承了操作此款数据库的引擎 sqlite3 说是引擎不如说就是数据库的封装版,开发自用小程序的使用使用它真的大赞 简单操作SQLite数据库:创建 sqlite数据库是一个轻量级的数据库服务器,该模块默认集成在python中,开发小应用很不错. import sqlite3 # 数据表的创建 conn = sqlite3.conn

  • Android 通过SQLite数据库实现数据存储管理

    0 实验环境 在Android Studio中进行有关代码的编写和界面效果展示. SQLite数据库的图形化工具SQLiteStudio 下载网址:SQLiteStudio官网 1 界面展示 2 功能说明 (1)需实现一个应用可供用户进行数据的录入存储 (2)能实现基础CRUD操作,对数据进行的删.查.改等操作 (3)同时要有输入栏和结果的展示. 3 设计原理 SQLiteOpenHelper 是Android 提供的一个抽象工具类,负责管理数据库的创建.升级工作.如果我们想创建数据库,就需要自

  • Qt创建SQlite数据库的示例代码

    Qt 创建 SQlite数据库 void Widget::initDB() { // 创建并打开数据库 QSqlDatabase database; database = QSqlDatabase::addDatabase("QSQLITE"); // qDebug() << QApplication::applicationDirPath(); // 获取应用程序当前目录 database.setDatabaseName("test.sqlite3")

  • Android中SQLite数据库知识点总结

    SQLite 数据库简介 SQLite 是一个轻量级数据库,它是D. Richard Hipp建立的公有领域项目,在2000年发布了第一个版本.它的设计目标是嵌入式的,而且占用资源非常低,在内存中只需要占用几百kB的存储空间,这也是Android移动设备采用SQLite数据库的重要原因之一. SQLite 是遵守ACID的关系型数据库管理系统.这里的ACID是指数据库事务正确执行的4个基本要素,即原子性(Atomicity).致性 ( Consistency). 隔离性( lolation).

  • Android使用SQLite数据库的简单实例

    先画个图,了解下Android下数据库操作的简单流程: 1.首先,写一个自己的数据库操作帮助类,这个类继承自Android自带的SQLiteOpenHelper. 2.在自己的DAO层借助自己的Helper写数据库操作的一些方法 3.Activity调用DAO层的数据库操作方法进行操作 下面例子是: 1.Helper 复制代码 代码如下: package cn.learn.db.util; import android.content.Context;import android.databas

  • PHP+sqlite数据库操作示例(创建/打开/插入/检索)

    本文实例讲述了PHP+sqlite数据库操作的方法.分享给大家供大家参考,具体如下: SQLite是一款轻型的数据库,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非 常的低,在嵌入式设备中,可能只需要几百K的内存就够了.它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相 结合,比如Tcl.PHP.Java等,还有ODBC接口,同样比起MySQL.PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理 速度比他们都

随机推荐