1.Sqlite 写操作 并不是线程安全

1.在多进程或多线程中使用sqlite,同时操作同一个数据库的话,会导致异常抛出。
2.不同线程或实例化多个SqliteOpenhelper来操作同一个数据库,也会导致同样的问题。
3.但不同线程使用同一个sqliteopenhelper来获取SqliteDatabase进行操作的话,是可以的。

2.Sqlite 读操作是线程安全

多个线程或进程读取同一个数据库的内容,是可以的。

***以上这些都与Sqlite的事物和锁机制有关
关于事物与锁,详见http://www.cnblogs.com/busymilk/p/4766855.html。

3.直接使用SqliteDatabase的execSQL(String sql)有可能会导致注入攻击,比如

delete from user where name='a';

有可能就变成
delete from user where name='a' or 1=1;

所以,最好使用executeSql(String sql, Object[] bindArgs);
或者SqliteDatabase提供的insert,update,delete等方法。可防止注入攻击

转载于:https://www.cnblogs.com/busymilk/p/4766781.html

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