Android-SQLite商业化数据库操作 
一 具体的数据操作 
增 
    /** 
     * 插入用户实例 
     * @param pUser 
     * @return 
     */ 
    public long insertUser(User pUser) 
    { 
        if (mSqLiteDatabase != null && pUser != null) 
        { 
            //插入一条记录 
             ContentValues _contentValues = new ContentValues(); 
             _contentValues.put(COLUMN_USERNAME, pUser.getmUserName()); 
             _contentValues.put(COLUMN_USER_ADDRESS, pUser.getmUserAddress()); 
         return mSqLiteDatabase.insert(TABLE_NAME, null, _contentValues);
    }
    else
    {
        return -1;
    }
}
删 
 /** 
     * 删除用户实例 
     * @param id 
     * @return 
     */ 
    public int deleteUser(int id) 
    { 
        if (mSqLiteDatabase != null && id > 0) 
        { 
            return mSqLiteDatabase.delete(TABLE_NAME, “_id=?”, new String[]{String.valueOf(id)});
    }
    return -1;  
}
改 
/** 
     * 更新用户的实例 
     * @param pUser 
     * @param id 
     * @return 
     */ 
    public int updataUser(User pUser, int id) 
    { 
        if (mSqLiteDatabase != null && pUser != null) 
        { 
            ContentValues _contenValues = new ContentValues(); 
            _contenValues.put(COLUMN_USERNAME, pUser.getmUserName()); 
            _contenValues.put(COLUMN_USER_ADDRESS, pUser.getmUserAddress());
        return mSqLiteDatabase.update(TABLE_NAME, _contenValues,"_id=?" , new String[]{String.valueOf(id)});
    } 
    return -1;
}
查 
 /** 
     * 查询所有记录 
     */ 
    public Cursor selectAll() 
    { 
        if (mSqLiteDatabase != null) 
        { 
            return mSqLiteDatabase.query( 
                    TABLE_NAME,  
                    new String[]{“_id”, COLUMN_USERNAME, COLUMN_USER_ADDRESS},  
                    null,  
                    null,  
                    null,  
                    null,  
                    null);  
        } 
         return null;
}
/** 
     * 根据条件查询用户数据 
     * @param selection 
     * @param selectionArgs 
     * @param groupBy 
     * @param having 
     * @param orderBy 
     * @return 
     */ 
    public Cursor selectUser(String selection, String[] selectionArgs, String groupBy, String having, String orderBy) 
    { 
        if (mSqLiteDatabase != null) 
        { 
            return mSqLiteDatabase.query( 
                    TABLE_NAME,  
                    new String[]{“_id”, COLUMN_USERNAME, COLUMN_USER_ADDRESS},  
                    selection,  
                    selectionArgs,  
                    groupBy,  
                    having,  
                    orderBy);  
        } 
        else  
        { 
            return null; 
        } 
    }
批量更新和删除 
使用原生的数据库语句 
exeSQL 
rawSQL 
queryWithFactory效率比较高
二 sqlite3数据库引擎 
下载sqliter3的源代码,分析文件结构,再进行源码分析 
结果是在android2.3.3externalsqlitedist文件夹下,所有的拓展的第三方类库都在external文件夹下, 
系统统一编译
三 sqlite3连接方式 
JDBC的方式 
像jni的原生类库,底层还是靠C/C++实现 
在android2.3.3libcoresqlite-jdbcsrcmainnative和java文件夹下,
四 表的主外键关系 
商业项目要求严谨的主外键关系 
使用的工具是SQLiteStudio 
五 表的视图 
但SQL语句不太熟悉的时候可以使用表的视图
六 导出数据库 
将数据库导出,放到项目的exeSQL执行的代码处
七 事务 
类似于原子提交的概念,即事务是一个整体的过程 
尽量放到try-catch中 
beginTransaction() 
中间是业务逻辑,事务操作 
endTransaction() 
commit()
八 面试题 
1 说说Android数据存储的几种形式 
SharePreference,文件,网络,SQLite3数据库
2 sqlite能支持存储过程吗, 支持主外键关联吗 
支持主外键关联
3 如何让自己的setting程序与系统的setting程序融合 
在自己的setting程序的xml文件里面的PreferenceScreen标签下应用系统的intent