Android 中的SQLite数据库的使用

Android Studio 使用插件Database Navigation 连接 sqlite数据库 Database Navigation 是一款在 Android Studio 开发环境中非常实用的插件,它主要致力于帮助开发者更便捷、高效地管理和操作数据库,尤其是在 Android 项目涉及到数据库相关开发工作时,能够提升开发体验与效率。 阅读详情

由于手机内存小、携便性等特点,要求手机软件对一些数据的处理要做到轻量,在这我就SQLite数据库简单侃侃。

  SQLite是一种轻量级的数据库,在android中程序员无法在用户手机上手动创建数据库,这就使得我们必须用代码自动创建数据库。下面我就从数据库的创建到增删改查一一说明,希望对大家有所帮助.

1. 创建SQLite数据库

   首先得创建一个类DBOpenHelper继承SQLiteOpenHelper,SQLiteOpenHelper是一个抽象类,必须用子类实现其中的方法。

public class DBOpenHelper extends SQLiteOpenHelper
{
  private static final String DB_NAME = "pcar.db";//数据库名
  private static final int DB_VERSION = 1;//版本号

  //构造函数
  public DBOpenHelper(Context context)
  {
   super(context, DB_NAME, null, DB_VERSION);
  }

  @Override
  public void onCreate(SQLiteDatabase db)
  {
    //在该方法中创建数据库
    String sql="CREATE TABLE car(areaID VARCHAR(100) PRIMARY KEY NOT NULL,AreaCode VARCHAR(100),AreaName VARCHAR(100),AreaPrice float,EntryInTotal int,EntryOutTotal int)";
   //执行sql语句
    db.execSQL(sql);
  }

  @Override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
  {
   // TODO Auto-generated method stub
   //该函数是在DB_VERSION(版本号)发生改变时执行
  }

}
以下代码为单元测试代码:

public class TestSQLite extends AndroidTestCase
{
  private static final String TAG = "TestSQLite";

  public void testDBCreate()
  {
    DBOpenHelper helper = new DBOpenHelper(getContext());
    helper.getWritableDatabase();// 创建数据库
  }
}
执行完testDBCreate()后如果成功的话,就会带data/data/自己的包下有一个databases文件夹,该文件夹下就会有一个pcar.db文件。就表明数据库创建成功。


查看database方法可百度。这里不再详述。

2,执行数据库的增删改查

package com.example.park.db;

import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.example.park.domain.ParkCount;

public class ParkCountService
{
  private DBOpenHelper dbOpenHelper;

  public ParkCountService(Context context)
  {
    super();
    dbOpenHelper = new DBOpenHelper(context);
  }

  /**
   * 保存数据
   * 
   * @param parkCount
   */
  public void save(ParkCount parkCount)
  {
    // 得到数据库的增删改查类SQLiteDatabase,用于管理和操作SQLite数据库,几乎所有的数据库操作,最终都将由这个类完成。
    SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
    db.execSQL(
        "insert into car(AreaID,AreaCode,AreaName,AreaPrice,EntryInTotal,EntryOutTotal)values(?,?,?,?,?,?)",
        new Object[]
        { parkCount.getAreaID(), parkCount.getAreaCode(), parkCount.getAreaName(), parkCount.getAreaPrice(),
            parkCount.getEntryInTotal(), parkCount.getEntryOutTotal() });

  }

  /**
   * 删除数据
   * 
   * @param areaID根据此ID删除数据
   */
  public void delete(int areaID)
  {
    SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
    db.execSQL("delete from car where AreaID=?", new Object[]
    { areaID });
  }

  /**
   * 更新数据
   * 
   * @param parkCount
   *          数据的对象
   */
  public void update(ParkCount parkCount)
  {
    SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
    db.execSQL("update car set AreaCode=?,AreaName=?,AreaPrice=?,EntryInTotal=?,EntryOutTotal=? where AreaID=?",
        new Object[]
        { parkCount.getAreaCode(), parkCount.getAreaName(), parkCount.getAreaPrice(), parkCount.getEntryInTotal(),
            parkCount.getEntryOutTotal(), parkCount.getAreaID() });
  }

