前言:Android中提供了对SQLite数据库的支持。开发人员可以在应用中创建和操作自己的数据库来存储数据,并对数据进行操作。
要在应用中使用SQLite数据库,可以通过创建一个继承SQLiteOpenHelper类的辅助类,然后重写onCreate()方法,例如:
package com.test.testapplication; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; /** * Created by linyingkun on 2017/3/3. */ public class DBHelper extends SQLiteOpenHelper { private Context mContext; //直接指定数据库名称、版本号。也可以使用默认生成的, //带有数据库名、数据库版本号等参数的构造方法,然后 //在获取辅助类对象的时候再动态指定名称和版本号。 public DBHelper(Context context) { super(context, "testdb", null, 1); mContext = context; } //在onCreate()方法里面执行SQL语句,如建表 //如果数据库和表都已存在,则该方法不会再执行 @Override public void onCreate(SQLiteDatabase db) { String create_table = "CREATE TABLE students(id INTEGER PRIMARY KEY AUTOINCREMENT," + "name VARCHAR(20),age VARCHAR(20));"; db.execSQL(create_table); } //当数据库版本发生变化时,该方法被调用 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }
2.1 创建数据库
完成步骤一后,在应用中需要使用数据库的地方,先获得一个辅助类对象,然后调用getReadableDatabase()或者getWriteableDatabase()方法创建数据库对象。通过此步骤,如果系统中不存在同名数据库,则将在系统的/data/data/包名/databases目录下创建一个辅助类中指定名称的数据库,同时onCreate()方法会被调用。但是,如果系统中已存在同名数据库,则onCreate()方法不会再被调用,只有当数据版本发生变化时,onUpgrade()方法会被调用。
DBHelper dbHelper = new DBHelper(this); SQLiteDatabase writableDatabase = dbHelper.getWritableDatabase();
2.2 对数据库中数据的操作
要对数据库中的数据进行操作,可以直接使用数据库对象执行对应的SQL语句,也可以通过ORM(对象关系映射)的方法。下面一起来看示例:
2.2.1 增
普通方法:
//在数据库表中插入数据的SQL语句,格式为 //insert into 表名 (字段1,字段2,...) values ("数据1","数据2",...) //注意字段和数据要一一对应。 String insert = "INSERT INTO students (name,age) VALUES ('s1','20')"; //通过数据库对象调用execSQL()方法执行SQL语句 writableDatabase.execSQL(sql);
ORM方法:
//获取ContentValues对象 ContentValues contentValues = new ContentValues(); //向ContentValues对象插入想要插入数据库表的数据 contentValues.put("name", "s2"); contentValues.put("age", "21"); //使用数据库对象调用insert()方法将Contentvalues对象插入对应的表中 writableDatabase.insert("students", null, contentValues);
2.2.2 查
普通方法
//SQL查询语句,格式为 //select 字段名(*号表示查询所有字段) from 表名 where 条件(如name="s1",省略条件则查询所有数据) String query = "SELECT * FROM students"; //使用数据库对象的rawQuery()方法执行查询语句,返回一个Cursor对象 //参数1:要执行的SQL语句 //参数2:用于指定了查询条件,如没有条件则使用null。比如,查询语句 //SELECT * FROM students WHERE name="s1",可写成 //SELECT * FROM students WHERE name=?,然后在参数2的位置,通过new String[]{"s1"}指定条件。 Cursor cursor = writableDatabase.rawQuery(query, null); //将cursor移动到第一位 boolean b = cursor.moveToFirst(); //如果b为true,表示有数据存在 while (b) { //根据字段名获取该字段对应的下标index int nameIndex = cursor.getColumnIndex("name"); int ageIndex = cursor.getColumnIndex("age"); //根据字段下标获得对应的数据 String name = cursor.getString(nameIndex); String age = cursor.getString(ageIndex); //将cursor往下移动一位 b = cursor.moveToNext(); }
ORM方法:
//使用数据库对象的query()方法执行查询,其中各参数分别代表 //参数1:要查询的数据库表的表名 //参数2:要查询的字段,String数组。如new String[]{"name","age"}, //参数3:查询条件。String字符串,如name //参数4:条件语句占位符的填充,String数组。 //参数5:分组语句 //参数6:分组语句占位符的填充 //参数7:排序 //以上参数除了表名必须指定,其他的若无指定,都可以使用null。 Cursor cursor = writableDatabase.query("students", new String[]{"name", "age"}, "name=?", new String[]{"s1"}, null, null, null); boolean b = cursor.moveToFirst(); while (b) { int nameIndex = cursor.getColumnIndex("name"); int ageIndex = cursor.getColumnIndex("age"); String name = cursor.getString(nameIndex); String age = cursor.getString(ageIndex); b = cursor.moveToNext(); Log.e("MainActivity", name + ":" + age); }
2.2.3 删
普通方法
//删除数据的SQL语句,格式为 //delete from 表名 where 条件 String delete = "DELETE FROM students WHERE name=?"; //使用数据库对象调用execSQL()方法执行SQL语句。 //参数1:要执行的SQL语句 //参数2:指定条件。可以直接写在SQL语句中,也可以像这里一样, //在语句中用 ?占位符替代具体条件,然后在参数2中再指定。 //注:如果不指定条件,则SQL语句为 DELETE FROM students, //调用执行语句的方法为 writableDatabase.execSQL(delete); //此时整张表的数据都会被删除。 writableDatabase.execSQL(delete, new String[]{"s1"});
ORM方法:
//使用数据库对象调用delete()方法。各参数分别表示 //参数1:表名 //参数2:条件语句 //参数3:条件占位符填充 writableDatabase.delete("students","name=?",new String[]{"s1"});
2.2.4 改
普通方法:
//修改数据的SQL语句,格式为 //update 表名 set 字段1="数据",字段2="数据",... where 条件 String update = "UPDATE students SET name=?,age=? WHERE id=?"; //使用数据库对象调用execSQL()方法。 writableDatabase.execSQL(update,new String[]{"小1","10","1"});
ORM方法:
//获取ContentValues对象ContentValues values =newContentValues();//向ContentValues对象插入要用于修改的数据values.put("name","小2");values.put("age","25");//使用数据库对象调用update()方法,各参数代表//参数1:表名//参数2:数据//参数3:条件语句//参数4:条件占位符填充writableDatabase.update("students",values,"id=?",newString[]{"26"});
后记:本篇简单记述了Android中SQLite数据库的使用方法。一般情况下,如果数据量不大,在代码中直接使用上述的方法不会出现什么问题。但是如果数据量很大,就有可能造成ANR或者程序崩溃。所以在使用SQLite数据库的时候需要谨慎。有条件的话,可以去更深入的学习一下数据库在实际开发中的使用技术。这样也可以有助于提升自己的技术水平。