`

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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics