一.SQLite的介绍1.SQLite简介SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、PHP、Java、C++、.Net等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。2.SQLite的特点:轻量级SQLite和C/S模式的数据库软件不同,它是进程内的数据库引擎,因此不存在数据库的客户端和服务器。使用SQLite一般只需要带上它的一个动态库,就可以享受它的全部功能。而且那个动态库的尺寸也挺小,以版本3.6.11为例,Windows下487KB、Linux下347KB。不需要安装SQLite的核心引擎本身不依赖第三方的软件,使用它也不需要安装。有点类似那种绿色软件。单一文件数据库中所有的信息(比如表、视图等)都包含在一个文件内。这个文件可以自由复制到其它目录或其它机器上。跨平台/可移植性除了主流操作系统windows,linux之后,SQLite还支持其它一些不常用的操作系统。弱类型的字段同一列中的数据可以是不同类型开源这个相信大家都懂的!3.SQLite数据类型一般数据采用的固定的静态数据类型,而SQLite采用的是动态数据类型,会根据存入值自动判断。SQLite具有以下五种常用的数据类型:NULL:这个值为空值VARCHAR(n):长度不固定且其最大长度为n的字串,n不能超过4000。CHAR(n):长度固定为n的字串,n不能超过254。INTEGER:值被标识为整数,依据值的大小可以依次被存储为1,2,3,4,5,6,7,8.REAL:所有值都是浮动的数值,被存储为8字节的IEEE浮动标记序号.TEXT:值为文本字符串,使用数据库编码存储(TUTF-8,UTF-16BEorUTF-16-LE).BLOB:值是BLOB数据块,以输入的数据格式进行存储。如何输入就如何存储,不改变格式。DATA:包含了年份、月份、日期。TIME:包含了小时、分钟、秒。相信学过数据库的童鞋对这些数据类型都不陌生的!!!!!!!!!!二.SQLiteDatabase的介绍Android提供了创建和是用SQLite数据库的API。SQLiteDatabase代表一个数据库对象,提供了操作数据库的一些方法。在Android的SDK目录下有sqlite3工具,我们可以利用它创建数据库、创建表和执行一些SQL语句。下面是SQLiteDatabase的常用方法。SQLiteDatabase的常用方法方法名称方法描述openOrCreateDatabase(Stringpath,SQLiteDatabase.CursorFactoryfactory)打开或创建数据库insert(Stringtable,StringnullColumnHack,ContentValuesvalues)添加一条记录delete(Stringtable,StringwhereClause,String[]whereArgs)删除一条记录query(Stringtable,String[]columns,Stringselection,String[]selectionArgs,StringgroupBy,Stringhaving,StringorderBy)查询一条记录update(Stringtable,ContentValuesvalues,StringwhereClause,String[]whereArgs)修改记录execSQL(Stringsql)执行一条SQL语句close()关闭数据库1、打开或者创建数据库在Android中以使用SQLiteDatabase的静态方法openOrCreateDatabase(Stringpath,SQLiteDatabae.CursorFactoryfactory)打开或者创建一个数据库。它会自动去检测是否存在这个数据库,如果存在则打开,不存在则创建一个数据库;创建成功则返回一个SQLiteDatabase对象,否则抛出异常FileNotFoundException。下面是创建名为“stu.db”数据库的代码:db=SQLiteDatabase.openOrCreateDatabase(/data/data/com.lingdududu.db/databases/stu.db,null);2、创建表创建一张表很简单。首先,编写创建表的SQL语句,然后,调用SQLiteDatabase的execSQL()方法来执行SQL语句便可以创建一张表了。下面的代码创建了一张用户表,属性列为:_id(主键并且自动增加)、sname(学生姓名)、snumber(学号)privatevoidcreateTable(SQLiteDatabasedb){//创建表SQL语句Stringstu_table=createtableusertable(_idintegerprimarykeyautoincrement,snametext,snumbertext);//执行SQL语句db.execSQL(stu_table);}3、插入数据插入数据有两种方法:①SQLiteDatabase的insert(Stringtable,StringnullColumnHack,ContentValuesvalues)方法,参数一是表名称,参数二是空列的默认值,参数三是ContentValues类型的一个封装了列名称和列值的Map;②编写插入数据的SQL语句,直接调用SQLiteDatabase的execSQL()方法来执行第一种方法的代码:privatevoidinsert(SQLiteDatabasedb){//实例化常量值ContentValuescValue=newContentValues();//添加用户名cValue.put(sname,xiaoming);//添加密码cValue.put(snumber,01005);//调用insert()方法插入数据db.insert(stu_table,null,cValue);}第二种方法的代码:privatevoidinsert(SQLiteDatabasedb){//插入数据SQL语句Stringstu_sql=insertintostu_table(sname,snumber)values('xiaoming','01005');//执行SQL语句db.execSQL(sql);}4、删除数据删除数据也有两种方法:①调用SQLiteDatabase的delete(Stringtable,StringwhereClause,String[]whereArgs)方法,参数一是表名称,参数二是删除条件,参数三是删除条件值数组;②编写删除SQL语句,调用SQLiteDatabase的execSQL()方法来执行删除。第一种方法的代码:privatevoiddelete(SQLiteDatabasedb){//删除条件StringwhereClause=_id=?;//删除条件参数String[]whereArgs={String.valueOf(2)};//执行删除db.delete(stu_table,whereClause,whereArgs);}第二种方法的代码:privatevoiddelete(SQLiteDatabasedb){//删除SQL语句Stringsql=deletefromstu_tablewhere_id=6;//执行SQL语句db.execSQL(sql);}5、修改数据修改数据有两种方法:①调用SQLiteDatabase的update(Stringtable,ContentValuesvalues,StringwhereClause,String[]whereArgs)方法。参数是表名称,参数是更行列ContentValues类型的键值对(Map),参数是更新条件(where字句),参数是更新条件数组。②编写更新的SQL语句,调用SQLiteDatabase的execSQL执行更新。第一种方法的代码:privatevoidupdate(SQLiteDatabasedb){//实例化内容值ContentValuesvalues=newContentValues();//在values中添加内容values.put(snumber,101003);//修改条件StringwhereClause=id=?;//修改添加参数String[]whereArgs={String.valuesOf(1)};//修改db.update(usertable,values,whereClause,whereArgs);}第二种方法的代码:privatevoidupdate(SQLiteDatabasedb){//修改SQL语句Stringsql=updatestu_tablesetsnumber=654321whereid=1;//执行SQLdb.execSQL(sql);}6、查询数据在Android中查询数据是通过Cursor类来实现的,当我们使用SQLiteDatabase.query()方法时,会得到一个Cursor对象,Cursor指向的就是每一条数据。它提供了很多有关查询的方法,具体方法如下:publicCursorquery(Stringtable,String[]columns,Stringselection,String[]selectionArgs,StringgroupBy,Stringhaving,StringorderBy,Stringlimit);各个参数的意义说明:①table:表名称②columns:列名称数组③selection:条件字句,相当于where④selectionArgs:条件字句,参数数组⑤groupBy:分组列⑥having:分组条件⑦orderBy:排序列⑧limit:分页查询限制⑨Cursor:返回值,相当于结果集ResultSetCursor是一个游标接口,提供了遍历查询结果的方法,如移动指针方法move(),获得列值方法getString()等.Cursor游标常用方法方法名称方法描述getCount()获得总的数据项数isFirst()判断是否第一条记录isLast()判断是否最后一条记录moveToFirst()移动到第一条记录moveToLast()移动到最后一条记录move(intoffset)移动到指定记录moveToNext()移动到下一条记录moveToPrevious()移动到上一条记录getColumnIndexOrThrow(StringcolumnName)根据列名称获得列索引getInt(intcolumnIndex)获得指定列索引的int类型值getString(intcolumnIndex)获得指定列缩影的String类型值下面就是用Cursor来查询数据库中的数据,具体代码如下:privatevoidquery(SQLiteDatabasedb){//查询获得游标Cursorcursor=db.query(usertable,null,null,null,null,null,null);//判断游标是否为空if(cursor.moveToFirst(){