当前位置:数据库 > SQLite >>

Android中SQLite操作

一、SQLite简介
1.SQLite是一个轻量级的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式的产品中使用了它,这种数据库占用该资源很低,在嵌入式设备中,可能只要几百K的内存就够了,它能够支持Windows、Linux、Unix等等主流的操作系统,同时能够能够跟许多程序语言相结合,比如PHP,Java、C++、.Net等,还有ODBC接口。比起MySql、PostgreSQL这两款开源界著名的数据库管理系统来讲,它的处理速度比这两者都要快。
2.SQLite的特点
A.轻量级:
SQLite和C/S模式的数据库软件不同,它是进程内的数据库引擎,因此不存在数据库的客户端和服务端。使用SQLite只要带上它的一个动态库,就可以使用它的全部功能。而且这个动态库的尺寸也非常小,以版本3.6.11为例,Windows下为487K,Linux下为347K。
B.不需要安装:
SQLite的核心引擎不需要以来第三方软件,也不要安装,这一点类似绿色软件。
C.单一文件:
数据库中的所有信息(如表、视图等)都包含在一个文件内。这个文件可以自由复制或者移动到其他机器上。
D.跨平台/可移植性
除了支持Windows、Linux等主流操作系统外,SQLite还支持一些其他的不常用的操作系统。
E.弱类型的字段
同一列中的数据可以是不同类型
F.开源
这个不做过多说明,相信大家都懂的。
3.SQLite的数据类型
一般数据库采用的是固定的静态数据类型,而SQLite采用的是动态数据类型,即其会根据存入的值自动判断值得类型。SQLite具有以下集中常用数据类型:
  null:这个值为空值
  varchar(n):长度不固定,最大为n的字符串,n<=4000
  char(n):长度固定为n的字符串,n<=254
  integer:整数类型,不用过多说明
  real:所有值都是浮动的数值,被存储为8字节的IEEE浮动标记序号
  text 值为文本字符串,使用数据库编码存储(TUTF-8,UTF-16BE or UTF-16LE)
  blob:值为blob数据块,以输入的数据格式进行存储,怎样输入就怎样存储,不改变输入格式
  Data:包含年份、月份和日期,格式为XX-XX-XX(即年-月-日)
  Time:包含小时、分钟和秒,格式为XX:XX:XX(即小时:分钟:秒)
二、SQLiteDatabase的介绍
Android提供了创建和使用SQLite数据库的API。SQLiteDatabase是一个数据库对象,提供了操作数据库的一些方法。在android的SDK目录下有一个sqlite3工具,可以用它来创建数据库、创建表和执行一些SQL语句。下面是SQLiteDatabase的常用方法。
SQLiteDatabase的常用方法:

 
方法名称 方法描述 参数说明
openOrCreateDatabase(String path,SQLiteDatabase.CursorFactory factory) 打开或创建数据库 path:数据库所在的路径,factory:游标所在的位置(即第几行)
insert(Sting table,String nullColumnHack,CntentValues values) 添加一条记录 table:表的名称,nullColumnHack传空值,values:要修改的值(values.put(xx,xx),以键值对的形式)
,delete(String table,String whereClause,String[] whereArgs) 删除一条记录 table:同上,whereClause:where字句:即SQL语句中的条件,如“id=?",表示按id删除,whereArgs:删除条件,如new String[]{"1"}表示删除id=1的记录(或new String.valueof(1),表示将1转换成字符串)
query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy) 查询一条记录 table:同上,columns:要查询的列的名称,需要注意的是最后的orderBy,即按什么排序,是根据columns中的值来执行的,比如,要按MyTime(时间)排序,那么MyTime着一列的名字必须在columns中。selection:相当于where字句。selectionArgs:执行的条件.groupBy:分组。having:决定哪些列要包含在游标路径中,即若包含在路径中,则可以被游标扫描到,反之则否。orderBy:查询出的信息按什么排序
update(String table,ContentValues values,String whereClause,String[] whereArgs) 修改记录 table:同上。values:要更新的数据(以键值对的形式)。whereClause:WHERE字句。whereArgs:执行条件
excSQL(string sql) 执行一条SQL语句 sql:要执行的sql语句
close() 关闭数据库 无参
 


为了方便操作(如更新数据库等),通常从SQLiteOpenHelper这个助手类派生出一个子类。
1.从SQLiteOpenHelper这个助手类派生出一个子类。(DateBaseHelper.java)
public class DateBaseHelper extends SQLiteOpenHelper{
    /**
     * 在SQLiteOpenHelper的子类当中,必须有这个构造函数
     * @param context     当前的Activity
     * @param name        表的名字(而不是数据库的名字,这个类是用来操作数据库的)
     * @param factory      用来在查询数据库的时候返回Cursor的子类,传空值
     * @param version      当前的数据库的版本,整数且为递增的数
     */
    public DateBaseHelper(Context context, String name, CursorFactory factory,int version)
    {
        super(context, name, factory, version);//继承父类
        // TODO Auto-generated constructor stub
    }
/**
     * 该函数是在第一次创建数据库时执行,只有当其调用getreadabledatebase()
     * 或者getwrittleabledatebase()而且是第一创建数据库是才会执行该函数
     */
@Override
    public void onCreate(SQLiteDatabase db)
    {
        /**
         * 创建一个名为StudentInfo的表
         * id:主键,并且自动增加,编号
         * name:学生姓名
         * classId:班级
         * studyId:学号
         * sex:性别
         * MyTime:入学时间
         */
        // TODO Auto-generated method stub
        String sql = "create table StudentInfo(id integer primary key autoincrement,name varchar(20),sex varchar(20),MyTime Time,MyDate Date)";
   db.execSQL(sql);
    }
/**
*数据库更新函数,当数据库更新时会执行此函数
*/
@Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
    {
        // TODO Auto-generated method stub
        System.out.println("数据库已经更新");
        /**
         * 在此添加更新数据库是要执行的操作
         */
    }
}
2.实现各种功能(MySqliteActivity.java)
A.创建数据库 www.zzzyk.com
Code:
//MySqliteActivity.this:设备上下文,“student”:数据库的名字(注意和表的名字分清),1:数据库的版本号
DateBaseHelper dbHelper = new DateBaseHelper(MySqliteActivity.this,"student",null,1);
dbHelper.getReadableDatabase();//得到一个可读的数据库,需要注意的是,只有执行了这条语句后才能成功创建数据库,也就是说,上面的得到了一个DateBaseHelper助手类的对象实际上并没有创建数据库。
 
B.更新数据库
所谓更新数据库,即将数据库的版本号向上增加,在此需要注意的是,数据库的版本号只能是整数值,而且是递增的,如1,2,3等等。
Code:
DateBaseHelper dbHelper = new DateBaseHelper(getApplicationContext(),"student",null,2);
dbHelper.getReadableDatebase()

补充:移动开发 , Android ,
Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,