理清 android 的 database

来源:互联网 发布:万能写卡软件 编辑:程序博客网 时间:2024/04/27 22:41


android 的数据操作到底怎么一回事呢?


SqliteOpenHelper, Sqlitedatabase, ContentProvider, ContentResolver, 这些有什么联系,都怎么用呢?

1.SqliteOpenHelper:我们在这类中创建数据库表结构

2.Sqlitedatabase:属于应用程序内部的,对数据进行增删改查的操作,其它程序不可以操作。

3.ContentProvider:可以对自己应用程序的数据进行封装,以便其它应用程序可以操作本应用程序的数据

4.ContentResolver:通过这个类访问其它通过ContentProvider暴露数据的应用,可以对数据进行操作,包括增删改查


http://bbs.csdn.net/topics/350046306


http://blog.csdn.net/nieweilin/article/details/5919013

http://www.cnblogs.com/topcoderliu/archive/2011/05/15/2047155.html

http://www.cnblogs.com/topcoderliu/archive/2011/05/13/2045251.html

http://blog.csdn.net/maylian7700/article/details/7365368

http://blog.csdn.net/jason0539/article/details/10248457

http://blog.csdn.net/ameyume/article/details/8276219

http://www.cnblogs.com/elleniou/archive/2012/05/04/2482041.html


////////////////////////////////////////////////////

2013-12-10号更新

最近有遇到数据库的问题,又看了一看啊。。。

query,rawQuery,有什么区别呢?我的理解:rawQuery是执行原生的sql语句的,速度会比较快;而query是根据传入的参数进行查询的,底层会构建查询语句,不用工程师自己写 sql 语句,所以用起来比较方便。基本就这么点差别。

还有这个方法:execSQL(String sql)

Execute a single SQL statement that is NOT a SELECT or any other SQL statement that returns data.
看意思应该是执行不需要返回数据的操作就可以。因为是void的方法。


rawQuery只能执行select操作,执行insert无效

execSQL只能执行除select之外的任何无返回值的sql语句
Execute a single SQL statement that is NOT a SELECT or any otherSQL statement that returns data.

不同的sql要用不同的接口,真麻烦啊,浪费了2,3个小时

Google的文档上对 public void execSQL (String sql,Object[] bindArgs) 的解释
Execute a single SQL statement that is NOT aSELECT/INSERT/UPDATE/DELETE.

但实际上可以执行INSERT,其他的没试


1.   使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到endTransaction() 方法时会检查事务的标志是否为成功,如果程序执行到endTransaction()之前调用了setTransactionSuccessful() 方法设置事务的标志为成功则提交事务,如果没有调用setTransactionSuccessful() 方法则回滚事务。使用例子如下:
 SQLiteDatabase db = ....;

db.beginTransaction();//开始事务

try {

    db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"传智播客", 4});

    db.execSQL("update person set name=? where personid=?", new Object[]{"传智", 1});

    db.setTransactionSuccessful();//调用此方法会在执行到endTransaction() 时提交当前事务,如果不调用此方法会回滚事务

} finally {

    db.endTransaction();//由事务的标志决定是提交事务,还是回滚事务

}

db.close();

上面两条SQL语句在同一个事务中执行。

这个对事务写的挺清楚,不错的。

http://blog.sina.com.cn/s/blog_71f9299c0101b73y.html


http://linux.chinaitlab.com/unix/834287.html


http://blog.csdn.net/nieweilin/article/details/5919013


一个奇怪的问题记录下。。。

http://www.welp.cn/question/24392

http://bbs.csdn.net/topics/390286454?page=1

http://www.2cto.com/kf/201208/149104.html

http://www.cnblogs.com/wenjiang/archive/2013/05/28/3100860.html



原创粉丝点击