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等方法。可防止注入攻击