Sqlite在Android中使用

准备工作

我想在我们大学里面也应该学过基本的数据库知识,在Android里使用的是SqLite具体介绍。

SQLite基本教程

上面的教程中,有我们基本的使用和操作,不管我们以前会不会写Sql语句我觉得我们都应该去学一学的,至少基本的增-删-改-查总得知道吧。这些对于我们以后学习Android数据库的使用和理解还是挺有帮助的。

Android使用

SQLiteOpenHelper

创建表,更新表,内部 getWritableDatabase()getReadableDatabase()方法可以获得数据库的SQLiteDatabase引用。

SQLiteDatabase类的使用

Android提供了给我操控数据库封装类,封装了CRUD(添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)操),是我们方便简单的来操控我们的数据库;

1.创建表

    /**
 * Created by Xiao_Bailong on 2016/3/7.
 * 数据库的帮助类
 */

public class SQLHelper extends SQLiteOpenHelper {
    public String TAG = SQLHelper.class.getSimpleName();

    public static final String DB_Name = "chat.db";
    public static final String TB_NAME = "CHAT";

    public static final String ID = "_id";
    public static final String MEETINGID = "meetingid";
    public static final String USERID = "userid";
    public static final String CONTENT = "content";
    public static final String SENDTIME = "sendtime";
    public static final String ISREAD = "isread";

    /**
     * 创建 数据库的Sql语句。需要我们手动编写。
     */
    public static final String SQLStr = "CREATE TABLE IF NOT EXISTS " +
            TB_NAME + "(" +
            ID + " integer primary key," +
            MEETINGID + " varchar," +
            USERID + " varchar," +
            CONTENT + " varchar," +
            SENDTIME + " varchar," +
            ISREAD + " integer" +
            ")";

    public SQLHelper(Context context, String name, int version) {
        super(context, name, null, version);
        // SQLiteOpenHelper的构造函数参数:
        // context:上下文环境
        // name:数据库名字
        // factory:游标工厂(可选)
        // version:数据库模型版本号
        Log.e(TAG, "SQLHelper: " + SQLStr);
    }

    public SQLHelper(Context context, int version) {
        super(context, DB_Name, null, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        //类视生命周期一样,在数据库第一次创建的时候被调用,
        //即使我们程序重新运行也是一样,在第一次使用的时候才会调用,除非替换数据库名。
        db.execSQL(SQLStr);
        Log.e(TAG, "onCreate: ");

    }

    /**
     * 在我们需要升级数据库的使用,通过改变版本号,不过我们一般不这么做。
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        Log.d(TAG, "DatabaseHelper onUpgrade");

        db.execSQL("DROP TABLE IF EXISTS " + TB_NAME);
        onCreate(db);
        // 上述做法简单来说就是,通过检查常量值来决定如何,升级时删除旧表,然后调用onCreate来创建新表
        // 一般在实际项目中是不能这么做的,正确的做法是在更新数据表结构时,还要考虑用户存放于数据库中的数据不丢失
    }

    /**
     *当数据库打开的时候被调用
     */
    @Override
    public void onOpen(SQLiteDatabase db) {
        super.onOpen(db);

    }
}

2.增删改查

这里只做数据库的基本语句记录,具体的Api的使用请看后面推荐的博文链接;
插入

//获取数据库的操作类
  SQLiteDatabase writableDatabase = mSqlHelper.getReadableDatabase();
  //执行语句,一个?号,在后面的数组中填值,在再内部对应拼装成为Sql语句
  writableDatabase.execSQL("insert into " + SQLHelper.TB_NAME + " values(null , ? , ? , ? , ?,?)", new Object[]{"1234", "ni hao", "nihao ", false, "12345"});

上面对于语句
select into chat values(1234,'ni hao','nihao',false,'12345')

查询

   SQLiteDatabase writableDatabase = mSqlHelper.getReadableDatabase();
   //执行查询语句
   Cursor cursor = writableDatabase.rawQuery("select *from " + SQLHelper.TB_NAME + " where " + SQLHelper.MEETINGID + "=" + "?", new String[]{"12345"});
       //获取到查询到数据的游标 Cursor
        while (cursor.moveToNext()) {
                //这里通过移动游标获取到相应的行,
                //找到相应的类获取到对应的值
               }

更新 删除 只要修改相应的Sql语句就好了。

3.提醒

getReadableDatabasegetWritableDatabase()
先看源码部分掩码,IDE Ctrl+方法名就能看到了

 public SQLiteDatabase getWritableDatabase() {
        synchronized (this) {
            return getDatabaseLocked(true);
        }
    }

  public SQLiteDatabase getReadableDatabase() {
        synchronized (this) {
            return getDatabaseLocked(false);
        }
    } 

两者的区别在于
  getWritableDatabase取得的实例是以读写的方式打开数据库,如果打开的数据库磁盘满了,此时只能读不能写,此时调用了getWritableDatabase的实例,那么将会发生错误(异常)
  getReadableDatabase取得的实例是先调用getWritableDatabase以读写的方式打开数据库,如果数据库的磁盘满了,此时返回打开失败,继而用getReadableDatabase的实例以只读的方式去打开数据库。类似加锁机制。

4.有待完善

个人认为,要把数据库学好,还需要一段时间,一条好的精炼的Sql语句,可以提升程序性能,而且没有更容易查到自己想要的值。

写得不错的博客:[Android 数据库高手秘籍]

(http://blog.csdn.net/sinyu890807/article/category/2522725)

第三方框架

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,035评论 25 709
  • 前言 本文参考转发摘自:【郭霖博客】http://blog.csdn.net/guolin_blog?viewmo...
    _猜火车_阅读 11,194评论 0 10
  • 2:30。 我望了眼桌上的电子表,随手拿起煤气费账单,在上面草草写下若干字: 天空攒聚的、是谁的愁 街头踏碎的、是...
    陸離LOUIE阅读 6,570评论 0 0
  • 从大学开始,每次回家,或坐汽车或火车,看着道路两旁的田野,总是特别的亲切,看到湖泊会特别的安静!虽然在城市待了十...
    半天云阅读 2,586评论 0 0
  • 或许,以后都不会爱了,难过,流泪,发狂,一切之后,想不到自己的内心是沉甸甸的平静。在我小月子的时候,你却在电影院里...
    温暖的小屋阅读 1,937评论 0 1