这部分内容其实我不是很想写,主要是太多了,而且写出来怕不够详细。Android中的数据存储和IO有很多的内容,三言两语怎么说得完。。。好吧我就是比较懒。。。
SQLite作为Android中提供的一个轻量型数据库有很多自身的特点:
开源!写在第一个,最大的优点好吧。
跨平台,去哪儿都能用!
弱类型的字段,哈哈哈这个后面会说到,就是在同一列中的数据可以是不同类型的。
SQLiteDatabase提供了如下的静态方法来打开对应的数据库:
static SQLiteDatabase openDatabase(String path, SQLiteDatabase.CursorFactory factory, int flags) 打开path文件代表的数据库
static SQLiteDatabase openOrCreateDatabase(File file, SQLiteDatabase.CursorFactory factory) 创建或者是打开file文件代表的数据库
static SQLiteDatabase openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory) 创建或者是打开path文件代表的数据库
接着就是咱们数据库中经常用到的增删改查了:
void execSQL(String sql) 执行SQL语句
void execSQL(String sql, Object[] bindArgs) 执行带占位符的SQL语句
long insert(String table, String nullColumnHack, ContentValues values) 插入数据语句,后面会提到
int update(String table, ContentValues values, String whereClause, String[] whereArgs) 更新语句,其中where就是我们数据库中常用到的条件语句
int delete(String table, String whereClause, String[] whereArgs) 删除语句
static boolean deleteDatabase(File file) 注意!这一句是删除整个数据库,慎用!
还有一些经常用到的方法,比如isOpen()两个Transcaton事务方法等等,具体的就在下面的连接当中!(网络不好的同学自己翻墙吧)
具体的API地址链接
借别人的代码来实现上面的几个方法
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//打开或创建test.db数据库
SQLiteDatabase db = openOrCreateDatabase("test.db", Context.MODE_PRIVATE, null);
db.execSQL("DROP TABLE IF EXISTS person");
//创建person表
db.execSQL("CREATE TABLE person (_id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, age SMALLINT)");
Person person = new Person();
person.name = "john";
person.age = 30;
//插入数据
db.execSQL("INSERT INTO person VALUES (NULL, ?, ?)", new Object[]{person.name, person.age});
person.name = "david";
person.age = 33;
//ContentValues以键值对的形式存放数据
ContentValues cv = new ContentValues();
cv.put("name", person.name);
cv.put("age", person.age);
//插入ContentValues中的数据
db.insert("person", null, cv);
cv = new ContentValues();
cv.put("age", 35);
//更新数据
db.update("person", cv, "name = ?", new String[]{"john"});
Cursor c = db.rawQuery("SELECT * FROM person WHERE age >= ?", new String[]{"33"});
while (c.moveToNext()) {
int _id = c.getInt(c.getColumnIndex("_id"));
String name = c.getString(c.getColumnIndex("name"));
int age = c.getInt(c.getColumnIndex("age"));
Log.i("db", "_id=>" + _id + ", name=>" + name + ", age=>" + age);
}
c.close();
//删除数据
db.delete("person", "age < ?", new String[]{"35"});
//关闭当前数据库
db.close();
//删除test.db数据库
// deleteDatabase("test.db");
}
上面是一些基本的用法,下面来着重说几点需要注意的地方:
- 使用insert方法来插入数据
long insert(String table, String nullColumnHack, ContentValues values)
Convenience method for inserting a row into the database.
table:表明 nullColumnHack:列名,代表强行插入null值得数据列 values:记录的数据 我们用这个方法的时候需要用到ContentValues来存放数据,这个ContentValues相当于一个Map,它是以key-values的方法来对应的,其中key是代表数据列的列名,values就是对应的数据。 举个栗子:
ContentValues cv = new ContentValues();
cv.put("name", 孙悟空);
cv.put("age", 500);
database.insert("这里填表名", null, cv);
ok,这样一条插入语句就已经完成啦。
看起来是非常简单的,但是其实insert的内部结构也是用SQL语句来执行的。 2. 使用update方法更新数据
int update(String table, ContentValues values, String whereClause, String[] whereArgs)
Convenience method for updating rows in the database.
table:表明 values:想要更新的数据 whereClause:SQL语句中的条件部分 whereArgs:在前面的条件中所需要传入的参数部分
举个栗子:
cv = new ContentValues();
cv.put("age", 35);
//更新数据
db.update("person", cv, "name = ?", new String[]{"john"});
好了,先说到这里,关于SQLite的部分有一个SQLiteOpenHelper类也是很重要的,但是我要在下个博文里面说。