全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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  

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


# android  # sqlite数据库  # sqlite使用  # sqlite数据库的使用  # android studio使用SQLiteOpenHelper()建立数据库的方法  # Android Studio 通过登录功能介绍SQLite数据库的使用流程  # Android创建和使用数据库SQLIte  # 实例讲解Android App使用自带的SQLite数据库的基本方法  # Android App使用SQLite数据库的一些要点总结  # Android中使用SQLite3 命令行查看内嵌数据库的方法  # Android使用SQLite数据库的简单实例  # Android SQLite数据库增删改查操作的使用详解  # SQLite数据库在Android中的使用小结  # 类中  # 数据库文件  # 可以看到  # 可以使用  # 方法来  # 数据库中  # 不能超过  # 创建一个  # 都是  # 字串  # 是一个  # 放在  # 还可以  # 第一个  # 将会  # 管理系统  # 可以用  # 这条  # 可以通过  # 第二个 


相关文章: 天津个人网站制作公司,天津网约车驾驶员从业资格证官网?  如何在阿里云部署织梦网站?  娃派WAP自助建站:免费模板+移动优化,快速打造专业网站  建站10G流量真的够用吗?如何应对访问高峰?  如何在七牛云存储上搭建网站并设置自定义域名?  图册素材网站设计制作软件,图册的导出方式有几种?  在线制作视频的网站有哪些,电脑如何制作视频短片?  威客平台建站流程解析:高效搭建教程与设计优化方案  教学网站制作软件,学习*后期制作的网站有哪些?  如何在Golang中使用replace替换模块_指定本地或远程路径  如何高效配置IIS服务器搭建网站?  建站VPS推荐:2025年高性能服务器配置指南  大型企业网站制作流程,做网站需要注册公司吗?  如何批量查询域名的建站时间记录?  常州自助建站费用包含哪些项目?  家庭建站与云服务器建站,如何选择更优?  沈阳制作网站公司排名,沈阳装饰协会官方网站?  青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?  建站之星下载版如何获取与安装?  宝塔新建站点为何无法访问?如何排查?  ,柠檬视频怎样兑换vip?  如何通过虚拟主机快速完成网站搭建?  *服务器网站为何频现安全漏洞?  中山网站制作网页,中山新生登记系统登记流程?  建站之星IIS配置教程:代码生成技巧与站点搭建指南  建站之星伪静态规则如何正确配置?  深圳网站制作培训,深圳哪些招聘网站比较好?  小型网站建站如何选择虚拟主机?  seo网站制作优化,网站SEO优化步骤有哪些?  C++如何将C风格字符串(char*)转换为std::string?(代码示例)  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  网站制作企业,网站的banner和导航栏是指什么?  常州企业网站制作公司,全国继续教育网怎么登录?  高端建站三要素:定制模板、企业官网与响应式设计优化  建站之星如何防范黑客攻击与数据泄露?  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  潍坊网站制作公司有哪些,潍坊哪家招聘网站好?  如何通过WDCP绑定主域名及创建子域名站点?  ui设计制作网站有哪些,手机UI设计网址吗?  linux top下的 minerd 木马清除方法  建站主机选择指南:服务器配置与SEO优化实战技巧  免费ppt制作网站,有没有值得推荐的免费PPT网站?  制作旅游网站html,怎样注册旅游网站?  制作国外网站的软件,国外有哪些比较优质的网站推荐?  建站之星如何快速更换网站模板?  宿州网站制作公司兴策,安徽省低保查询网站?  如何在云虚拟主机上快速搭建个人网站?  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  ,如何利用word制作宣传手册? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。