Android中的SQLite数据库

这部分内容其实我不是很想写,主要是太多了,而且写出来怕不够详细。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");  
    }

上面是一些基本的用法,下面来着重说几点需要注意的地方:

  1. 使用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类也是很重要的,但是我要在下个博文里面说。