Sqlite从初级认知到高级操作
1.什么是Sqlite? 小型的 效率高 开源的 可嵌入 关系型数据库 程序驱动 无数据类型 支持事务操作 独立的跨平台的磁盘文件 代码量少 API简单易用 2.Sqlite数据库数据类型 Integer varchar(10) float double char(10) text 3.SQL语句回顾 3.1创建表的语句 create table表名(字段名称,数据类型,约束,字段名称,数据类型,约束.......) create table person(_id Integer primary key,name varchar(10),age Integer not null) 3.2 删除表的语句 drop table 表名 drop table person 3.3插入数据 insert into 表名[字段,字段] values(值1,值2) insert into person(_id,age)values(1,20); insert into person values(1,"小王",20) 这种没有字段的插入值,是从表结构的第一个字段开始依次插入的。 3.4 修改数据 update 表名 set 字段=新值 where 修改的条件 update person set name="yxr",age=22 where _id=1 3.5 删除数据 delete from 表名 where 删除的条件 delete from person where _id=2 3.6 查询数据 select 字段名 from 表名 where 查询条件 group by 分组的字段 having 筛选条件 order by 排序字段 select * from person; select _id,name from person; select * from person where _id=1 select *from person where _id<>1 (不等于) select * from person where _id=1 and age>18 select * from person where name like "%小%" select * from person where age between 10 and 20 select *from person where age>18 order by _id 4.Sqlite数据库创建 作为安卓内置的数据库,安卓提供了一个SQLiteOpenHelper类,通过这个类,实现相应的回调函数. onCreate() ------->创建方法 onUpgrade() ------->数据库升级方法 onOpen() ------->打开数据库方法 当调用SQLiteOpenHelper的getWritableDatabase()或者getReadableDatabase()方法获取用于操作数据库的SQLiteDatabase实例的时候,如果数据库不存在,Android系统会自动生成一个数据库,接着调用onCreate()方法,onCreate()方法在初次生成数据库时才会被调用,在onCreate()方法里可以生成数据库表结构及添加一些应用使用到的初始化数据。 提及到getReadableDatabase(),getWritableDatabase()方法,那么说下这两者的区别吧 getWritableDatabase() 方法以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写,倘若使用getWritableDatabase()打开数据库就会出错。getReadableDatabase()方法先以读写方式打开数据库,如果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库。 新建一个Helper类继承SQLiteOpenHelper重写相应的方法。 public class MySqliteHelper extends SQLiteOpenHelper { /** 构造函数** * @param context 上下文对象 * @param name 表示创建数据库的名称 * @param factory 游标工厂 * @param version 表示创建数据库的版本》=1 * */ public MySqliteHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version) { super(context,name,factory,version); } public MySqliteHelper(Context context){ super(context,Constant.DATEBASE_NAME,null,Constant.DATEBASE_VERSION); } @Override /** * 当数据库创建时回调的函数 * @param sqLiteDatabase 数据库对象 * */ public void onCreate(SQLiteDatabase sqLiteDatabase) { Log.i("TAG","onCreate"); String sql="create table "+Constant.DATEBASE_NAME+"("+Constant._ID+" Integer primary key," + ""+Constant.NAME+" varchar(10),"+Constant.AGE+" Integer)"; sqLiteDatabase.execSQL(sql);//执行sql语句 } // 数据库版本更新时的回调函数 (数据库对象,旧版本,新版本) @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase,int i,int i1) { Log.i("TAG","onUpgrade"); } @Override public void onOpen(SQLiteDatabase db) { super.onOpen(db); Log.i("TAG","onOpen"); } } 一般在存放变量时,都选择新建一个类去存放,一方面代码简洁好看,另一方面后期修改也相对容易好找些。 public class Constant { public static final String DATEBASE_NAME="info.db";//数据库名称 public static final int DATEBASE_VERSION=1;//数据库的版本号 public static final String TABLE_NAME="person"; //表名 public static final String _ID="_id"; public static final String NAME="name"; public static final String AGE="age"; } 通过单列模式来初始化获得helper类对象 public class DbManage { public static MySqliteHelper helper; public static MySqliteHelper getInstance(Context context){ if(helper==null){ helper=new MySqliteHelper(context); } return helper; } } 这样我们再调用的时候,初始化就可以这么写。 private MySqliteHelper helper; helper=DbManage.getInstance(this); 点击创建数据库按钮,实现如下: SQLiteDatabase readableDatabase = helper.getReadableDatabase(); .运行下模拟器 效果图如下 把数据库文件另存到桌面,用可视化软件打开,这地方我使用的是 打开数据库 ,看下person表是否存在以及字段时候一致
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |