在我之前的项目中,存取数据使用的都是NSCoding方式,这样做避免了复杂的数据库操作,也造成了我数据库使用的困难。
最近做的一个项目中,大量的使用到数据库操作,涨姿势了,记录一下。
一、使用惯例:
(1)使用FMDB第三方库管理数据库
(2)不需要事务时,使用inDatabase
(3)需要使用事务时,使用inTransaction
(4)inTransaction也可以替换为beginTransaction和commit的配对使用
(5)事务不可以嵌套
(6)sql语句使用?为占位符,以防sql注入问题
二、常见使用错误:
大部分的错误根据FMDataBase输出的错误提示,都可轻松解决。但有些错误的提示较为模糊,解决可能有一定困难,以下为我遇到的一部分:
1、there is at least one open result
原因:ResultSet需要手动关闭。
大部分情况下,通过[resultSet next]方法遍历了resultset的所有结果,是不需要关闭的。
但如果没有遍历所有的结果,并且没有手动关闭的话,就会报这个警告。一般是因为使用了if([resultSet next])
2、sql语句中的in语法不能使用
只能通过循环自己实现in语法了
3、误用executeQuery、executeUpdate
这个问题很容易理解,但也很容易忘记
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #31595d }
span.s1 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #31595d }
span.s1 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #31595d }
span.s1 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #000000 }
span.s1 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #31595d }
span.s1 { }