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.创建数据库

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();

 

C.插入数据(增加表记录)

Code:

Time time = new Time("GMT+8")//设置时间为第八时区标准时间

time.setToNow();//设置为系统当前时间

int year = time.year;

int month = time.month;

int day = time.monthDay;

int hour = time.hour;

int minute = time.minute;

int second = time.second;

DateBaseHelper db = new DateBaseHelper(getApplicationContext(),"student",null,1);

SQLiteDateBase db = dbHelper.getWritableDatabase();//注意此处是获取一个可写的数据库,因为是插入数据。

ContentValues values = new ContentValues();

values.put("name","zhangsan");

values.put("sex","male");

values.put("MyTime",year+"-"+month+"-"+day);

values.put("MyDate", hour+":"+minute+":"+sec);

db.insert("StudentInfo",null,values);

Toast.makeText(MySqliteActivity.this, "数据插入成功", Toast.LENGTH_SHORT).show();

 

D.修改数据

/**

*修改数据,就是根据一定的条件找到相应的记录,并修改该记录

*/

Code:

DateBaseHelper dbHelper = new DateBaseHelper(getApplicationContext(), "student",1);

SQLiteDatabase db = dbHelper.getReadableDatabase();

ContentValues values = new ContentValues();

values.put("name", "lisi");

values.put("sex","female");

values.put("MyTime", "2015-6-6");
values.put("MyDate", "21:21:12");

String whereClause = "id=?";

String[] whereArgs = {"8"};

db.update("StudentInfo",values,whereClause,whereArgs);

Toast.makeText(getApplicationContext,"第八行数据已更新",Toast.LENGTH_SHORT).show();

 

E.查询数据

Code:

DateBaseHelper dbHelper = new DateBaseHelper(getApplicationContext(),"student",null,1);

SQLiteDatebase db = dbHelper.getReadableDatabase();//得到一个可读的数据库

Cursor cursor = db.query("StudentInfo",new String[]{"id","name","sex","MyDate"},"name=?",new String[]{"zhangsan"},null,null,"MyDate");//query返回值为一个游标对象

while(cursor.moveToNext())//moveToNext:从第一行想下逐行扫描,到最后一行,如果没到最后一行则返回真,否则返回假

{

  String name = cursor.getString(cursor.getColumnIndex("MyDate"));//获取的值为MyDate这列的值(即日期值)

  Toast.makeText(getApplicationContext(),name,Toast.LENGTH_SHORT).show();

}

 

F.删除数据(库)

Code:

DateBaseHelper dbHelper = new DateBaseHelper(getApplicationContext(), "student", null, 2);

SQLiteDatabase db = dbHelper.getReadableDatabase();

String whereClause = "id=?"//?为占位符

String[] whereArgs = {"7"};//删除id=7的那行数据

db.delete("StudentInfo",whereClause,whereArgs);

Toast.makeText(getApplicationContext(),"第七条数据已经删除",Toast.LNEGTH_SHORT).show();

//deleteDatabase("student");//删除数据库(注意:是删除数据库,而不是删除数据库中的数据)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值