zoukankan      html  css  js  c++  java
  • 基础篇:6.Android数据库编程---SQLite

    简介:

      在Android平台上,继承了一个嵌入式关系型数据库---SQLite.SQLite具有跨平台特性,可以在所有主要的操作系统上运行。SQLite通过独占性和共享锁实现独立事务处理,因此多个进程可以在同一时间从同一数据库读取数据,但只有一个可以写入数据,在进行写操作之前,必须先获得独占锁。另一方面,SQLite采取动态数据类型,当某个值插入数据库时,SQLite会检查它的类型,如果该类型与所关联的列不匹配,SQLite则会进行强制转换。SQLite支持以下几种数据类型:NULL(空值)、INTEGER(整型值)、REAL(浮点值)、TEXT(字符串文本)、BLOB(二进制对象)。

    SQLiteOpenHelper类:

      SQLiteOpenHelper提供了两个重要的方法:

      1.onCreate(SQLiteDatabase db)   当应用第一次创建数据库实例时候,系统会新建一个数据库,接着调用onCreate()方法,在该方法里生成数据库表结构以及进行一些数据初始化操作。

      2.onUpdate(SQLiteDatabase db ,int oldVersion,int newVersion)  当数据库版本发生变化时,该方法被调用,进行一些表结构的更新。

    SQLiteDatabase类:

      对数据库的一些操作,如增删改查都可以通过该类完成:

      1.inser()---增加数据

    //增加数据
        public void inser(User user){
            ContentValues values=new ContentValues();//创建ContentValues对象
            //向ContentValues对象中插入键值对,第一个参数为列名,第二个参数为该列数据值
            values.put(USERNAME, user.getUsername());
            values.put(PASSWORD, user.getPassword());
            //调用insert方法,将数据插入到数据库中
            //第一个参数:表名
            //第二个参数:如果ContentValues为空,则该列为null(SQLite不允许出现空列)
            db.insert(TABLE_NAME, null, values);
        }

      2.delete()---删除数据

    //删除数据
        public void delete(){
            String whereClause="username=?";//删除条件
            String[] whereArgs={"mr"};//删除条件的参数
            db.delete(TABLE_NAME, whereClause, whereArgs);//执行删除
            //第二种删除方式
            /*
            String sql="delete from"+TABLE_NAME+"where username='mr'";//删除操作的SQL语句
            db.execSQL(sql);//执行删除
            */
        }

      3.update()---更改数据

    //更改数据
        public void update(){
            String whereClause="USERNAME=?";//删除条件
            String[] whereArgs={"mr"};//删除条件的参数
            ContentValues values=new ContentValues();
            values.put("PASSWORD", "555");//添加要修改的字段
            db.update(TABLE_NAME, values, whereClause, whereArgs);
            //第二种更改方式
            /*
             * String sql="update [TABLE_NAME] set password='555'where username='mr'"//更新SQL语句
             * db.execSQL(sql);
             * */
        }

      4.query()---查询数据

    //根据ID进行查询数据
        public User query(int id){
            User user=new User();
            //第一个参数:表名
            //第二个参数:要查询的列名
            //第三个参数:查询条件
            //第四个参数:查询条件的参数
            //第五个参数:对查询结果进行分组
            //第六个参数:对分组的结果进行限制
            //第七个参数:对查询结果进行排序
            Cursor cursor = db.query(TABLE_NAME, new String[] { USERNAME, PASSWORD }, "_id = " + id, null, null, null, null);
            if(cursor.getCount()>0){
                cursor.moveToFirst();//将游标移到第一条记录
                user.setUsername(cursor.getString(0));//获得用户名的值然后进行设置,"0"代表列的索引,也可用cursor.getColumnIndex("username")
                user.setPassword(cursor.getString(1));
                return user;
            }
            cursor.close();//关闭游标
            return null;
        }

      以上对数据库的操作有两种方式可以实现,一种是针对像我这样的菜鸟级别使用的通过调用SQLiteDatabase封装的方法来实现相应的操作;另一种是通过db.execSQL()直接执行SQL语句便可实现指定的操作.

      对数据库的一些操作中涉及到一个Cursor类,在android中对数据进行查询都是通过Cursor来实现。Cursor有几下几个特性:

        *Cursor是每行的集合

        *使用moveToFirst()定位至第一行

        *必须知道每一列的名称及数据类型

        *Cursor是一个随机的数据源

        *所有的数据都是通过下标取得

      下面是Cursor常用的一些方法:

        *close()---关闭游标

        *getColumnIndex(String columnName)---获取指定列索引

        *moveToFirst()---移动光标至第一行

        *moveToLast()---移动光标至最后一行

        *moveToNext()---移动光标至下一行

  • 相关阅读:
    文件处理seek以及修改内容的两种方式
    三元表达式、列表推导式、生成器表达式、递归、匿名函数、内置函数
    MySQL逻辑查询语句执行顺序
    函数基础
    迭代器、生成器、面向过程编程
    3 函数
    文件处理
    字符编码
    2 数据类型、字符编码、文件处理
    转载文章之提供给开发者 10 款最好的 Python IDE
  • 原文地址:https://www.cnblogs.com/dream550/p/3905700.html
Copyright © 2011-2022 走看看