  /**
   * 查询数据
   * 
   * @param id根据此id查询数据
   */
  public ParkCount find(int id)
  {
    SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
    Cursor cursor = db.rawQuery("select * from car where AreaID=?", new String[]
    { String.valueOf(id) });
    if (cursor.moveToFirst())
    {
      int areaID = cursor.getInt(cursor.getColumnIndex("areaID"));
      String areaCode = cursor.getString(cursor.getColumnIndex("AreaCode"));
      String areaName = cursor.getString(cursor.getColumnIndex("AreaName"));
      float areaPrice = cursor.getFloat(cursor.getColumnIndex("AreaPrice"));
      int entryInTotal = cursor.getInt(cursor.getColumnIndex("EntryInTotal"));
      int entryOutTotal = cursor.getInt(cursor.getColumnIndex("EntryOutTotal"));
      ParkCount count = new ParkCount(areaID, areaCode, areaName, areaPrice, entryInTotal, entryOutTotal);
      return count;
    }
    return null;
  }

  /**
   * 分页显示
   * 
   * @param offset
   *          获取多少条数据
   * @param maxResult跳过前几条数据
   * @return
   */
  public List<ParkCount> getScrollData(int offset, int maxResult)
  {
    List<ParkCount> parkList = new ArrayList<ParkCount>();
    SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
    Cursor cursor = db.rawQuery("select * from car order by AreaID asc limit ?,?", new String[]
    { String.valueOf(offset), String.valueOf(maxResult) });
    while (cursor.moveToNext())
    {
      int areaID = cursor.getInt(cursor.getColumnIndex("areaID"));
      String areaCode = cursor.getString(cursor.getColumnIndex("AreaCode"));
      String areaName = cursor.getString(cursor.getColumnIndex("AreaName"));
      float areaPrice = cursor.getFloat(cursor.getColumnIndex("AreaPrice"));
      int entryInTotal = cursor.getInt(cursor.getColumnIndex("EntryInTotal"));
      int entryOutTotal = cursor.getInt(cursor.getColumnIndex("EntryOutTotal"));
      ParkCount count = new ParkCount(areaID, areaCode, areaName, areaPrice, entryInTotal, entryOutTotal);
      parkList.add(count);
    }
    cursor.close();
    return parkList;
  }

  public long getCount()
  {
    SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
    Cursor cursor = db.rawQuery("select count(*) from car", null);
    cursor.moveToFirst();
    long result = cursor.getLong(0);
    cursor.close();
    return result;
  }
}
单元测试类
package com.example.park.test;

import java.util.List;

import android.test.AndroidTestCase;
import android.util.Log;
import com.example.park.db.DBOpenHelper;
import com.example.park.db.ParkCountService;
import com.example.park.domain.ParkCount;

public class TestSQLite extends AndroidTestCase
{
  private static final String TAG = "TestSQLite";

  public void testDBCreate()
  {
    DBOpenHelper helper = new DBOpenHelper(getContext());
    helper.getWritableDatabase();// 创建数据库
  }

  public void testSave()
  {
    ParkCountService service = new ParkCountService(getContext());
    for (int i = 5; i < 20; i++)
    {
      ParkCount parkCount = new ParkCount(i, "0908" + i, "苏州" + i, (float) 15.0, 1, 1);
      service.save(parkCount);
    }
  }

  public void testDelete()
  {
    ParkCountService service = new ParkCountService(getContext());
    service.delete(0);
  }

  public void testUpdate()
  {
    ParkCountService service = new ParkCountService(getContext());
    ParkCount parkCount = new ParkCount(3, "09089", "观前", (float) 18.0, 8, 9);
    service.update(parkCount);
  }

  public void testFind()
  {
    ParkCountService service = new ParkCountService(getContext());
    Log.i(TAG, service.find(3).toString());
  }

  public void testCount()
  {
    ParkCountService service = new ParkCountService(getContext());
    Log.i(TAG, service.getCount() + "");
  }

  public void testScrollData()
  {
    ParkCountService service = new ParkCountService(getContext());
    List<ParkCount> parkCount = service.getScrollData(10, 5);
    for (ParkCount paCount : parkCount)
    {
      Log.i(TAG, paCount.toString());
    }
  }
}



Android——SQLite数据库使用详解,安卓开发面试基础 设置按钮边框填充颜色 阅读详情

相关推荐

Android 拷贝db文件到sqlite数据库。

Android内部使用的是Sqlite数据库,有些app会需要使用这个数据库来存储一些东西。我们可以在代码中创建一个数据库,然后不断的insert进去数据,但这会比较麻烦。所以直接使用图形化工具设计好数据库之后,直接将其拷贝到安卓机器之中比较快速,也免去了不断的数据库操作。至于db文件的拷贝就直接使用java中的数据流写入即可,下面是操作的代码:import android.content.Cont

繁城落叶 4053

Android之SQLite数据库使用

SQLite是Android系统集成的一个轻量级的数据库。Android提供了SQLiteDatabase代表一个数据库(底层就是一个数据库文件),一旦应用程序获得了代表指定数据库的SQLiteDatabase对象,接下来可通过SQLiteDatabase对象来管理、操作数据库了。

