`

Android 小项目之--SQLite 使用法门 (附源码)

阅读更多
每个应用程序都要使用数据,Android应用程序也不例外,Android使用开源的、与操作系统无关的SQL数据库 --大名鼎鼎的SQLite。SQLite是一款轻量级数据库,它的设计目的是嵌入式,而且它占用的资源非常少,在嵌入式设备中,可能只需要几百KB,这也是 Android 系统采用 SQLite 数据库的原因之一吧。

简介

    * 轻量级
      使用 SQLite 只需要带一个动态库,就可以享受它的全部功能,而且那个动态库的尺寸想当小。
    * 独立性
      SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的“安装”。
    * 隔离性
      SQLite 数据库中所有的信息(比如表、视图、触发器等)都包含在一个文件夹内,方便管理和维护。
    * 跨平台
      SQLite 目前支持大部分操作系统,不至电脑操作系统更在众多的手机系统也是能够运行,比如:Android。
    * 多语言接口
      SQLite 数据库支持多语言编程接口。
    * 安全性
      SQLite 数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只能有一个可以写入数据。


继承 SQLiteOpenHelper 类实现的 DBRouteHelper 类。

package com.stark.itqs.util;

import android.content.ContentValues;
import android.content.Context;
import android.content.pm.FeatureInfo;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.text.format.Time;

/**
*  SQLite工具类 用于数据库表的增删改查操作
* @author WangYue
* @date 2010-3-26
*/
public class DBBusHelper extends SQLiteOpenHelper {
//定义常量信息
private final static String DATABASE_NAME="itqs";  //数据库名称
    private final static int DATABASE_VERSION=1; //数据库版本号
    private final static String TABLE_NAME="route"; //数据库中表名称
    public final static String FIELD_PID="pid";  //route表中pid字段 用于标识父类编号
    public final static String FIELD_ID="id"; //route表中id字段 用于标识表中编号
    public final static String FIELD_NAME="name"; //站点名称
    public final static String FIELD_ARRIVAL_TIME="arrival_time"; //到达该站的时间
    public final static String FIELD_TRALVEL_TIME="travel_time"; //距下一站的时间
   
    /**
     * 构造函数
     * @param context
     */
    public DBBusHelper(Context context)
    {
    /*
    * 第一个参数(context):to use to open or create the database
    * 第二个参数(name):of the database file, or null for an in-memory database
    * 第三个参数(factory):to use for creating cursor objects, or null for the default
    * 第四个参数(version):number of the database (starting at 1); if the database is older, onUpgrade(SQLiteDatabase, int, int) will be used to upgrade the database
    */
        super(context, DATABASE_NAME,null, DATABASE_VERSION);
    }
   
   
    /**
     * 创建数据库方法
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
    //创建数据库语句
        String sql="Create table "+TABLE_NAME+"("+FIELD_ID+" integer primary key autoincrement,"
        +FIELD_PID+" integer,"
        +FIELD_NAME+"varchar(20)"
        +FIELD_ARRIVAL_TIME+"varchar(20)"
        +FIELD_TRALVEL_TIME+" varchar(20) );";
        //执行创建表
        db.execSQL(sql);
       
        
    }

    /**
     * 更新数据库表操作
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    //数据库语句
        String sql=" DROP TABLE IF EXISTS "+TABLE_NAME;
        //执行数据库语句操作
        db.execSQL(sql);
        //更新SQLiteDatabase
        onCreate(db);
    }

    /**
     * 查询数据方法
     * @return Cursor
     */
    public Cursor select()
    {
    //取得SQLiteDatabase
        SQLiteDatabase db=this.getReadableDatabase();
        //取得Cursor游标,根据字段id升序查询
        /**
         * 第一个参数:表明
         * 第二个参数:结果集列表列中显示的字段。null:表示全部显示;String[] columns:你想显示的字段
         * 第三个参数:返回结果中行数。null:表示全部显示;String selection:指定显示的行数
         * 第四个参数:?占位符,用于替换value是中的值。null:表示禁止?占位符;String[] selectionArgs:指定?占位符
         * 第五个参数:是否将行分组显示。null:不分组;String groupBy:分组
         * 第六个参数:分组条件。null:代表没有分组条件;String having:分组条件
         * 第七个参数:行显示顺序(升序|降序)。null:表示使用默认的排序方式;String orderBy:具体排序方式。
         */
        Cursor cursor=db.query(TABLE_NAME,null, null, null, null, null,  "id asc");
        //返回从cursor
        return cursor;
    }
   
   /**
    * 插入数据方法
    * @param pid 父编号
    * @param name 站点名称
    * @param arrival_time 到达时间
    * @param travel_time  距下一站的时间
    * @return rowNumber 返回所插入的行数
    */
    public long insert(Integer pid,String name,String arrival_time,String travel_time )
    {
    //取得SQLiteDatabase
        SQLiteDatabase db=this.getWritableDatabase();
        //创建ContentValues,用于存放插入字段信息
        ContentValues cv=new ContentValues();
        //将字段信息放入发哦ContentValue中
        cv.put(FIELD_PID, pid);
        cv.put(FIELD_NAME, name);
        cv.put(FIELD_ARRIVAL_TIME, arrival_time);
        cv.put(FIELD_TRALVEL_TIME, travel_time);
        //执行插入操作
        /**
         * 第一个参数:表名
         * 第二个参数:如果初始化值为空时,就将该设置成null。
         * 第三个参数:ContentValues
         */
        long rowNumber=db.insert(TABLE_NAME, null, cv);
        return rowNumber;
    }
   
  
    /**
     * 删除方法
     * @param pid
     * @param id
     */
    public void delete(int pid,int id)
    {
    //取得SQLiteDatabase对象
        SQLiteDatabase db=this.getWritableDatabase();
        //删除条件(利用占位符?操作)
        String where=FIELD_ID+"=?,"+FIELD_PID+"=?";
        //删除条件参数
        String[] whereValue={Integer.toString(id),Integer.toString(pid)};
        //执行删除操作
        /**
         * 第一个参数:表名称
         * 第二个参数:SQL条件 需用利用占位符?操操作
         * 第三个参数:SqL条件参数
         */
        db.delete(TABLE_NAME, where, whereValue);
    }
   
    /**
     * 更新方法
     * @param id
     * @param pid
     * @param name
     * @param arrival_time
     * @param travel_time
     * @return rowNumber 返回所插入的行数
     */
   
    public long update(Integer id,Integer pid,String name,String arrival_time,String travel_time )
    {
      //取得SQLiteDatbase对象
        SQLiteDatabase db=this.getWritableDatabase();
        //SQL语句更新条件 ,利用占位符?
        String where=FIELD_ID+"=?";
        //设置SQL更新条件参数
        String[] whereValue={Integer.toString(id)};
        //创建ContentValues对象 ,用于存储更新的字段信息
        ContentValues cv=new ContentValues();
        //将所要更新的信息放入到cv对象中
        cv.put(FIELD_PID, id);
        cv.put(FIELD_NAME, name);
        cv.put(FIELD_ARRIVAL_TIME,arrival_time);
        cv.put(FIELD_TRALVEL_TIME, travel_time);
        //执行更新操作
        /**
         * 第一个参数:表名称
         * 第二个参数:ContentValues
         * 第三个参数:SQL where条件
         * 第四个参数:SQL where 条件参数
         */
        long rowNumber=db.update(TABLE_NAME, cv, where, whereValue);
return rowNumber;
    }


}

PS:
1,如果进入onCreate()函数,不存在此数据库则创建,如果存在此数据库则打开连接,只要进入此方法就可以用打开的连接获得getWritableDatabase()或getReadableDatabase()这两个方法。
2, ContentValue 其实可就是一个 HashTable,Key值是字段名称,Value 值是字段的值。通过 ContentValues 的put 方法就可以把数据库放到 ContentValue 对象中,然后插入到表中去。

3,在 Android 中查询数据是通过 Cursor 类来实现的,当我们使用SQLiteDatabase.query()方法时,会得到一个Cursor对象,Cursor指向的就是每一条数据。它提供了很多有关查询的方法,具体截图如下:


  • 大小: 113.9 KB
  • 大小: 69.7 KB
0
4
分享到:
评论

相关推荐

    Android代码-react-native-sqlite-storage

    react-native-sqlite-storage SQLite3 Native Plugin for React Native for both Android (Classic and Native) and iOS Inspired by fantastic work done by Chris Brody I did not want to re-invent the wheel. ...

    android-database-sqlcipher-4.4.0+sqlite-2.1.0.zip

    android-database-sqlcipher-4.4.0和sqlite-2.1.0 官网下载太慢了,还总是下不下来,终于下载下来就分享出来。 安装清参考博客:https://blog.csdn.net/zdwcmy/article/details/106990422

    Android高级应用源码-AndroidInject增加sqlite3数据库映射注解(ORM).zip

    这个压缩包"Android高级应用源码-AndroidInject增加sqlite3数据库映射注解(ORM).zip"提供了一个示例,展示了如何在Android项目中使用SQLite3数据库,并通过ORM(对象关系映射)技术来简化数据库操作。ORM允许开发者...

    Android高级应用源码-AndroidInject增加sqlite3数据库映射注解(ORM).rar

    这个压缩包"Android高级应用源码-AndroidInject增加sqlite3数据库映射注解(ORM).rar"提供了一个示例,展示了如何在Android项目中使用SQLite3数据库,并结合ORM(对象关系映射)技术,通过注解的方式简化数据库操作。...

    java项目之JSP-JTBC-CMS(SQLITE)源码.zip

    java项目之JSP_JTBC_CMS(SQLITE)源码java项目之JSP_JTBC_CMS(SQLITE)源码java项目之JSP_JTBC_CMS(SQLITE)源码java项目之JSP_JTBC_CMS(SQLITE)源码java项目之JSP_JTBC_CMS(SQLITE)源码java项目之JSP_JTBC_CMS(SQLITE)...

    Android储存---SQLite数据库的简单使用,实现增删改查

    首先,我们需要在Android项目中创建一个SQLite数据库。这通常通过继承`SQLiteOpenHelper`类来完成。`SQLiteOpenHelper`有两个关键的方法:`onCreate()`和`onUpgrade()`。`onCreate()`方法在数据库首次创建时调用,...

    Android中数据存储--采用SQLite存储数据及在SDCard中创建数据库

    首先,我们需要在Android项目中创建一个SQLite数据库。这通常通过实现`SQLiteOpenHelper`的子类来完成。`SQLiteOpenHelper`负责创建、升级和管理数据库。在这个子类中,我们需要重写`onCreate()`方法来创建数据库的...

    Android学习笔记-SQLite介绍-以及使用Sqlite-进行数据库的创建-完成数据.pdf

    Android学习笔记-SQLite介绍-以及使用Sqlite-进行数据库的创建-完成数据.pdf

    Android-sqlite-android一个AndroidSQLite支持库

    在压缩包`requery-sqlite-android-2209ef4`中,可能包含了`sqlite-android`的特定版本源码或者库文件,开发者可以研究源码以了解更多底层实现细节,或者直接将库文件集成到项目中使用。 总之,`sqlite-android`是一...

    Android SQLite源码+说明

    总的来说,这个资料包为Android开发者提供了一个深入了解SQLite的机会,无论是从理论层面的文档学习,还是实践层面的源码分析,都能帮助开发者提高在Android平台上使用SQLite的技能,从而编写出更加高效和可靠的...

    android-database-sqlcipher-4.4.0+androidx-\sqlite-2.1.0.zip

    android-database-sqlcipher-4.4.0、sqlite-2.1.0

    C#开发的WinForm---SQLite加密程序

    在本文中,我们将深入探讨如何使用C#进行WinForm应用程序开发,特别关注如何构建一个SQLite加密程序。SQLite是一个轻量级、开源的关系型数据库,它被广泛用于桌面应用和嵌入式系统,因为它无需服务器进程即可运行。...

    开源项目-cznic-sqlite3shell.zip

    开源项目-cznic-sqlite3shell.zip,sqlite3shell is a mechanically produced Go port of shell.c, part of the SQLite project

    Android 项目源码-备忘录(附源码).zip

    这个压缩包文件“Android 项目源码-备忘录(附源码).zip”包含了一个基于Android开发的备忘录应用的完整源代码。这是一个非常实用的学习资源,特别是对于那些正在学习Android开发或者需要进行课程设计、毕业设计...

    androidStudio--基于SQLite数据库的学生信息管理系统

    这是基于android开发的学生信息管理系统,包括学生的增加、...除此之外,该系统应用到了手机内置的sqlite数据库来进行数据的存储,所以,是学生学习android的一次不错的选择,应用工具androidStudio,编写语言,java

    Android 项目源码-考勤助手(附源码).zip

    《Android项目源码:考勤助手的深度解析与实践》 在移动开发领域,Android作为全球最广泛使用的操作系统之一,其应用开发需求日益增长。尤其是对于学习和实践Android开发的学生和开发者,拥有一个完整的项目源码是...

    android-sqlite-encrypt

    在使用"android-sqlite-encrypt"时,首先需要在项目中引入相应的依赖,这通常通过Gradle构建系统来完成。添加依赖后,创建和打开数据库的方式与未加密的SQLite数据库类似,但在初始化时需要提供一个预共享密钥,这个...

    Android高级应用源码-超简单的SQLite的使用.zip

    这个"Android高级应用源码-超简单的SQLite的使用.zip"压缩包可能包含了一个简单的Android应用示例,展示了如何在应用程序中集成SQLite来管理数据。下面我们将详细探讨SQLite在Android中的使用以及相关知识点。 首先...

    Android高级应用源码-Android轻量级sqlite orm框架.zip

    这个压缩包"Android高级应用源码-Android轻量级sqlite orm框架.zip"很可能包含了一个适用于Android的轻量级SQLite ORM框架的示例代码,帮助开发者理解如何在Android应用中高效地使用SQLite。 首先,我们来深入理解...

    前端开源库-anysql-cordova-sqlite

    在`anysql-cordova-sqlite-master`压缩包中,可能包含示例代码、README文件以及库的源代码,可以帮助开发者更好地理解和使用这个库。 总的来说,`anysql-cordova-sqlite`是前端开发者在构建Cordova应用时,处理本地...

Global site tag (gtag.js) - Google Analytics