SQLite是一款android系统内置的轻量级的关系型数据库。
一、通过SQLiteOpenHelper类创建数据库
1、新建类DatabaseHelper(可自己命名)继承SQLiteOpenHelper类复写onCreate方法和onUpgrade方法。2、复写四个参数的构造函数,四个参数分别为,Context(上下文)、name(数据库实例名字)、CursorFactory(查询时返回所用到)、version(版本号)。
3、在onCreate方法里,执行建表sql语句。
DatabaseHelper类代码如下
public class DatabaseHelper extends SQLiteOpenHelper{
private Context mContext;
//创建Book表的sql语句
private static final String CREATE_BOOK="create table Book (id integer primary key autoincrement,author text,price integer,name text)";
public DatabaseHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
mContext=context;
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_BOOK);
Toast.makeText(mContext, "create success", Toast.LENGTH_SHORT).show();
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
二、操作数据
QLiteOpenHelper类的getWriteableDataBase()方法返回一个SQLiteDataBase类的对象。
1、增加数据
新建ContentValues对象,调用put方法传入列名和值。
调用SQLiteDataBase类的insert方法来添加数据,此方法接受3个参数,分别为所操作的表名、在某些情况下让可为空的列自动赋值NULL(一般用不到次功能填入null即可)、ContentValues对象。
2、更新数据
新建ContentValues对象,调用put方法传入列名和值。
调用SQLiteDataBase类的update方法来更新数据,此方法接受4个参数,分别为所操作的表名、ContentValues对象、sql语句中的where条件(可以使用一个或多个"?"做为占位符)、字符串数组做为占位符的值。
3、删除数据
调用SQLiteDataBase类的delete方法来删除数据,此方法接受3个参数,分别为所操作的表名、sql语句中的where条件(可以使用一个或多个"?"做为占位符)、字符串数组做为占位符的值。
4、查询数据
调用SQLiteDataBase类的query方法来查询数据并返回一个Cursor对象。此方法的多种重载都具有很多参数,需要时可查询api文档,现例举一个来说明。
db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy);
7个参数,分别为表名、列名、where条件、where条件占位符的值、需要group by的列、having约束、order排序方式,相信理解它对于熟悉sql语句的同学们来说就更简单了。通过Cursor对象可将返回结果中的数据取出。
5、sql语句
对于喜欢使用sql语句来操作数据库的同学们来说,SQLiteDataBase类提供了execSQL方法来进行增加、更新、删除数据的操作,rawQuery方法来进行查询操作,这些方法均接受2个参数,分别是sql语句、sql语句占位符的值。
主活动onCreate方法代码如下:
private DatabaseHelper dbHelper;
private SQLiteDatabase db;
ContentValues value = new ContentValues();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取数据库
dbHelper = new DatabaseHelper(this, "Book.db", null, 4);
//获取SQLiteDatabase对象
db=dbHelper.getWritableDatabase();
//写入第一条数据
value.put("id", 10);
value.put("author", "tom");
value.put("price", 15);
value.put("name", "the one book");
db.insert("Book", null, value);
value.clear();
//写入第二条数据
value.put("id", 11);
value.put("author", "jack");
value.put("price", 20);
value.put("name", "the two book");
db.insert("Book", null, value);
value.clear();
//更新第一条数据的author
value.put("author", "mary");
String author[]={"tom"};
db.update("Book", value, "author=?", author);
//删除第二条数据
String name[]={"the two book"};
db.delete("Book", "name=?", name);
//查询数据
Cursor cs=db.query("Book", null, null, null, null, null, null);
if(cs.moveToFirst())
{
do{
//获取数据
int id=cs.getInt(cs.getColumnIndex("id"));
String authors=cs.getString(cs.getColumnIndex("author"));
int price=cs.getInt(cs.getColumnIndex("price"));
String names=cs.getString(cs.getColumnIndex("name"));
//输出数据
Log.d("MainActivity","id is "+id);
Log.d("MainActivity","author is "+authors);
Log.d("MainActivity","price is "+price);
Log.d("MainActivity","name is "+names);
}while(cs.moveToNext());
}
Toast.makeText(this, "create success", Toast.LENGTH_SHORT).show();
}
得到输出:
新建DatabaseHelper类对象时,传入的版本号比之前的版本号大时,就会调用onUpgrade方法,在onUpgrade方法里进行升级数据库的操作即可。
四、检验数据库
Andoird SDK自带adb调试工具,可检验数据库。
1、cmd下输入adb shell进入shell命令模式(若不成功,则配置adb环境变量)。
2、进入/data/data/com.example/databases目录。
3、输入sqlite3 Book.db(数据库实例名),进入数据库操作模式。
4、输入.table可显示当前数据库下所有表。
5、通过sql语句遍历表。
截图如下:
adb shell还有很多的命令,这里就不多说了。