SQLite数据库是一个轻量级的数据库,但它的功能很强大,并且使用起来也比较方便。它的操作一般包括:创建数据库、打开数据库、创建表、向表中添加数据、修改表中的数据、从表删除数据、删除某个表、查询数据、关闭数据库和删除数据库。

  1.创建和打开数据库

  在Android中创建和打开一个数据库都可以用以下方法:

  其中,name是数据库的名称,mode表示对数据库操作的权限,这与7.2.2节中的mode一样,这里不再详细说明。factory表示的是一个可选的工厂类,用来实例化一个查询数据的光标。

  上面的方法中,会自动检索数据库的名称(name)。如果数据库存在,则会打开数据库;如果不存在,就会创建一个数据库。如果创建成功,则返回一个SQLiteDatabase对象;反之,会抛出异常。下面来创建一个数据库名为“SQLite_Demo.db”的数据库。返回一个SQLiteDatabase对象demoSQLite。

  demoSQLite = Context..db“,Context. MODE^PRIVATE, 

  2.创建表

  上面已经创建了数据库,但怎么在数据库中创建一个表呢?语法如下:

  demoSQLite.execSQL(String sql);  一 !  

  参数sql表示创建数据库的语句。例如,创建一个名称为demo的表,这个表包括主键_id和内容content。语句如下:

  E

  String sql = “create table demo(_id integer primary key autoincrement , content

  J” ‘

  demoSQLite.execSQL(sql); …一 _ _ ,」 ‘

  3.向表中添加数据

  向表中添加数据有两种方法:一种是用insert方法来添加数据,另一种是在execSQL方法中写SQL语句实现添加。

  (1)使用insert方法实现添加。用这个方法要求把数据放在ContentValues中。Contentvalues类其实就跟Map类一样,保存的是“键-值”对,key是键,value是值。它的键一般都是String类型,值都是基本类型。ContentValues是通过put方法把数据保存到ContentValues类中,然后通过insert方法添加到表中,具体语法如下:

‘~~ ues values^ ^ ^new Contentvalues ();

Values.put(String key,Stringf values);

_ __demoSQLite . ingp匚匸table. String丄IColurnnHack. Con一values、

  其中,table指的是表名,nullColumnHack指的是不允许插入一个完全的空行,如果nullColumnHack是个空值,要明确指定为null值。values指的是ContentValues对象。

  接下来看一段代码,向刚才创建的表中添加一条数据,代码如下:

P ContentVaTues values = ne^ContentVaTlues () ;

| values .put (“content0, n这仅仅是测试数据而已”);

| demoSOLj■匕e * iase工t C”deino”・ 口Q]■丄■ values、#

  (2)使用execSQL方法向表中添加数据,这个方法就没上一个方法那么麻烦。只要把写好的SQL语句插入进去就行了,看下面的例子:

String sql = “insert into demo (content) values (,这仅仅是测试数据而已’)

demoSQLite.execSQL(sql);

  4.修改表中的数据

  向表中添加了数据之后,如果发现有些数据是错误的,这时就需要修改表中的数据oSQLite数据库提供了update方法来修改需要修改的数据。语法如下:

ng table, Con tentVa 丄 ues values, String whereClause^™String~fT

whereArfls、 —一 一 一一一 一 一  … 一    一一 :

  其中,tbale指的是表名,values指的是ContentValues» whereClause指的是修改的条件,whereArgs指的是数据更新时的冲突条件,一般为null。

  下面来修改一些demo表中的数据,代码如下:

j ontentValues va丄ues = new ContentValues(); .”

values.put (,(content”,”数据已经修改”);

  运行这段代码后,content里面的值将变为“数据已经修改”。

  5.从表中删除数据

  在SQLite中可以用delete方法删除数据,也可以用execSQL方法删除,这个方法上面已经介绍过,只是SQL语句而已,这里就不重复了。主要来看看delete方法,语法如下: 

1njj~~wReEeCia6se,~~ 诵^- —3

  其中,tbale指的是表名,whereClause指的是删除条件,whereArgs指的是数据删除时的冲突条件,一般为null。下面删除“ _id=l”的数据,一般是根据id来删除的。

  6.删除某个表

  删除某个指定的表用execSQL方法来实现。例如,删除已经创建的表,代码如下:

stHI^^5^’Td?5^tZwrdSiio”,- 一一

  7.关闭数据库

  关闭数据库非常重要,如果用完了数据库没有关闭,可能会抛出异常SQLiteException。其语法如下:

derrtoSQLi te ・ close ();

  8.删除数据库

  要删除某一个数据库,可以直接使用deleteDatabase,语法如下:

Context.deleteDatabase(String databaseName);

  现在我们来删除已经创建的数据库SQLite_Demo.db,具体代码如下:

Context:.deleteD菲abase “sSFite’Demca.db”): 「 ~~ . 1

  9.查询数据

  Android中查询SQLite中的数据是通过Cursor(游标)类来实现的,当使用SQLiteDatabase.rawQuery()方法查询时,会返回一个Cursor对象,Cursor指向的就是一条数据,Cursor这个类提供了很多有关查询数据的方法,具体的方法如表7.2所示。

        表7.2  Cursor常用方法说明表

  方法                      说明

 close()                    关闭游标,释放资源

 getColumnCount()              返回所有列的总数

 getColumnIndex(String columnName) 返回指定列的名称,如果不存在则返回-1

 move()                    以当前位置为参考,将Cusor移动到指定位置,成功则返回true,否则返回false

 moveToFirst()              将Cursor移动到第一行,成功则返回true,否则返回false

 moveToLast()              将Cursor移动到最后一行,成功则返回true,否则返回fhlse

 moveToNexJO              移动Cursor到下一行,成功则返回true,否则返回false

 moveToPreviousO              移动Cursor到上一行,成功则返回true,否则返回false

 moveToPosition(int position) 移动Cursor到指定的位置,成功则返回true,否则返回fhke

 isBeforeFirst()              返回指向Cursor是否在原来的位置是第一排

 isAfterLast()              返回指向Cursor是否在最后一排的位置

 isFirst()              返回是否Cursor是指向第一排

 isLast()              返回是否Cursor是指向最后一排

 isClosed()              返回Cursor是否关闭

 isNullQ                     返回指定位置的值是否为Null

 getCount()              返回Cursor中的行数

  表7.2中的方法是Cursor类比较常用的方法,而查询数据返回Cursor类的语法如下:

Cursor cursor = demoSQLite. rawQuery (String sql. String[] selectionArgs)

  其中,sql指的是查询语句,selectionArgs指的是查询条件。下面来看看查询表demo中的数据:

Cursor cursor = demoSQLite.rawQuery(“select * from demo”,null);

if(cursor!=null){

if(cursor.moveToFirst){

do{

int numColumn = cursor. getColumnlndex(“content”);

String data = cusor.getString(numColumn);

}while(cursor ・moveToNext ());

}

}

  上面的代码就是取得表中某一列的数据,当游标不为空时,根据游标中的内容来循环,直到最后一个,这样就取出一列的所有值。