Classes.html 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <title>Classes Reference</title>
  5. <link rel="stylesheet" type="text/css" href="css/jazzy.css" />
  6. <link rel="stylesheet" type="text/css" href="css/highlight.css" />
  7. <meta charset='utf-8'>
  8. <script src="js/jquery.min.js" defer></script>
  9. <script src="js/jazzy.js" defer></script>
  10. </head>
  11. <body>
  12. <a name="//apple_ref/objc/Section/Classes" class="dashAnchor"></a>
  13. <a title="Classes Reference"></a>
  14. <header>
  15. <div class="content-wrapper">
  16. <p><a href="index.html">FMDB 2.7.7 Docs</a> (89% documented)</p>
  17. <p class="header-right"><a href="https://github.com/ccgus/fmdb"><img src="img/gh.png"/>View on GitHub</a></p>
  18. </div>
  19. </header>
  20. <div class="content-wrapper">
  21. <p id="breadcrumbs">
  22. <a href="index.html">FMDB Reference</a>
  23. <img id="carat" src="img/carat.png" />
  24. Classes Reference
  25. </p>
  26. </div>
  27. <div class="content-wrapper">
  28. <nav class="sidebar">
  29. <ul class="nav-groups">
  30. <li class="nav-group-name">
  31. <a href="Categories.html">Categories</a>
  32. <ul class="nav-group-tasks">
  33. <li class="nav-group-task">
  34. <a href="Categories/NSObject%28FMDatabasePoolDelegate%29.html">NSObject(FMDatabasePoolDelegate)</a>
  35. </li>
  36. </ul>
  37. </li>
  38. <li class="nav-group-name">
  39. <a href="Classes.html">Classes</a>
  40. <ul class="nav-group-tasks">
  41. <li class="nav-group-task">
  42. <a href="Classes/FMDatabase.html">FMDatabase</a>
  43. </li>
  44. <li class="nav-group-task">
  45. <a href="Classes/FMDatabasePool.html">FMDatabasePool</a>
  46. </li>
  47. <li class="nav-group-task">
  48. <a href="Classes/FMDatabaseQueue.html">FMDatabaseQueue</a>
  49. </li>
  50. <li class="nav-group-task">
  51. <a href="Classes/FMResultSet.html">FMResultSet</a>
  52. </li>
  53. <li class="nav-group-task">
  54. <a href="Classes/FMStatement.html">FMStatement</a>
  55. </li>
  56. </ul>
  57. </li>
  58. <li class="nav-group-name">
  59. <a href="Constants.html">Constants</a>
  60. <ul class="nav-group-tasks">
  61. <li class="nav-group-task">
  62. <a href="Constants.html#/c:@FMDBVersionNumber">FMDBVersionNumber</a>
  63. </li>
  64. <li class="nav-group-task">
  65. <a href="Constants.html#/c:@FMDBVersionString">FMDBVersionString</a>
  66. </li>
  67. </ul>
  68. </li>
  69. <li class="nav-group-name">
  70. <a href="Enums.html">Enumerations</a>
  71. <ul class="nav-group-tasks">
  72. <li class="nav-group-task">
  73. <a href="Enums/FMDBCheckpointMode.html">FMDBCheckpointMode</a>
  74. </li>
  75. <li class="nav-group-task">
  76. <a href="Enums/SqliteValueType.html">SqliteValueType</a>
  77. </li>
  78. </ul>
  79. </li>
  80. <li class="nav-group-name">
  81. <a href="Type%20Definitions.html">Type Definitions</a>
  82. <ul class="nav-group-tasks">
  83. <li class="nav-group-task">
  84. <a href="Type%20Definitions.html#/c:FMDatabase.h@T@FMDBExecuteStatementsCallbackBlock">FMDBExecuteStatementsCallbackBlock</a>
  85. </li>
  86. </ul>
  87. </li>
  88. </ul>
  89. </nav>
  90. <article class="main-content">
  91. <section>
  92. <section class="section">
  93. <h1>Classes</h1>
  94. <p>The following classes are available globally.</p>
  95. </section>
  96. <section class="section task-group-section">
  97. <div class="task-group">
  98. <ul>
  99. <li class="item">
  100. <div>
  101. <code>
  102. <a name="/c:objc(cs)FMDatabase"></a>
  103. <a name="//apple_ref/objc/Class/FMDatabase" class="dashAnchor"></a>
  104. <a class="token" href="#/c:objc(cs)FMDatabase">FMDatabase</a>
  105. </code>
  106. </div>
  107. <div class="height-container">
  108. <div class="pointer-container"></div>
  109. <section class="section">
  110. <div class="pointer"></div>
  111. <div class="abstract">
  112. <p>A SQLite (<a href="https://sqlite.org/">https://sqlite.org/</a>) Objective-C wrapper.</p>
  113. <p>Usage</p>
  114. <p>The three main classes in FMDB are:</p>
  115. <ul>
  116. <li><p><code>FMDatabase</code> - Represents a single SQLite database. Used for executing SQL statements.</p></li>
  117. <li><p><code><a href="Classes/FMResultSet.html">FMResultSet</a></code> - Represents the results of executing a query on an <code>FMDatabase</code> .</p></li>
  118. <li><p><code><a href="Classes/FMDatabaseQueue.html">FMDatabaseQueue</a></code> - If you want to perform queries and updates on multiple threads, you&rsquo;ll want to use this class.</p></li>
  119. </ul>
  120. <p>See also</p>
  121. <ul>
  122. <li><p><code><a href="Classes/FMDatabasePool.html">FMDatabasePool</a></code> - A pool of <code>FMDatabase</code> objects</p></li>
  123. <li><p><code><a href="Classes/FMStatement.html">FMStatement</a></code> - A wrapper for <code>sqlite_stmt</code></p></li>
  124. </ul>
  125. <p>External links</p>
  126. <ul>
  127. <li><a href="https://github.com/ccgus/fmdb">FMDB on GitHub</a> including introductory documentation</li>
  128. <li><a href="https://sqlite.org/">SQLite web site</a></li>
  129. <li><a href="http://groups.google.com/group/fmdb">FMDB mailing list</a></li>
  130. <li><p><a href="https://sqlite.org/faq.html">SQLite FAQ</a></p></li>
  131. </ul><div class="aside aside-warning">
  132. <p class="aside-title">Warning</p>
  133. <p>Do not instantiate a single <code>FMDatabase</code> object and use it across multiple threads. Instead, use <code><a href="Classes/FMDatabaseQueue.html">FMDatabaseQueue</a></code> .</p>
  134. </div>
  135. <a href="Classes/FMDatabase.html" class="slightly-smaller">See more</a>
  136. </div>
  137. <div class="declaration">
  138. <h4>Declaration</h4>
  139. <div class="language">
  140. <p class="aside-title">Objective-C</p>
  141. <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">FMDatabase</span> <span class="p">:</span> <span class="nc">NSObject</span></code></pre>
  142. </div>
  143. <div class="language">
  144. <p class="aside-title">Swift</p>
  145. <pre class="highlight swift"><code><span class="kd">class</span> <span class="kt">FMDatabase</span> <span class="p">:</span> <span class="kt">NSObject</span></code></pre>
  146. </div>
  147. </div>
  148. </section>
  149. </div>
  150. </li>
  151. <li class="item">
  152. <div>
  153. <code>
  154. <a name="/c:objc(cs)FMStatement"></a>
  155. <a name="//apple_ref/objc/Class/FMStatement" class="dashAnchor"></a>
  156. <a class="token" href="#/c:objc(cs)FMStatement">FMStatement</a>
  157. </code>
  158. </div>
  159. <div class="height-container">
  160. <div class="pointer-container"></div>
  161. <section class="section">
  162. <div class="pointer"></div>
  163. <div class="abstract">
  164. <p>Objective-C wrapper for <code>sqlite3_stmt</code></p>
  165. <p>This is a wrapper for a SQLite <code>sqlite3_stmt</code> . Generally when using FMDB you will not need to interact directly with <code>FMStatement</code>, but rather with <code><a href="Classes/FMDatabase.html">FMDatabase</a></code> and <code><a href="Classes/FMResultSet.html">FMResultSet</a></code> only.</p>
  166. <p>See also</p>
  167. <ul>
  168. <li><code><a href="Classes/FMDatabase.html">FMDatabase</a></code></li>
  169. <li><code><a href="Classes/FMResultSet.html">FMResultSet</a></code></li>
  170. <li><a href="https://sqlite.org/c3ref/stmt.html"><code>sqlite3_stmt</code> </a></li>
  171. </ul>
  172. <a href="Classes/FMStatement.html" class="slightly-smaller">See more</a>
  173. </div>
  174. <div class="declaration">
  175. <h4>Declaration</h4>
  176. <div class="language">
  177. <p class="aside-title">Objective-C</p>
  178. <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">FMStatement</span> <span class="p">:</span> <span class="nc">NSObject</span> <span class="p">{</span>
  179. <span class="kt">void</span> <span class="o">*</span><span class="n">_statement</span><span class="p">;</span>
  180. <span class="n">NSString</span> <span class="o">*</span><span class="n">_query</span><span class="p">;</span>
  181. <span class="kt">long</span> <span class="n">_useCount</span><span class="p">;</span>
  182. <span class="n">BOOL</span> <span class="n">_inUse</span><span class="p">;</span>
  183. <span class="p">}</span></code></pre>
  184. </div>
  185. <div class="language">
  186. <p class="aside-title">Swift</p>
  187. <pre class="highlight swift"><code><span class="kd">class</span> <span class="kt">FMStatement</span> <span class="p">:</span> <span class="kt">NSObject</span></code></pre>
  188. </div>
  189. </div>
  190. </section>
  191. </div>
  192. </li>
  193. <li class="item">
  194. <div>
  195. <code>
  196. <a name="/c:objc(cs)FMDatabasePool"></a>
  197. <a name="//apple_ref/objc/Class/FMDatabasePool" class="dashAnchor"></a>
  198. <a class="token" href="#/c:objc(cs)FMDatabasePool">FMDatabasePool</a>
  199. </code>
  200. </div>
  201. <div class="height-container">
  202. <div class="pointer-container"></div>
  203. <section class="section">
  204. <div class="pointer"></div>
  205. <div class="abstract">
  206. <p>Pool of <code><a href="Classes/FMDatabase.html">FMDatabase</a></code> objects.</p>
  207. <p>See also</p>
  208. <ul>
  209. <li><code><a href="Classes/FMDatabaseQueue.html">FMDatabaseQueue</a></code></li>
  210. <li><p><code><a href="Classes/FMDatabase.html">FMDatabase</a></code> </p></li>
  211. </ul><div class="aside aside-warning">
  212. <p class="aside-title">Warning</p>
  213. <p>Before using <code>FMDatabasePool</code> , please consider using <code><a href="Classes/FMDatabaseQueue.html">FMDatabaseQueue</a></code> instead.</p>
  214. </div>
  215. <p>If you really really really know what you&rsquo;re doing and <code>FMDatabasePool</code> is what
  216. you really really need (ie, you&rsquo;re using a read only database), OK you can use
  217. it. But just be careful not to deadlock!</p>
  218. <p>For an example on deadlocking, search for:
  219. <code>ONLY_USE_THE_POOL_IF_YOU_ARE_DOING_READS_OTHERWISE_YOULL_DEADLOCK_USE_FMDATABASEQUEUE_INSTEAD</code>
  220. in the main.m file.</p>
  221. <a href="Classes/FMDatabasePool.html" class="slightly-smaller">See more</a>
  222. </div>
  223. <div class="declaration">
  224. <h4>Declaration</h4>
  225. <div class="language">
  226. <p class="aside-title">Objective-C</p>
  227. <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">FMDatabasePool</span> <span class="p">:</span> <span class="nc">NSObject</span></code></pre>
  228. </div>
  229. <div class="language">
  230. <p class="aside-title">Swift</p>
  231. <pre class="highlight swift"><code><span class="kd">class</span> <span class="kt">FMDatabasePool</span> <span class="p">:</span> <span class="kt">NSObject</span></code></pre>
  232. </div>
  233. </div>
  234. </section>
  235. </div>
  236. </li>
  237. <li class="item">
  238. <div>
  239. <code>
  240. <a name="/c:objc(cs)FMDatabaseQueue"></a>
  241. <a name="//apple_ref/objc/Class/FMDatabaseQueue" class="dashAnchor"></a>
  242. <a class="token" href="#/c:objc(cs)FMDatabaseQueue">FMDatabaseQueue</a>
  243. </code>
  244. </div>
  245. <div class="height-container">
  246. <div class="pointer-container"></div>
  247. <section class="section">
  248. <div class="pointer"></div>
  249. <div class="abstract">
  250. <p>To perform queries and updates on multiple threads, you&rsquo;ll want to use <code>FMDatabaseQueue</code> .</p>
  251. <p>Using a single instance of <code><a href="Classes/FMDatabase.html">FMDatabase</a></code> from multiple threads at once is a bad idea. It has always been OK to make a <code><a href="Classes/FMDatabase.html">FMDatabase</a></code> object <em>per thread</em>. Just don&rsquo;t share a single instance across threads, and definitely not across multiple threads at the same time.</p>
  252. <p>Instead, use <code>FMDatabaseQueue</code> . Here&rsquo;s how to use it:</p>
  253. <p>First, make your queue.</p>
  254. <pre class="highlight objective_c"><code><span class="n">FMDatabaseQueue</span> <span class="o">*</span><span class="n">queue</span> <span class="o">=</span> <span class="p">[</span><span class="n">FMDatabaseQueue</span> <span class="nf">databaseQueueWithPath</span><span class="p">:</span><span class="n">aPath</span><span class="p">];</span>
  255. </code></pre>
  256. <p>Then use it like so:</p>
  257. <pre class="highlight objective_c"><code><span class="p">[</span><span class="n">queue</span> <span class="nf">inDatabase</span><span class="p">:</span><span class="o">^</span><span class="p">(</span><span class="n">FMDatabase</span> <span class="o">*</span><span class="n">db</span><span class="p">)</span> <span class="p">{</span>
  258. <span class="p">[</span><span class="n">db</span> <span class="nf">executeUpdate</span><span class="p">:</span><span class="s">@"INSERT INTO myTable VALUES (?)"</span><span class="p">,</span> <span class="p">[</span><span class="n">NSNumber</span> <span class="nf">numberWithInt</span><span class="p">:</span><span class="mi">1</span><span class="p">]];</span>
  259. <span class="p">[</span><span class="n">db</span> <span class="nf">executeUpdate</span><span class="p">:</span><span class="s">@"INSERT INTO myTable VALUES (?)"</span><span class="p">,</span> <span class="p">[</span><span class="n">NSNumber</span> <span class="nf">numberWithInt</span><span class="p">:</span><span class="mi">2</span><span class="p">]];</span>
  260. <span class="p">[</span><span class="n">db</span> <span class="nf">executeUpdate</span><span class="p">:</span><span class="s">@"INSERT INTO myTable VALUES (?)"</span><span class="p">,</span> <span class="p">[</span><span class="n">NSNumber</span> <span class="nf">numberWithInt</span><span class="p">:</span><span class="mi">3</span><span class="p">]];</span>
  261. <span class="n">FMResultSet</span> <span class="o">*</span><span class="n">rs</span> <span class="o">=</span> <span class="p">[</span><span class="n">db</span> <span class="nf">executeQuery</span><span class="p">:</span><span class="s">@"select * from foo"</span><span class="p">];</span>
  262. <span class="k">while</span> <span class="p">([</span><span class="n">rs</span> <span class="nf">next</span><span class="p">])</span> <span class="p">{</span>
  263. <span class="c1">//…
  264. </span> <span class="p">}</span>
  265. <span class="p">}];</span>
  266. </code></pre>
  267. <p>An easy way to wrap things up in a transaction can be done like this:</p>
  268. <pre class="highlight objective_c"><code><span class="p">[</span><span class="n">queue</span> <span class="nf">inTransaction</span><span class="p">:</span><span class="o">^</span><span class="p">(</span><span class="n">FMDatabase</span> <span class="o">*</span><span class="n">db</span><span class="p">,</span> <span class="n">BOOL</span> <span class="o">*</span><span class="n">rollback</span><span class="p">)</span> <span class="p">{</span>
  269. <span class="p">[</span><span class="n">db</span> <span class="nf">executeUpdate</span><span class="p">:</span><span class="s">@"INSERT INTO myTable VALUES (?)"</span><span class="p">,</span> <span class="p">[</span><span class="n">NSNumber</span> <span class="nf">numberWithInt</span><span class="p">:</span><span class="mi">1</span><span class="p">]];</span>
  270. <span class="p">[</span><span class="n">db</span> <span class="nf">executeUpdate</span><span class="p">:</span><span class="s">@"INSERT INTO myTable VALUES (?)"</span><span class="p">,</span> <span class="p">[</span><span class="n">NSNumber</span> <span class="nf">numberWithInt</span><span class="p">:</span><span class="mi">2</span><span class="p">]];</span>
  271. <span class="p">[</span><span class="n">db</span> <span class="nf">executeUpdate</span><span class="p">:</span><span class="s">@"INSERT INTO myTable VALUES (?)"</span><span class="p">,</span> <span class="p">[</span><span class="n">NSNumber</span> <span class="nf">numberWithInt</span><span class="p">:</span><span class="mi">3</span><span class="p">]];</span>
  272. <span class="c1">// if (whoopsSomethingWrongHappened) {
  273. </span> <span class="c1">// *rollback = YES;
  274. </span> <span class="c1">// return;
  275. </span> <span class="c1">// }
  276. </span>
  277. <span class="c1">// etc…
  278. </span> <span class="p">[</span><span class="n">db</span> <span class="nf">executeUpdate</span><span class="p">:</span><span class="s">@"INSERT INTO myTable VALUES (?)"</span><span class="p">,</span> <span class="p">[</span><span class="n">NSNumber</span> <span class="nf">numberWithInt</span><span class="p">:</span><span class="mi">4</span><span class="p">]];</span>
  279. <span class="p">}];</span>
  280. </code></pre>
  281. <p><code>FMDatabaseQueue</code> will run the blocks on a serialized queue (hence the name of the class). So if you call <code>FMDatabaseQueue</code> &lsquo;s methods from multiple threads at the same time, they will be executed in the order they are received. This way queries and updates won&rsquo;t step on each other&rsquo;s toes, and every one is happy.</p>
  282. <div class="aside aside-warning">
  283. <p class="aside-title">Warning</p>
  284. <p>Do not instantiate a single <code><a href="Classes/FMDatabase.html">FMDatabase</a></code> object and use it across multiple threads. Use <code>FMDatabaseQueue</code> instead.</p>
  285. </div><div class="aside aside-warning">
  286. <p class="aside-title">Warning</p>
  287. <p>The calls to <code>FMDatabaseQueue</code> &rsquo;s methods are blocking. So even though you are passing along blocks, they will <strong>not</strong> be run on another thread.</p>
  288. </div>
  289. <p>@sa FMDatabase</p>
  290. <a href="Classes/FMDatabaseQueue.html" class="slightly-smaller">See more</a>
  291. </div>
  292. <div class="declaration">
  293. <h4>Declaration</h4>
  294. <div class="language">
  295. <p class="aside-title">Objective-C</p>
  296. <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">FMDatabaseQueue</span> <span class="p">:</span> <span class="nc">NSObject</span></code></pre>
  297. </div>
  298. <div class="language">
  299. <p class="aside-title">Swift</p>
  300. <pre class="highlight swift"><code><span class="kd">class</span> <span class="kt">FMDatabaseQueue</span> <span class="p">:</span> <span class="kt">NSObject</span></code></pre>
  301. </div>
  302. </div>
  303. </section>
  304. </div>
  305. </li>
  306. <li class="item">
  307. <div>
  308. <code>
  309. <a name="/c:objc(cs)FMResultSet"></a>
  310. <a name="//apple_ref/objc/Class/FMResultSet" class="dashAnchor"></a>
  311. <a class="token" href="#/c:objc(cs)FMResultSet">FMResultSet</a>
  312. </code>
  313. </div>
  314. <div class="height-container">
  315. <div class="pointer-container"></div>
  316. <section class="section">
  317. <div class="pointer"></div>
  318. <div class="abstract">
  319. <p>Represents the results of executing a query on an <code><a href="Classes/FMDatabase.html">FMDatabase</a></code> .</p>
  320. <p>See also</p>
  321. <ul>
  322. <li><code><a href="Classes/FMDatabase.html">FMDatabase</a></code></li>
  323. </ul>
  324. <a href="Classes/FMResultSet.html" class="slightly-smaller">See more</a>
  325. </div>
  326. <div class="declaration">
  327. <h4>Declaration</h4>
  328. <div class="language">
  329. <p class="aside-title">Objective-C</p>
  330. <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">FMResultSet</span> <span class="p">:</span> <span class="nc">NSObject</span></code></pre>
  331. </div>
  332. <div class="language">
  333. <p class="aside-title">Swift</p>
  334. <pre class="highlight swift"><code><span class="kd">class</span> <span class="kt">FMResultSet</span> <span class="p">:</span> <span class="kt">NSObject</span></code></pre>
  335. </div>
  336. </div>
  337. </section>
  338. </div>
  339. </li>
  340. </ul>
  341. </div>
  342. </section>
  343. </section>
  344. <section id="footer">
  345. <p>&copy; 2020 <a class="link" href="https://github.com/ccgus/fmdb" target="_blank" rel="external">Gus Mueller, Flying Meat</a>. All rights reserved. (Last updated: 2020-05-09)</p>
  346. <p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.13.3</a>, a <a class="link" href="https://realm.io" target="_blank" rel="external">Realm</a> project.</p>
  347. </section>
  348. </article>
  349. </div>
  350. </body>
  351. </div>
  352. </html>