gggggds 发表于 2016-12-1 06:21:13

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指向的就是每一条数据。它提供了很多有关查询的方法,具体截图如下:
页: [1]
查看完整版本: Android 小项目之--SQLite 使用法门 (附源码)