Android学习-SQLite介绍

来源:互联网 发布:php sqlserver2008 编辑:程序博客网 时间:2024/05/17 05:58

SQLite简介
-支持高达2TB大小的数据库
-以单个文件的形式存在
-以B-Tree的数据结构形式存储在磁盘

特点主要包括:
1>轻量级 一个动态库、单文件
2>独立性 没有依赖、无需安装
3>隔离性 全部在一个文件夹中
4>跨平台 支持众多操作系统
5>多语言接口,支持众多编程语言

关于事务处理的安全性问题:
-通过数据库上的独占性和共享锁来实现独立事务处理
-多个进程可以在同一时间从统一数据库读取数据,但只有一个可以写入数据

关于SQLite的数据类型:
-SQLite支持NULL,INTEGER,REAL,TEXT和Blob数据类型
-依次代表:空值、整型值、浮点值、字符串值、二进制对象

动态数据类型(弱引用)
-当某个值插入到数据库时,SQLite将会检查它的类型,如果该类型与关联的项不匹配,SQLite会尝试将该值转换成该列的类型,如果不能转换,则该值将作为本身的类型存储。

使用须知:
-由于资源占用少、性能良好和零管理成本,嵌入式数据库有了它的用武之地。例如Android,ios
-没有可用于SQLite的网络服务器、只能通过网络共享可能存在文件锁定或者性能问题
-只提供数据库级的锁定
-没有用户账户概念,而是根据文件系统确定所有数据库的权限

SQLiteDatabase:
-提供了一些管理SQLite数据库的类
-提供创建、删除、执行SQL命令,并执行其他常见的数据库管理任务的方法
db.excSQL(sql);//执行任何SQL语句
db.insert(table,nullColumnHack,values)
db.delete(table,whereClasuse,whereArgs)
db.query(table,columns,selection,selectionArgs,groupBy,having,orderBy)
db.rawQuery(sql,selectionArgs)

Cursor:游标接口,提供了遍历查询结果的方法,如移动制作方法move(),获得列值方法getString()等,常用方法
getCount()总记录条数
isFirst()判断是否第一条记录
isLast()判断是否最后一条记录
moveToFirst()移动到第一条记录
moveToLast()移动到最后一条记录
move(int offset)移动到指定记录
moveToNext()移动到下一记录
moveToPrevious()移动到上一条记录
getColumnIndexOrThrow(String columnName)据列名称获得列索引
getInt(int columnIndex)获得指定列索引的int类型值
getString(int columnIndex)获得指定列索引的String类型值
【注意】
使用完Cursor记得close,还要close数据库

使用sql语句操作数据库

public class MainActivity extends AppCompatActivity {    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main_layout);        //每个程序都有自己的数据库,默认情况下是各自互相不干扰        SQLiteDatabase db = openOrCreateDatabase("user.db",MODE_PRIVATE,null);        db.execSQL("create table if not exists tb_user(_id integer primary key autoincrement," +                "name text not null,age integer not null)");        db.execSQL("insert into tb_user(name,age) values('张三',15)");        db.execSQL("insert into tb_user(name,age) values('李四',19)");        db.execSQL("insert into tb_user(name,age) values('王五',14)");        Cursor c = db.rawQuery("select * from tb_user",null);//第二个参数是筛选条件        if(c != null){            while(c.moveToNext()){                Log.i("tag", "id_:"+c.getString(c.getColumnIndex("_id")));                Log.i("tag", "name:"+c.getString(c.getColumnIndex("name")));                Log.i("tag", "age:"+c.getInt(c.getColumnIndex("age")));                Log.i("tag", "!!!!!!!!!!!!!!!!!!!!!!!");            }            c.close();//记得关闭Cursor        }        db.close();//最后关闭数据库    }}

Contentvalues:
用于存储一组可以被ContentResolver处理的值
-ContentValues values = new ContentValues();//类似于hashMap key values
-values.put(“name”,”张三”);
-执行对应的sql操作

package com.example.angel.sqlitepro;public class MainActivity extends AppCompatActivity {    private static final String TABLENAME = "tb_stu";    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        SQLiteDatabase db = openOrCreateDatabase("user.db",MODE_PRIVATE,null);        //使用内置函数        db.execSQL("create table if not exists "+TABLENAME+" (_id integer primary key " +                "autoincrement,name text not null,age integer not null)");        ContentValues values = new ContentValues();        values.put("name","张三");        values.put("age",15);        long rowId = db.insert(TABLENAME,null,values);        values.clear();        values.put("name","李四");        values.put("age",13);        db.insert(TABLENAME,null,values);        values.clear();        values.put("name","王五");        values.put("age",15);        db.insert(TABLENAME,null,values);        values.clear();        values.put("name","赵六");        values.put("age",19);        db.insert(TABLENAME,null,values);        values.clear();        //db.update(TABLENAME,values,"_id>?",new String[]{"2"});//将全部id大于2 的人年龄成20       // db.delete(TABLENAME,"name like ?",new String[]{"%六"});        Cursor c = db.query(TABLENAME,null,"_id>?",new String[]{"0"},null,null,"name");        if(c != null){            String[] columns =c.getColumnNames();            while(c.moveToNext()){                for(String columnName:columns){                    Log.i("tag", c.getString(c.getColumnIndex(columnName)));                }            }            c.close();        }        db.close();    }}
原创粉丝点击