SQLite 数据库

Android:SQLiteOpenHelper类(SQLlite数据库操作)详细解析 Carson带你学Android:SQLlite数据库操作全解析(SQLiteOpenHelper类)_Carson带你学Android-优快云博客_安卓sqliteopenhelper
上文是SQLite的常用用法.下文是相关应用补充.
一 事务
1 定义:一组命令同时执行要么成功,要么失败所有命令重做.保证了操作原子
特点:事务(ACID):原子性、一致性、隔离性和持久性
下面这篇blog写的很详细,用T为时间主线的表理解起来很高效。最后那个database分级表也很好。
https://blog.youkuaiyun.com/lovesomnus/article/details/44459675 
2 使用

                    m_dirDatabase->transactionBegin();
                       DirEnt modDirEnt = dirEnt; // a DirEnt we can modify
                       rc = do_addFavorite(modDirEnt, favoriteId);
                       if (rc == kNoError)
                       {
                           m_dirDatabase->transactionCommit();
                       }
                       else
                       {
                           m_dirDatabase->transactionRollback();
                       }

二 数据库锁定(Database Locking)

SQlite允许多个数据库连接并行读取同一个数据库文件即Database并发,不过任何写操作都需要完整的,整个数据库文件的独占访问.
写database需要lock,大部分写操作仅仅需要几分之一秒.
死锁(Deadlocks):比如两个数据库连接各自持有一些锁,但是它们现在都在等待对方持有的锁被释放,这样就会造成死锁现象。唯一的解决办法,就是其中一个数据库连接放弃获取锁的操作,并释放自己所持有的锁。

三 SQLite  实现

database 是3层实现

SqliteStatement.cpp 就是sqlite3 database的具体实现
DirAddFavoriteEnt (FavoriteEnt.cpp(new add))
---pDirSrvrPrivate->addFavorite() (DirServer.cpp(native/../db/ 应用层,给外部提供接口) )
   ---m_dirDatabase->readNumberOfContactsInFavoritesAndLocal(DirDataBase.cpp(数据库: 所有table的集合,eg:m_favoriteEnt,m_dirEnt等))
      ---DirEntTable m_localEntries.readNumberOfContacts () 
         ---SqliteStatement m_readNumberOfContacts.getResults() (DirEntTable.cpp table的所有数据库操作,返回result)

四 SQLite加密

sqlitecipher 

其他:主键和外键

定义主键和外键主要是为了维护关系数据库的完整性,总结一下:
1.主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。

身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。 
2.外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。

比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值