当前位置:首页 > 第一行代码Android学习笔记完全版
public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_BOOK); db.execSQL(CREATE_CATEGORY); Toast.makeText(mcontext, \创建成功\ } public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL(\ db.execSQL(\ onCreate(db); }
缺点:需要删除已经存在的表,以前的数据也会被删除。
3、添加数据 4、更新数据 5、删除数据 6、查询数据
7、直接使用SQL操作数据库
添加数据:db.execSQL(―insert into Book(name,author,pages,price) values(?,?,?,?)‖,new String[] {―God‖,‖hujun‖,‖324‖,‖34.23‖});
更新数据:db.execSQL(―update Book set price=? where name=?‖, new String[] {―12.33‖,‖God‖});
删除数据:db.execSQL(―delete from Book where pages>?‖,new String[] {―100‖});
查询数据:db.rawQuery(―select * from Book‖,null);
查询数据方法: 首先,获取Cursor: Cursor cursor=null;
cursor=db.rawQuery(\然后,利用cursor得到返回的数据:
while(cursor.moveToNext()) { String author=cursor.getString(cursor.getColumnIndex(\ String name=cursor.getString(cursor.getColumnIndex(\ double price=cursor.getDouble(cursor.getColumnIndex(\ int pages=cursor.getInt(cursor.getColumnIndex(\ Log.i(\ Log.i(\ Log.i(\ Log.i(\ }
如果是第一次登陆,则将初始化为早7点,晚11点; 如果不是第一次登陆,则加载之前的设置
四、数据库最佳实践 1、使用事务
事务操作可以保证某一系列的操作要么全部完成,要么全部都不完成,保证安全。 首先,开启事务:db.beginTransaction(); 然后,执行数据库操作;
最后,事务成功:db.setTransactionSuccessful();
当执行操作出现故障时,事务不会成功,则以上的操作不会完成,数据库不会变化。 public void replaceData() { SQLiteDatabase db=databaseHelper.getWritableDatabase(); db.beginTransaction(); //开启事务 //首先,删除数据 db.execSQL(\ //手动设定一个断点,模仿删除失败 if(true) try { throw new IOException();
} catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //然后,添加数据 db.execSQL(\into Book(name,author,pages,price) values(?,?,?,?)\String[] {\ //事务执行成功 db.setTransactionSuccessful(); } do
2、升级数据库最佳写法
之前升级数据库时,为了确保新增加的table之前没有,就先把table全部删除了,这样的行为是很傻比的。 改进方法为:
改变version,然后在onUpdate()中进行判断,根据version执行不同的更新操作。
databaseHelper = new MyDatabaseHelper(this, \
比如app一共更新了两次,第一次添加了table Category,第二次在table Book中添加category_id.
于是,就有三个版本: version=1 version=2 version=3 建数据库,添加table Book 添加table Category 在table Book中添加category_id
主程序中:databaseHelper = new MyDatabaseHelper(this, \将版本号改为3。
如果是第一次安装,则直接进入onCreate(),直接安装最新版本; 如果第一次安装版本1,则进入onUpdate(),连续进行了两次升级; 如果第一次安装版本2,则进入onUpdate(),只进行了最后一次升级。 public static final String CREATE_BOOK=\ \category_id,integer)\ public static final String CREATE_CATEGORY=\table Category(id integer primary autoincrement,category_name text,category_code integer)\
key
private Context mcontext; public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_BOOK); db.execSQL(CREATE_CATEGORY); Toast.makeText(mcontext, \创建成功\ }
//注意,switch语句里面,没有添加break! public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { switch (oldVersion) { case 1: db.execSQL(CREATE_CATEGORY); case 2: db.execSQL(\ default: } }
第七章 Content Provider
一、简介
Content Provider用法有两种:
1、使用现有的CP来读取和操作相应程序中的数据;比如系统电话本。 2、创建自己的CP给我们的程序数据提供外部访问的接口。
二、访问已有的CP
当一个APP通过CP对其数据提供了外部的访问接口,则其他任何程序都可以通过这个接口对数据进行访问和操作。
1、ContentResolver用法
任何程序如果想访问其他程序通过CP共享的数据,都要使用ContentResolver,通过
共分享92篇相关文档