qq_38056514的博客 7380

android 读取本地数据库db文件(Android sqlite)

String sql = " update user set name = ‘李四’ where name = ‘王杰’ ";// 判断sd卡是否存在。@param context app context,不然会造成内存泄漏。Android 本地 操作数据库逻辑(查,删,改)Android拷贝逻辑代码。

2501_90237187的博客 1276

Android :这是一份详细 & 全面的 SQLlite数据库 使用手册

**// 必须通过super调用父类的构造函数/**// 注:数据库实际上是没被创建 / 打开的(因该方法还没调用)// 直到getWritableDatabase() / getReadableDatabase() 第一次被调用时才会进行创建 / 打开/**@Override// 参数说明:// db : 数据库// oldVersion : 旧版本数据库// newVersion : 新版本数据库// 使用 SQL的ALTER语句。

2401_84279169的博客 994

Android数据库:SQLite除了.db文件,还多出.db-shm,.db-wal文件

Android数据库:SQLite除了.db文件,还多出.db-shm,.db-wal文件 使用安卓数据库保存文件时,在Android Studio 的 Device File Explorer里数据库文件目录 /data/data/com.urovo.datatopc/databases/DATA.db 发现其目录下不仅有.db文件,还有两个其他文件 .db-shm和.db-wal文件 而且数据库存储文件DATA.db(这是我的数据库名字,你们的可能不一样)保存至本地,通过SQLite Develope

m0_53581523的博客 4940

安卓db数据库查看工具——快速管理与分析SQLite数据库

SQLite 是 Android 内置的轻量级关系型数据库管理系统,为 Android 应用提供了一种高效、便捷的数据持久化方案。与传统的关系型数据库不同,SQLite 将数据库存储在文件系统中的单一文件内,从而简化了数据库的部署和管理。SQLite 支持标准的 SQL 语言,允许在没有服务器进程的情况下进行数据库操作,这使得它非常适合于资源有限的移动设备环境。在 Android 应用开发中,SQLite 数据库常用于本地数据存储、用户个性化设置记录以及应用内缓存。

weixin_32869687的博客 1942

SQLite数据库在Android中的使用

SQLite是一个的SQL数据库引擎。无服务器,意味着使用sqlite不需要联网;不需要配置,意味着不需要安装和管理;同时sqlite遵循ACID原则。SQLIte是一款轻型的数据库,占用资源非常低,在嵌入式设备中,可能只需几百k的内存。

IH_LZH的博客 2287

掌握SQLite:使用DB Browser访问微信Android数据库

加密技术是信息安全的核心,旨在将明文数据转换为难以理解的密文形式,只有拥有正确密钥的用户才能解读这些数据。加密过程通常涉及两个主要组件:算法和密钥。数据库是现代软件应用不可或缺的组成部分,用于存储和管理数据。SQLite作为一个轻量级的数据库,被广泛应用于移动应用和桌面应用中。DB Browser for SQLite是一个开源工具,它允许用户直观地浏览和编辑SQLite数据库文件。本章将介绍DB Browser的功能,如何进行基本操作,并分享一些使用技巧。

weixin_31715353的博客 2440

Android - SQLite数据库的简单使用

SQLite的简单使用 小柴的笔记 一、创建SQLiteOpenHelper类 代码如下 public class DBOpenHelper extends SQLiteOpenHelper { public DBOpenHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) { super(cont

小柴的回忆 1076

Android之Sqlite数据库操作实例

Android之Sqlite数据库操作实例

Android sqlite数据库的创建和使用

Android sqlite数据库的创建和使用,入门知识

Android的嵌入式关系型SQLite数据库使用

除了可以使用文件或SharedPreferences存储数据,还可以选择使用SQLite数据库存储数据。 在Android平台上,集成了一个嵌入式关系型数据库—SQLite,SQLite3支持 NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型只有五种,但实际上sqlite3也接受varchar(n)、char(n)、decimal(p,s) 等数据类型,只不过在运算或保存时会转成对应的五种数据类型。 SQLite最大的特点是你可以

1942

Android操作sqlite数据库

Android 操作 sqlite 数据库增加修改删除 Android 操作 sqlite 数据库增加修改删除 Android 操作 sqlite 数据库增加修改删除

查看安卓sqlite数据库工具:Android-Debug-Database

简要介绍 安卓开发过程中,有时需要查看sqlite数据库,核对数据.本文介绍Android-Debug-Database,非常好用. github地址:https://github.com/amitshekhariitbhu/Android-Debug-Database 功能: 支持查看手机该app的数据库和shared preference. 支持修改数据库和shared preferenc...

蓝不蓝编程 1524

Microchip Studio 7.0 从零开始:下载、安装到首个AVR工程实战

本文为AVR单片机开发新手提供了Microchip Studio 7.0的完整入门指南。从官方下载、避坑安装,到创建首个GCC C工程、编写LED闪烁代码,再到项目配置、仿真调试与程序烧录,手把手带你完成从零到一的实战过程,是掌握AVR开发环境的必备教程。

weixin_29200741的博客 522

深入理解HanLP1.x,填平可能遇到的坑

提取指定数量的摘要。自定义词典为什么要单独领出来讲呢?因为在我们的业务开发中,可能分词的效果并不理想,需要定制自己的词库,索引更加常用。例如:小米su7特斯拉modelY比亚042025款6575767670908我们需要分出小米su72025款等词。我们分别看看用字典和不用字典的效果。

static_coder的博客 977

使用Android Debug Database查看安卓Sqlite数据库

一、加入依赖 debugImplementation 'com.amitshekhar.android:debug-db:1.0.4' 二、查看数据库 安装程序,并在Sqlite中插入数据 查看设备的ip地址(adb shell ifconfig) 使用浏览器输入地址(设备地址:8080/#) 例子: ...

Pyth_MR 343

在银河麒麟V10上部署Atlas 300i Duo:从固件到驱动的一站式踩坑笔记

日期:2025-09-09关键词:鲲鹏920、Atlas 300i Duo、银河麒麟V10、NPU、驱动、固件。

weixin_41544125的博客 2813

安卓获取本地时间插入sqlite_Android开发小结Part11:SQLite 通过.db文件导入已有数据库...

见过几次Android数据库操作,貌似都是在程序开始时建一个空数据库,然后进行操作。那,如果想要用一个已有的数据库怎么办?因为Android系统下的数据库是存放在/data/data/com.*.*(package name)/目录下,所以我们可以这样:1.将.db文件放到项目源码的res/raw目录下;2.用FileInputStream读取原数据;3.用FileOutPutStream把读取到...

weixin_39762441的博客 201

【计算机三级-数据库技术】操作题大题(第1套)

从触发器的语法中可知,【1】处应该填写的是执行触发器的表,【2】处应该填写指定在表或视图上执行哪些数据修改语句时将激活触发器的关键字。使用FOR或AFTER选顶定义的触发器为后触发器,即只有在引发触发器执行的语句中的操作都已成功执行,并且所有的约束检查也成功完成后,才执行触发器。转换成新的独立的模式,模式的属性由联系本身的属性及两个实体的键构成,主键由两端实体的键组合而成。实体的转换:在从ER图转换为关系模式时,一个实体转换成一个关系模式,实体的属性就是关系模式的属性,实体的键就是关系的主键。

放纵小开爱的博客 1101

SerDes电路的PCB仿真设计规则及策略

SerDes的PCB设计中,重点工作是使用3D 电磁 (EM) 场求解器,进行过孔结构优化,包括 BGA的扇入和扇出区域以及布线的过孔区域,并且,利用连接器供应商提供加密的 3D 模型,进行连接器和 PCB 的级联仿真,最终获取系统级的通道性能参数,如插入损耗、回波损耗、串扰和模式转换、阻抗曲线等,如果发现任何缺陷,再进行进一步优化,这一过程中,推荐进行拆分仿真,以提高设计效率。

一只豌豆象的博客 2192

android程序db文件用什么编辑器,在 Android Studio 上调试数据库 ( SQLite )

以前 Eclipse 时代,调试 SQLite 都是将数据库文件导出到电脑,然后再用软件打开查看。现在我们用 Android Studio,有没有更方便的方法呢?SQLScout安装SQLScout 是一个 Android Studio 的插件,通过点击:Setting —> Plugings —> Browse Repositories搜索 SQLScout 安装即可。要是下载不动,...

weixin_33344952的博客 910

QGIS004:【05矢量属性表】-保留字段、删除字段、添加唯一值索引字段、添加字段到属性表、添加自增量字段、添加XY字段到图层、文本型转浮点型、重构字段、重命名字段

摘要:QGIS矢量属性表工具箱包括保留字段、删除字段、添加唯一值索引字段、添加字段到属性表、添加自增量字段、添加XY字段到图层、文本型转浮点型、重构字段、重命名字段等选项,本文介绍各选项的基本操作。

qq_31762031的博客 2312
上一篇: android上下文 判断两个context是否相同
下一篇: Android 访问网络图片
Warkey_Song
博客等级 码龄14年 3粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值