SQLite是一款轻型的数据库,主要用在嵌入式系统,它占用的资源非常低。SQLite不依赖第三方软件,也不需要安装。数据库中的信息都包含在一个文件中,这个文件可以自由地复制到其它目录或其它机器上。
在Android Studio中,SQLiteDatabase类表示数据库类。通过该类可以实现对数据库中数据的添加、删除、查询和修改等功能。
通过SQLiteDatabase类的静态方法openDatabase()打开数据库文件,使用静态方法openOrCreateDatabase()方法打开或创建数据库文件。
该方法的格式为
public static SQLiteDatabase openDatabase(
String path,
SQLiteDatabase.CursorFactory factory,
int flags);
其中,参数path表示要打开或者创建的数据库文件路径;factory表示一个可选的factory类,当开始查询时,可以通过该类来实例化cursor,默认将该参数设置为null;flags指定了访问数据库的模式,可以将该参数指定为OPEN_READWRITE、OPEN_READONLY和CREATE_IF_NECESSARY,这三个标志分别表示读写方式打开数据库、只读方式打开数据库以及如果数据库文件不存在,则创建数据库文件。该方法的返回值是打开或者创建的数据库文件。
SQLiteDatabase DB = SQLiteDatabase.openDatabase(getFilesDir()+"/info.db", null, SQLiteDatabase.CREATE_IF_NECESSARY);
以上代码的功能是在系统文件的目录下创建了打开一个名为”info.db”的数据库文件,如果该数据库文件不存在,则创建该文件。
该方法的格式为
public static SQLiteDatabase openOrCreateDatabase(
File file,
SQLiteDatabase.CursorFactory factory);
或者
public static SQLiteDatabase openOrCreateDatabase(
String path,
SQLiteDatabase.CursorFactory factory);
该方法相当于openDatabase()方法将第三个参数设置为CREATE_IF_NECESSARY。
SQLiteDatabase DB = SQLiteDatabase.openOrCreateDatabase(getFilesDir() + "/info.db", null);
操作数据库文件,实际上就是对数据库文件中的表和记录进行操作。
通过SQL语句在数据库文件中创建表,首先要构建SQL语句,之后通过SQLiteDatabase类执行该语句。
使用以下代码构建创建表的SQL语句。
String createSql = "create table user(_id integer primary key autoincrement, username, password)";
以上SQL语句的含义是,创建一个名为“user”的表,该表中的主键类型是整形,且是自动增长的;该表包含“username”域和“password”域。
通过SQLiteDatabase类的execSQL()方法来执行SQL语句。该方法的格式为
public void execSQL(String sql)
throws SQLException
其中,参数sql表示要执行的SQL语句。
DB.execSQL(createSql);
以上代码执行了创建表的SQL语句,DB是在“1 打开/创建数据库文件”中创建的数据库类的对象。
创建记录的方法与创建表的方法类似,首先构建SQL语句,之后执行该语句。
String insertSql = "insert into user(username, password) values(?,?)";
DB.execSQL(insertSql, new String[]{"yang", "123"});
以上代码的功能是在“user”表中插入了一个记录,该记录的username域的值是“yang”,“password”域的值是“123”。
String deleteSql = "delete from user where username=?";
DB.execSQL(deleteSql, new String[]{"yang"});
以上代码的作用是在user表中删除用户名为“yang”的记录。
String updateSql = "update user set username=?,password=? where _id=?";
DB.execSQL(updateSql, new String[]{"yang", "456", "0"});
以上代码的作用是将user表中ID为0的记录的”username”域的值设置为“yang”,“password”域得值设置为“456”。
与以上操作记录使用的方法不同,查询记录时使用的是SQLiteDatabase类的rawQuery()方法。该方法的格式为
public Cursor rawQuery(String sql,
String[] selectionArgs)
其中,参数sql指定了查询记录的SQL语句;selectionArgs指定了sql中包含的?所代表的值,如果sql中不包含?,则该参数可以设置为null。rawQuery()方法的返回值是查询到的结果,其类型为Cursor。
String selectSql = "select _id, username, password from user";
Cursor cursor = DB.rawQuery(selectSql, null);
以上代码的作用是查询表user中的所有记录,并将记录保存在cursor中。
调用SQLiteDatabase类的close()方法关闭打开的数据库。
DB.close();