FMDB源码阅读(一)FMDatabase.h

 FMDatabase.h

 1 #if ! __has_feature(objc_arc)
 2     #define FMDBAutorelease(__v) ([__v autorelease]);
 3     #define FMDBReturnAutoreleased FMDBAutorelease
 4 
 5     #define FMDBRetain(__v) ([__v retain]);
 6     #define FMDBReturnRetained FMDBRetain
 7 
 8     #define FMDBRelease(__v) ([__v release]);
 9 
10     #define FMDBDispatchQueueRelease(__v) (dispatch_release(__v));
11 #else
12     // -fobjc-arc
13     #define FMDBAutorelease(__v)
14     #define FMDBReturnAutoreleased(__v) (__v)
15 
16     #define FMDBRetain(__v)
17     #define FMDBReturnRetained(__v) (__v)
18 
19     #define FMDBRelease(__v)
20 
21 // If OS_OBJECT_USE_OBJC=1, then the dispatch objects will be treated like ObjC objects
22 // and will participate in ARC.
23 // See the section on "Dispatch Queues and Automatic Reference Counting" in "Grand Central Dispatch (GCD) Reference" for details. 
24     #if OS_OBJECT_USE_OBJC
25         #define FMDBDispatchQueueRelease(__v)
26     #else
27         #define FMDBDispatchQueueRelease(__v) (dispatch_release(__v));
28     #endif
29 #endif

  这里的预编译主要是 FMDB 用来配合 ARC 和 MRC 的。当以 MRC 时只要举行的
autorelease、retain、release、dispatch_release 操作,在 ARC
时开发者是还无欲去开的,系统活动帮我们就了这些自由操作。这里的
dispatch_release 要针对性一下,在 iOS 6.0 之前便是以 ARC 下,GCD
也并没有参于 ARC ,所以要手动使用 dispatch_release 去放活内存,且以
iOS 6.0 之前 OS_OBJECT_USE_OBJC 等于 0,在6.0 之后它们等于1
,且系又把 GCD 也如一般的 OC
对象同纳入了电动引用计数范畴,就不需用 dispatch_release
去手动释放内存了。

1 #if !__has_feature(objc_instancetype)
2     #define instancetype id
3 #endif

  如果系统没有定义 instancetype,则定义使用 id 类型定义一个
instancetype 的庞大。id 可以开参数可以做回值,instancetype
只能做返回值。

1 typedef int(^FMDBExecuteStatementsCallbackBlock)(NSDictionary *resultsDictionary);

  定义一个单出一个字典做参数的名字是
FMDBExecuteStatementsCallbackBlock 的 block类型,这是一个当 FMDB 执行
SQL 语句的时召开回调的 block。

1  The three main classes in FMDB are:
2 
3  - `FMDatabase` - Represents a single SQLite database.  Used for executing SQL statements.
4  - `<FMResultSet>` - Represents the results of executing a query on an `FMDatabase`.
5  - `<FMDatabaseQueue>` - If you want to perform queries and updates on multiple threads, you'll want to use this class.

  在 FMDB 中生出三独至关重要的类:

  • FMDatabase 代表一个 SQLite 数据库,用于执行 SQL 语句。
  • FMResultSet 代表数据库执行查询操作返回的结果类。
  • FMDatabaseQueue 如果要以差不多单线程上实行查询和更新,则需利用这仿佛。

  另外:

  • FMDatabasePool 针对 FMDatabase 对象的一个 pool。
  • FMStatement 用于包装 “sqlite_stmt”(SQL 语句)的类。

  注意:

  不要实例化一个 “FMDatabase” 对象下她于多独线程。应该使用
“FMDatabeseQueue”。

 属性:

 1 /** Whether should trace execution */
 2 
 3 @property (atomic, assign) BOOL traceExecution;
 4 
 5 /** Whether checked out or not */
 6 
 7 @property (atomic, assign) BOOL checkedOut;
 8 
 9 /** Crash on errors */
10 
11 @property (atomic, assign) BOOL crashOnErrors;
12 
13 /** Logs errors */
14 
15 @property (atomic, assign) BOOL logsErrors;
16 
17 /** Dictionary of cached statements */
18 
19 @property (atomic, retain, nullable) NSMutableDictionary *cachedStatements;

  Bool traceExecution 是否跟执行。

  Bool checkedOut 是否检查。

  Bool crashOnErrors 有Error 时崩溃。

  Bool logsErrors 崩溃日志。

  NSMutableDictonary *cachedStatements 缓存 SQL 语句的字典。

 FMDatabase 初始化方法:

 1 /** Create a `FMDatabase` object.
 2  
 3  An `FMDatabase` is created with a path to a SQLite database file.  This path can be one of these three:
 4 
 5  1. A file system path.  The file does not have to exist on disk.  If it does not exist, it is created for you.
 6  2. An empty string (`@""`).  An empty database is created at a temporary location.  This database is deleted with the `FMDatabase` connection is closed.
 7  3. `nil`.  An in-memory database is created.  This database will be destroyed with the `FMDatabase` connection is closed.
 8 
 9  For example, to create/open a database in your Mac OS X `tmp` folder:
10 
11     FMDatabase *db = [FMDatabase databaseWithPath:@"/tmp/tmp.db"];
12 
13  Or, in iOS, you might open a database in the app's `Documents` directory:
14 
15     NSString *docsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
16     NSString *dbPath   = [docsPath stringByAppendingPathComponent:@"test.db"];
17     FMDatabase *db     = [FMDatabase databaseWithPath:dbPath];
18 
19  (For more information on temporary and in-memory databases, read the sqlite documentation on the subject: [http://www.sqlite.org/inmemorydb.html](http://www.sqlite.org/inmemorydb.html))
20 
21  @param inPath Path of database file
22 
23  @return `FMDatabase` object if successful; `nil` if failure.
24 
25  */
26 
27 + (instancetype)databaseWithPath:(NSString * _Nullable)inPath;

  创建一个 FMDatabase 对象。

  使用一个 SQLite 数据库文件路径创建
“FMDatabase”。这个途径可以是底下三种情景之一:

  • inPath
    是一个文件系统路径。如果这途径在磁盘上无有,那么其见面活动创建。
  • inpath 是一个空字符串(例如:@””)。在现位置创建一个缺损的数据库。当
    “FMDatabase” 连接关闭的上是数据库会被删。
  • inpath 是 nil。在内存中开创一个数据库。当 “FMDatabase”
    连接关闭的时节是数据库会为灭绝。

  如果成功返回一个 “FMDatabase” 对象,如果失败返回一个 nil。

  下面的初始化方法基本还同样:

1 + (instancetype)databaseWithURL:(NSURL * _Nullable)url;
2 
3 - (instancetype)initWithPath:(NSString * _Nullable)path;
4 
5 - (instancetype)initWithURL:(NSURL * _Nullable)url;

 打开和关闭数据库:

 1 /** Opening a new database connection
 2  
 3  The database is opened for reading and writing, and is created if it does not already exist.
 4 
 5  @return `YES` if successful, `NO` on error.
 6 
 7  @see [sqlite3_open()](http://sqlite.org/c3ref/open.html)
 8  @see openWithFlags:
 9  @see close
10  */
11 
12 - (BOOL)open;

  打开一个新的数据库连接。

  数据库让辟用来读与描写,如果数据库不在则创造它。

  如果成功返回 “YES”,错误返回 “NO”。

 1 /** Opening a new database connection with flags and an optional virtual file system (VFS)
 2 
 3  @param flags one of the following three values, optionally combined with the `SQLITE_OPEN_NOMUTEX`, `SQLITE_OPEN_FULLMUTEX`, `SQLITE_OPEN_SHAREDCACHE`, `SQLITE_OPEN_PRIVATECACHE`, and/or `SQLITE_OPEN_URI` flags:
 4 
 5  `SQLITE_OPEN_READONLY`
 6 
 7  The database is opened in read-only mode. If the database does not already exist, an error is returned.
 8  
 9  `SQLITE_OPEN_READWRITE`
10  
11  The database is opened for reading and writing if possible, or reading only if the file is write protected by the operating system. In either case the database must already exist, otherwise an error is returned.
12  
13  `SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE`
14  
15  The database is opened for reading and writing, and is created if it does not already exist. This is the behavior that is always used for `open` method.
16   
17  @return `YES` if successful, `NO` on error.
18 
19  @see [sqlite3_open_v2()](http://sqlite.org/c3ref/open.html)
20  @see open
21  @see close
22  */
23 
24 - (BOOL)openWithFlags:(int)flags;

  使用标志与一个可选的虚构文件系统打开一个新的数据库连接。

  falgs 可以起脚三单挑选:

  ”SQLITE_OPEN_READONLY”
数据库以单纯念模式打开,如果此数据库不存在则归一个 Error。

  ”SQLITE_OPEN_READWRITE”
如果可能吧,数据库被辟以便进行读与描写,或者当文件给网描绘保护的时只得进行读取。在就有限种植状况下,数据库必须有,否则会回错误。

  ”SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE”
数据库被辟以便进行读与描绘,如果数据库不有则开创。这个 flag
总是用于打开艺术的行。

 1 /** Opening a new database connection with flags and an optional virtual file system (VFS)
 2  
 3  @param flags one of the following three values, optionally combined with the `SQLITE_OPEN_NOMUTEX`, `SQLITE_OPEN_FULLMUTEX`, `SQLITE_OPEN_SHAREDCACHE`, `SQLITE_OPEN_PRIVATECACHE`, and/or `SQLITE_OPEN_URI` flags:
 4  
 5  `SQLITE_OPEN_READONLY`
 6  
 7  The database is opened in read-only mode. If the database does not already exist, an error is returned.
 8  
 9  `SQLITE_OPEN_READWRITE`
10  
11  The database is opened for reading and writing if possible, or reading only if the file is write protected by the operating system. In either case the database must already exist, otherwise an error is returned.
12  
13  `SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE`
14  
15  The database is opened for reading and writing, and is created if it does not already exist. This is the behavior that is always used for `open` method.
16  
17  @param vfsName   If vfs is given the value is passed to the vfs parameter of sqlite3_open_v2.
18  
19  @return `YES` if successful, `NO` on error.
20  
21  @see [sqlite3_open_v2()](http://sqlite.org/c3ref/open.html)
22  @see open
23  @see close
24  */
25 
26 - (BOOL)openWithFlags:(int)flags vfs:(NSString * _Nullable)vfsName;

  这个函数比直达只函数多矣一个可选的文件系统作参数。sqlite3_open_v2。

 1 /** Closing a database connection
 2  
 3  @return `YES` if success, `NO` on error.
 4  
 5  @see [sqlite3_close()](http://sqlite.org/c3ref/close.html)
 6  @see open
 7  @see openWithFlags:
 8  */
 9 
10 - (BOOL)close;

  关闭一个数据库连接。

 1 /** Test to see if we have a good connection to the database.
 2  
 3  This will confirm whether:
 4  
 5  - is database open
 6  - if open, it will try a simple SELECT statement and confirm that it succeeds.
 7 
 8  @return `YES` if everything succeeds, `NO` on failure.
 9  */
10 
11 @property (nonatomic, readonly) BOOL goodConnection;

  测试和当下底数据库是否有一个佳的连接。

  这将证明是否:

  • 数据库是否打开
  • 假使打开,它以尝试一个简约的 SELECT 语句并确认她执行成功。

 执行更新:

  SQL
语句被除去过 SELECT 语句都可称作更新操作。包括 CREATEUPDATEINSERTALTERCOMMITBEGINDETACHDROPENDEXPLAINVACUUMREPLACE 等。一般如果非是盖 SELECT 开头的
SQL 语句,都是创新语句。

  执行更新语句后会见回去一个 BOOL 值,返回 YES 表示执行更新报告句成功,返回 NO 表示出现谬误,可以通过调用 -lastErrorMessage 和 -lastErrorCode 方法获得更多错误信息。

 1 /** Execute single update statement
 2  
 3  This method executes a single SQL update statement (i.e. any SQL that does not return results, such as `UPDATE`, `INSERT`, or `DELETE`. This method employs [`sqlite3_prepare_v2`](http://sqlite.org/c3ref/prepare.html), [`sqlite3_bind`](http://sqlite.org/c3ref/bind_blob.html) to bind values to `?` placeholders in the SQL with the optional list of parameters, and [`sqlite_step`](http://sqlite.org/c3ref/step.html) to perform the update.
 4 
 5  The optional values provided to this method should be objects (e.g. `NSString`, `NSNumber`, `NSNull`, `NSDate`, and `NSData` objects), not fundamental data types (e.g. `int`, `long`, `NSInteger`, etc.). This method automatically handles the aforementioned object types, and all other object types will be interpreted as text values using the object's `description` method.
 6 
 7  @param sql The SQL to be performed, with optional `?` placeholders.
 8  
 9  @param outErr A reference to the `NSError` pointer to be updated with an auto released `NSError` object if an error if an error occurs. If `nil`, no `NSError` object will be returned.
10  
11  @param ... Optional parameters to bind to `?` placeholders in the SQL statement. These should be Objective-C objects (e.g. `NSString`, `NSNumber`, etc.), not fundamental C data types (e.g. `int`, `char *`, etc.).
12 
13  @return `YES` upon success; `NO` upon failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.
14 
15  @see lastError
16  @see lastErrorCode
17  @see lastErrorMessage
18  @see [`sqlite3_bind`](http://sqlite.org/c3ref/bind_blob.html)
19  */
20 
21 - (BOOL)executeUpdate:(NSString*)sql withErrorAndBindings:(NSError * _Nullable *)outErr, ...;

   执行单个更新语句。

  此方式执行单个 SQL 更新语句(即无回来结果的其它 SQL 语句,如
“更新”、“插入”或“删除”。这个方法应用
[‘sqlite3_prepare_v2’]、[‘sqlite3_bind’] 去绑定值用 ‘?’
做占位符在 SQL 语句之可选的参数列表里,并[‘sqlite_step’] 执行更新。

  只有这些可选取的靶子类型的价值才能够当此法子中用(例如:”NSString”、”NSNumber”、”NSNull”、”NSDate”
和 “NSData”
对象),不能够动用基本数据类(例如:”int”、”long”、”NSInteger”
等等)。这个法自动处理上述目标类型,所有其他对象类型将让诠释啊文本值,使用对象的讲述道。

  参数 sql: 表示一旦实施的 SQL 语句,使用 ‘?’ 做占位符。

  参数 outErr: 表示一个参考的 ‘NSError’ 指针,如果发生左时见面自动释放
‘NSError’
对象。如果生不当将创新其价,把错误信息返回,如果无错误虽然原值返回。

  可选参数绑定到 ‘?’ SQL 语句被之挤占位符,这些参数应该是 Objective-C
对象(例如: ‘NSString’、’NSNumber’ 等等),不是中心的 C 数据类型(例如:
‘int’、’char *’ 等等)。

  返回 ‘YES’,表示执行成功了,返回 ‘NO’
表示执行破产了。如果失败了,可以采取
‘<lastError>’、'<lastErrorCode>’ 或
‘<lastErrorMessage>’ 获得重新多之有关失败的确诊信息。 

1 /** Execute single update statement
2  
3  @see executeUpdate:withErrorAndBindings:
4  
5  @warning **Deprecated**: Please use `<executeUpdate:withErrorAndBindings>` instead.
6  */
7 
8 - (BOOL)update:(NSString*)sql withErrorAndBindings:(NSError * _Nullable*)outErr, ...  __deprecated_msg("Use executeUpdate:withErrorAndBindings: instead");;

  已经于弃用的实施更新语句的方法。

1 - (BOOL)executeUpdate:(NSString*)sql, ...;

  执行单个更新语句。

 

 1 /** Execute single update statement
 2 
 3  This method executes a single SQL update statement (i.e. any SQL that does not return results, such as `UPDATE`, `INSERT`, or `DELETE`. This method employs [`sqlite3_prepare_v2`](http://sqlite.org/c3ref/prepare.html) and [`sqlite_step`](http://sqlite.org/c3ref/step.html) to perform the update. Unlike the other `executeUpdate` methods, this uses printf-style formatters (e.g. `%s`, `%d`, etc.) to build the SQL. Do not use `?` placeholders in the SQL if you use this method.
 4 
 5  @param format The SQL to be performed, with `printf`-style escape sequences.
 6 
 7  @param ... Optional parameters to bind to use in conjunction with the `printf`-style escape sequences in the SQL statement.
 8 
 9  @return `YES` upon success; `NO` upon failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.
10 
11  @see executeUpdate:
12  @see lastError
13  @see lastErrorCode
14  @see lastErrorMessage
15  
16  @note This method does not technically perform a traditional printf-style replacement. What this method actually does is replace the printf-style percent sequences with a SQLite `?` placeholder, and then bind values to that placeholder. Thus the following command
17 
18     [db executeUpdateWithFormat:@"INSERT INTO test (name) VALUES (%@)", @"Gus"];
19 
20  is actually replacing the `%@` with `?` placeholder, and then performing something equivalent to `<executeUpdate:>`
21 
22     [db executeUpdate:@"INSERT INTO test (name) VALUES (?)", @"Gus"];
23 
24  There are two reasons why this distinction is important. First, the printf-style escape sequences can only be used where it is permissible to use a SQLite `?` placeholder. You can use it only for values in SQL statements, but not for table names or column names or any other non-value context. This method also cannot be used in conjunction with `pragma` statements and the like. Second, note the lack of quotation marks in the SQL. The `VALUES` clause was _not_ `VALUES ('%@')` (like you might have to do if you built a SQL statement using `NSString` method `stringWithFormat`), but rather simply `VALUES (%@)`.
25  */
26 
27 - (BOOL)executeUpdateWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1,2);

  和上述措施类似,只是这里不下 ‘?’ 做占位符。

  该方法的示范:

1 [db executeUpdateWithFormat:@"INSERT INTO test (name) VALUES (%@)", @"Gus"];

  上述办法的以身作则(用 ?做占位符):

1 [db executeUpdate:@"INSERT INTO test (name) VALUES (?)", @"Gus"];

 1 /** Execute single update statement
 2  
 3  This method executes a single SQL update statement (i.e. any SQL that does not return results, such as `UPDATE`, `INSERT`, or `DELETE`. This method employs [`sqlite3_prepare_v2`](http://sqlite.org/c3ref/prepare.html) and [`sqlite3_bind`](http://sqlite.org/c3ref/bind_blob.html) binding any `?` placeholders in the SQL with the optional list of parameters.
 4  
 5  The optional values provided to this method should be objects (e.g. `NSString`, `NSNumber`, `NSNull`, `NSDate`, and `NSData` objects), not fundamental data types (e.g. `int`, `long`, `NSInteger`, etc.). This method automatically handles the aforementioned object types, and all other object types will be interpreted as text values using the object's `description` method.
 6  
 7  @param sql The SQL to be performed, with optional `?` placeholders.
 8  
 9  @param arguments A `NSArray` of objects to be used when binding values to the `?` placeholders in the SQL statement.
10  
11  @return `YES` upon success; `NO` upon failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.
12  
13  @see executeUpdate:values:error:
14  @see lastError
15  @see lastErrorCode
16  @see lastErrorMessage
17  */
18 
19 - (BOOL)executeUpdate:(NSString*)sql withArgumentsInArray:(NSArray *)arguments;

  这里是为此 ‘?’ 做占位符,把绑定的价值在 arguments 数组里面。

 1 /** Execute single update statement
 2  
 3  This method executes a single SQL update statement (i.e. any SQL that does not return results, such as `UPDATE`, `INSERT`, or `DELETE`. This method employs [`sqlite3_prepare_v2`](http://sqlite.org/c3ref/prepare.html) and [`sqlite3_bind`](http://sqlite.org/c3ref/bind_blob.html) binding any `?` placeholders in the SQL with the optional list of parameters.
 4  
 5  The optional values provided to this method should be objects (e.g. `NSString`, `NSNumber`, `NSNull`, `NSDate`, and `NSData` objects), not fundamental data types (e.g. `int`, `long`, `NSInteger`, etc.). This method automatically handles the aforementioned object types, and all other object types will be interpreted as text values using the object's `description` method.
 6  
 7  This is similar to `<executeUpdate:withArgumentsInArray:>`, except that this also accepts a pointer to a `NSError` pointer, so that errors can be returned.
 8 
 9  In Swift, this throws errors, as if it were defined as follows:
10  
11  `func executeUpdate(sql: String, values: [Any]?) throws -> Bool`
12  
13  @param sql The SQL to be performed, with optional `?` placeholders.
14  
15  @param values A `NSArray` of objects to be used when binding values to the `?` placeholders in the SQL statement.
16 
17  @param error A `NSError` object to receive any error object (if any).
18 
19  @return `YES` upon success; `NO` upon failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.
20  
21  @see lastError
22  @see lastErrorCode
23  @see lastErrorMessage
24  
25  */
26 
27 - (BOOL)executeUpdate:(NSString*)sql values:(NSArray * _Nullable)values error:(NSError * _Nullable __autoreleasing *)error;

  这里跟上述措施类似,只是多矣一个 NSError
参数,用来记录错误信息返回。

 1 /** Execute single update statement
 2 
 3  This method executes a single SQL update statement (i.e. any SQL that does not return results, such as `UPDATE`, `INSERT`, or `DELETE`. This method employs [`sqlite3_prepare_v2`](http://sqlite.org/c3ref/prepare.html) and [`sqlite_step`](http://sqlite.org/c3ref/step.html) to perform the update. Unlike the other `executeUpdate` methods, this uses printf-style formatters (e.g. `%s`, `%d`, etc.) to build the SQL.
 4 
 5  The optional values provided to this method should be objects (e.g. `NSString`, `NSNumber`, `NSNull`, `NSDate`, and `NSData` objects), not fundamental data types (e.g. `int`, `long`, `NSInteger`, etc.). This method automatically handles the aforementioned object types, and all other object types will be interpreted as text values using the object's `description` method.
 6 
 7  @param sql The SQL to be performed, with optional `?` placeholders.
 8 
 9  @param arguments A `NSDictionary` of objects keyed by column names that will be used when binding values to the `?` placeholders in the SQL statement.
10 
11  @return `YES` upon success; `NO` upon failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.
12 
13  @see lastError
14  @see lastErrorCode
15  @see lastErrorMessage
16 */
17 
18 - (BOOL)executeUpdate:(NSString*)sql withParameterDictionary:(NSDictionary *)arguments;

  和上述办法类似,字典 arguments 的 key 值做绑定值。

 1 /** Execute single update statement
 2 
 3  This method executes a single SQL update statement (i.e. any SQL that does not return results, such as `UPDATE`, `INSERT`, or `DELETE`. This method employs [`sqlite3_prepare_v2`](http://sqlite.org/c3ref/prepare.html) and [`sqlite_step`](http://sqlite.org/c3ref/step.html) to perform the update. Unlike the other `executeUpdate` methods, this uses printf-style formatters (e.g. `%s`, `%d`, etc.) to build the SQL.
 4 
 5  The optional values provided to this method should be objects (e.g. `NSString`, `NSNumber`, `NSNull`, `NSDate`, and `NSData` objects), not fundamental data types (e.g. `int`, `long`, `NSInteger`, etc.). This method automatically handles the aforementioned object types, and all other object types will be interpreted as text values using the object's `description` method.
 6 
 7  @param sql The SQL to be performed, with optional `?` placeholders.
 8 
 9  @param args A `va_list` of arguments.
10 
11  @return `YES` upon success; `NO` upon failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.
12 
13  @see lastError
14  @see lastErrorCode
15  @see lastErrorMessage
16  */
17 
18 - (BOOL)executeUpdate:(NSString*)sql withVAList: (va_list)args;

  

 1 /** Execute multiple SQL statements
 2  
 3  This executes a series of SQL statements that are combined in a single string (e.g. the SQL generated by the `sqlite3` command line `.dump` command). This accepts no value parameters, but rather simply expects a single string with multiple SQL statements, each terminated with a semicolon. This uses `sqlite3_exec`. 
 4 
 5  @param  sql  The SQL to be performed
 6  
 7  @return      `YES` upon success; `NO` upon failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.
 8 
 9  @see executeStatements:withResultBlock:
10  @see [sqlite3_exec()](http://sqlite.org/c3ref/exec.html)
11 
12  */
13 
14 - (BOOL)executeStatements:(NSString *)sql;

  执行多个 SQL 语句。

  这个执行同一多重之 SQL 语句,结合在一个单纯的字符串(例如:由
‘sqlite3’ 命令行生成的 SQL
转储命令)。它不受其他价值参数,而是简单的巴一个包含多单SQL
语句之字符串,每个字符串以分公司结束。这里运用 ‘sqlite3_exec’。  

 1 /** Execute multiple SQL statements with callback handler
 2  
 3  This executes a series of SQL statements that are combined in a single string (e.g. the SQL generated by the `sqlite3` command line `.dump` command). This accepts no value parameters, but rather simply expects a single string with multiple SQL statements, each terminated with a semicolon. This uses `sqlite3_exec`.
 4 
 5  @param sql       The SQL to be performed.
 6  @param block     A block that will be called for any result sets returned by any SQL statements. 
 7                   Note, if you supply this block, it must return integer value, zero upon success (this would be a good opportunity to use SQLITE_OK),
 8                   non-zero value upon failure (which will stop the bulk execution of the SQL).  If a statement returns values, the block will be called with the results from the query in NSDictionary *resultsDictionary.
 9                   This may be `nil` if you don't care to receive any results.
10 
11  @return          `YES` upon success; `NO` upon failure. If failed, you can call `<lastError>`,
12                   `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.
13  
14  @see executeStatements:
15  @see [sqlite3_exec()](http://sqlite.org/c3ref/exec.html)
16 
17  */
18 
19 - (BOOL)executeStatements:(NSString *)sql withResultBlock:(__attribute__((noescape)) FMDBExecuteStatementsCallbackBlock _Nullable)block;

  执行多个 SQL 语句,且含一个返回执行结果的回调 block。

  任何 SQL 语句返回的结果集还以调用的 block。如果您兑现者
block,它必须返回整数,零成功后(这是一个分外好之火候,利用
SQLITE_OK),失败时的非零值(这将截留 SQL
的大气实践)。如果一个言辞返回值,该 block 将给喻为来自 NSDictionary
*resultsDictionary 查询结果。如果你免思量接结果,它恐怕也 nil。

 1 /** Last insert rowid
 2  
 3  Each entry in an SQLite table has a unique 64-bit signed integer key called the "rowid". The rowid is always available as an undeclared column named `ROWID`, `OID`, or `_ROWID_` as long as those names are not also used by explicitly declared columns. If the table has a column of type `INTEGER PRIMARY KEY` then that column is another alias for the rowid.
 4  
 5  This routine returns the rowid of the most recent successful `INSERT` into the database from the database connection in the first argument. As of SQLite version 3.7.7, this routines records the last insert rowid of both ordinary tables and virtual tables. If no successful `INSERT`s have ever occurred on that database connection, zero is returned.
 6  
 7  @return The rowid of the last inserted row.
 8  
 9  @see [sqlite3_last_insert_rowid()](http://sqlite.org/c3ref/last_insert_rowid.html)
10 
11  */
12 
13 @property (nonatomic, readonly) int64_t lastInsertRowId;

  最后插入的 “rowid”。

  以 SQLite 表的诸一个输入还发生一个唯一的64各项产生记号整数键称为
“rowid”。rowid 是可作一个未命名列 “ROWID”、”OID” 或 “_ROWID_”
只要这些名字是未是为给显式声明的排下。如果表中来同等列式 “INTEGER
PRIMARY KEY” 那列是别一个弯叫吧 ROWID 。

  这个例程返回rowid的近期成事插入到数据库`
`起数据库连接在率先单参数。由于SQLite版本3.7.7,这个例程记录普通表和虚表的结尾插入数据。如果在拖欠数据库连接上从来不中标之“插入”,则赶回零。

  返回值是最后插入的 rowid。

 1 /** The number of rows changed by prior SQL statement.
 2  
 3  This function returns the number of database rows that were changed or inserted or deleted by the most recently completed SQL statement on the database connection specified by the first parameter. Only changes that are directly specified by the INSERT, UPDATE, or DELETE statement are counted.
 4  
 5  @return The number of rows changed by prior SQL statement.
 6  
 7  @see [sqlite3_changes()](http://sqlite.org/c3ref/changes.html)
 8  
 9  */
10 
11 @property (nonatomic, readonly) int changes;

  通过前的 SQL 语句更改的行数。

  此函数返回由第一独参数指定的数据库连接着最近到位的 SQL
语句更改或者插队或删除的多少库行的多少。只有插入、更新或删除语句直接指定的变更才好不容易在内。

 检索结果:

 1 /** Execute select statement
 2 
 3  Executing queries returns an `<FMResultSet>` object if successful, and `nil` upon failure.  Like executing updates, there is a variant that accepts an `NSError **` parameter.  Otherwise you should use the `<lastErrorMessage>` and `<lastErrorMessage>` methods to determine why a query failed.
 4  
 5  In order to iterate through the results of your query, you use a `while()` loop.  You also need to "step" (via `<[FMResultSet next]>`) from one record to the other.
 6  
 7  This method employs [`sqlite3_bind`](http://sqlite.org/c3ref/bind_blob.html) for any optional value parameters. This  properly escapes any characters that need escape sequences (e.g. quotation marks), which eliminates simple SQL errors as well as protects against SQL injection attacks. This method natively handles `NSString`, `NSNumber`, `NSNull`, `NSDate`, and `NSData` objects. All other object types will be interpreted as text values using the object's `description` method.
 8 
 9  @param sql The SELECT statement to be performed, with optional `?` placeholders.
10 
11  @param ... Optional parameters to bind to `?` placeholders in the SQL statement. These should be Objective-C objects (e.g. `NSString`, `NSNumber`, etc.), not fundamental C data types (e.g. `int`, `char *`, etc.).
12 
13  @return A `<FMResultSet>` for the result set upon success; `nil` upon failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.
14  
15  @see FMResultSet
16  @see [`FMResultSet next`](<[FMResultSet next]>)
17  @see [`sqlite3_bind`](http://sqlite.org/c3ref/bind_blob.html)
18  
19  @note You cannot use this method from Swift due to incompatibilities between Swift and Objective-C variadic implementations. Consider using `<executeQuery:values:>` instead.
20  */
21 
22 - (FMResultSet * _Nullable)executeQuery:(NSString*)sql, ...;

  执行 SELECT 语句。

  执行查询而成功返回一个 ‘<FMResultSet>’对象,如果失败返回
nil。和实施更新类似,有一个变种这里接受一个’nserror ** ‘
参数。否则,你应有采取 ‘<lastErrorMessage >’ 和
‘<lastErrorMessage>’ 方法确定一个询问失败的故。

  为了遍历你的询问结果,你要用 ‘while()’ 循环。你也急需 ‘step’(via
‘<[FMResultSet next]>’)从一个记下到其他。

  该办法应用 [‘sqlite3_bind’]
任何可选参数。这好适合地转义任何索要转义序列的字符(例如引号),这排了简便的
SQL 错误,也防止了 SQL 注入攻击。这种艺术来拍卖
‘NSString’、’NSNumber’、’nsnull’、’NSDate’和 ‘NSData’
对象。所有其他对象类型将给解说也文本值,使用对象的“描述”方法。 

   参数 sql: 要执行的 SELECT 语词,用 ‘?’ 做占位符。

1 - (FMResultSet * _Nullable)executeQueryWithFormat:(NSString*)format, ... NS_FORMAT_FUNCTION(1,2);

  使用示例:

1 [db executeQueryWithFormat:@"SELECT * FROM test WHERE name=%@", @"Gus"];

  使用示例(用 ‘?’ 做占位符):

1 [db executeQuery:@"SELECT * FROM test WHERE name=?", @"Gus"];

  和方面的换代语句及其类似。

1 - (FMResultSet * _Nullable)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray *)arguments;

1 - (FMResultSet * _Nullable)executeQuery:(NSString *)sql values:(NSArray * _Nullable)values error:(NSError * _Nullable __autoreleasing *)error;

1 - (FMResultSet * _Nullable)executeQuery:(NSString *)sql withParameterDictionary:(NSDictionary * _Nullable)arguments;

1 // Documentation forthcoming.
2 - (FMResultSet * _Nullable)executeQuery:(NSString *)sql withVAList:(va_list)args;

 Transactions:

 1 /** Begin a transaction
 2  
 3  @return `YES` on success; `NO` on failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.
 4  
 5  @see commit
 6  @see rollback
 7  @see beginDeferredTransaction
 8  @see isInTransaction
 9  */
10 
11 - (BOOL)beginTransaction;

  开始一个政工。

 1 - (BOOL)beginTransaction;
 2 
 3 /** Begin a deferred transaction
 4  
 5  @return `YES` on success; `NO` on failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.
 6  
 7  @see commit
 8  @see rollback
 9  @see beginTransaction
10  @see isInTransaction
11  */
12 
13 - (BOOL)beginDeferredTransaction;

  开始一个推迟的事务。

 1 /** Commit a transaction
 2 
 3  Commit a transaction that was initiated with either `<beginTransaction>` or with `<beginDeferredTransaction>`.
 4  
 5  @return `YES` on success; `NO` on failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.
 6  
 7  @see beginTransaction
 8  @see beginDeferredTransaction
 9  @see rollback
10  @see isInTransaction
11  */
12 
13 - (BOOL)commit;

  提交一个作业。

 1 /** Rollback a transaction
 2 
 3  Rollback a transaction that was initiated with either `<beginTransaction>` or with `<beginDeferredTransaction>`.
 4 
 5  @return `YES` on success; `NO` on failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.
 6  
 7  @see beginTransaction
 8  @see beginDeferredTransaction
 9  @see commit
10  @see isInTransaction
11  */
12 
13 - (BOOL)rollback;

  回滚一个业务。

1 /** Identify whether currently in a transaction or not
2   
3  @see beginTransaction
4  @see beginDeferredTransaction
5  @see commit
6  @see rollback
7  */
8 
9 @property (nonatomic, readonly) BOOL isInTransaction;

  标识当前是否是当业务中。

 缓存语句和结果集:

1 /** Clear cached statements */
2 
3 - (void)clearCachedStatements;

  清除缓存语句。

1 /** Close all open result sets */
2 
3 - (void)closeOpenResultSets;

  关闭所有打开的结果集。

1 /** Whether database has any open result sets
2  
3  @return `YES` if there are open result sets; `NO` if not.
4  */
5 
6 @property (nonatomic, readonly) BOOL hasOpenResultSets;

  数据库是否出另打开的结果集。

1 /** Whether should cache statements or not
2   */
3 
4 @property (nonatomic) BOOL shouldCacheStatements;

  是否应当缓存语句。

1 /** Interupt pending database operation
2  
3  This method causes any pending database operation to abort and return at its earliest opportunity
4  
5  @return `YES` on success; `NO` on failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.
6  
7  */
8 
9 - (BOOL)interrupt;

  中断挂于的数据库操作。

  此道会促成其他挂于的数据库操作提前停止并返回。

 加密方式:

 1 /** Set encryption key.
 2  
 3  @param key The key to be used.
 4 
 5  @return `YES` if success, `NO` on error.
 6 
 7  @see https://www.zetetic.net/sqlcipher/
 8  
 9  @warning You need to have purchased the sqlite encryption extensions for this method to work.
10  */
11 
12 - (BOOL)setKey:(NSString*)key;

  设置加密密钥。

 1 /** Reset encryption key
 2 
 3  @param key The key to be used.
 4 
 5  @return `YES` if success, `NO` on error.
 6 
 7  @see https://www.zetetic.net/sqlcipher/
 8 
 9  @warning You need to have purchased the sqlite encryption extensions for this method to work.
10  */
11 
12 - (BOOL)rekey:(NSString*)key;

  重置加密密钥。

 1 /** Set encryption key using `keyData`.
 2  
 3  @param keyData The `NSData` to be used.
 4 
 5  @return `YES` if success, `NO` on error.
 6 
 7  @see https://www.zetetic.net/sqlcipher/
 8  
 9  @warning You need to have purchased the sqlite encryption extensions for this method to work.
10  */
11 
12 - (BOOL)setKeyWithData:(NSData *)keyData;

  设置加密密钥。使用一个 NSData 。

 1 /** Reset encryption key using `keyData`.
 2 
 3  @param keyData The `NSData` to be used.
 4 
 5  @return `YES` if success, `NO` on error.
 6 
 7  @see https://www.zetetic.net/sqlcipher/
 8 
 9  @warning You need to have purchased the sqlite encryption extensions for this method to work.
10  */
11 
12 - (BOOL)rekeyWithData:(NSData *)keyData;

  重置。

 通用查询办法:

1 /** The path of the database file
2  */
3 
4 @property (nonatomic, readonly, nullable) NSString *databasePath;

  数据库文件之路子。

1 /** The file URL of the database file.
2  */
3 
4 @property (nonatomic, readonly, nullable) NSURL *databaseURL;

  数据库文件的文书URL。

1 /** The underlying SQLite handle 
2  
3  @return The `sqlite3` pointer.
4  
5  */
6 
7 @property (nonatomic, readonly) void *sqliteHandle;

  底层 SQLite 处理。

 检索错误代码:

 1 /** Last error message
 2  
 3  Returns the English-language text that describes the most recent failed SQLite API call associated with a database connection. If a prior API call failed but the most recent API call succeeded, this return value is undefined.
 4 
 5  @return `NSString` of the last error message.
 6  
 7  @see [sqlite3_errmsg()](http://sqlite.org/c3ref/errcode.html)
 8  @see lastErrorCode
 9  @see lastError
10  
11  */
12 
13 - (NSString*)lastErrorMessage;

  最后一个错误信息。

  返回英语语言文字描述最近底挫败 SQLite API
调用一个数据库连接相关。如果前方的API调用失败,但近年来底API调用成功,这个返回值是休定义的。

 1 /** Last error code
 2  
 3  Returns the numeric result code or extended result code for the most recent failed SQLite API call associated with a database connection. If a prior API call failed but the most recent API call succeeded, this return value is undefined.
 4  
 5  @return Integer value of the last error code.
 6  
 7  @see [sqlite3_errcode()](http://sqlite.org/c3ref/errcode.html)
 8  @see lastErrorMessage
 9  @see lastError
10  
11  */
12 
13 - (int)lastErrorCode;

  最后一个错误码。

  返回数字结果代码或近年来的扩充结果代码失败 SQLite API
调用一个数据库连接相关。如果面前的 API 调用失败,但近期的 API
调用成功,这个返回值是休定义之。

 1 /** Last extended error code
 2  
 3  Returns the numeric extended result code for the most recent failed SQLite API call associated with a database connection. If a prior API call failed but the most recent API call succeeded, this return value is undefined.
 4  
 5  @return Integer value of the last extended error code.
 6  
 7  @see [sqlite3_errcode()](http://sqlite.org/c3ref/errcode.html)
 8  @see [2. Primary Result Codes versus Extended Result Codes](http://sqlite.org/rescode.html#primary_result_codes_versus_extended_result_codes)
 9  @see [5. Extended Result Code List](http://sqlite.org/rescode.html#extrc)
10  @see lastErrorMessage
11  @see lastError
12  
13  */
14 
15 - (int)lastExtendedErrorCode;

  最后扩大错误码。

  返回最近之数字扩展结果代码失败 SQLite API
调用一个数据库连接相关。如果前的 API 调用失败,但近来之 API
调用成功,这个返回值是勿定义的。

 1 /** Had error
 2 
 3  @return `YES` if there was an error, `NO` if no error.
 4  
 5  @see lastError
 6  @see lastErrorCode
 7  @see lastErrorMessage
 8  
 9  */
10 
11 - (BOOL)hadError;

  是否来左。如果起不当返回 YES,如果没有则赶回 NO。

 1 /** Last error
 2 
 3  @return `NSError` representing the last error.
 4  
 5  @see lastErrorCode
 6  @see lastErrorMessage
 7  
 8  */
 9 
10 - (NSError *)lastError;

  最后一个谬误。返回 NSError 代表最终之荒谬。

1 // description forthcoming
2 @property (nonatomic) NSTimeInterval maxBusyRetryTimeInterval;

  描述即将来临的。

 保存点:

 1 /** Start save point
 2  
 3  @param name Name of save point.
 4  
 5  @param outErr A `NSError` object to receive any error object (if any).
 6  
 7  @return `YES` on success; `NO` on failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.
 8  
 9  @see releaseSavePointWithName:error:
10  @see rollbackToSavePointWithName:error:
11  */
12 
13 - (BOOL)startSavePointWithName:(NSString*)name error:(NSError * _Nullable *)outErr;

  开始保存点。

  参数 name: 保存点的名字。

  参数 outError: 一个 ‘NSError’ 对象吸收任何 NSError 对象。

 1 /** Release save point
 2 
 3  @param name Name of save point.
 4  
 5  @param outErr A `NSError` object to receive any error object (if any).
 6  
 7  @return `YES` on success; `NO` on failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.
 8 
 9  @see startSavePointWithName:error:
10  @see rollbackToSavePointWithName:error:
11  
12  */
13 
14 - (BOOL)releaseSavePointWithName:(NSString*)name error:(NSError * _Nullable *)outErr;

  释放保存点。

 1 /** Roll back to save point
 2 
 3  @param name Name of save point.
 4  @param outErr A `NSError` object to receive any error object (if any).
 5  
 6  @return `YES` on success; `NO` on failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.
 7  
 8  @see startSavePointWithName:error:
 9  @see releaseSavePointWithName:error:
10  
11  */
12 
13 - (BOOL)rollbackToSavePointWithName:(NSString*)name error:(NSError * _Nullable *)outErr;

  回滚到保存点。

 1 /** Start save point
 2 
 3  @param block Block of code to perform from within save point.
 4  
 5  @return The NSError corresponding to the error, if any. If no error, returns `nil`.
 6 
 7  @see startSavePointWithName:error:
 8  @see releaseSavePointWithName:error:
 9  @see rollbackToSavePointWithName:error:
10  
11  */
12 
13 - (NSError * _Nullable)inSavePoint:(__attribute__((noescape)) void (^)(BOOL *rollback))block;

  开始保存点。block 在保存点内履的代码块。

 SQLite 库的状态:

1 /** Test to see if the library is threadsafe
2 
3  @return `NO` if and only if SQLite was compiled with mutexing code omitted due to the SQLITE_THREADSAFE compile-time option being set to 0.
4 
5  @see [sqlite3_threadsafe()](http://sqlite.org/c3ref/threadsafe.html)
6  */
7 
8 + (BOOL)isSQLiteThreadSafe;

  测试看看时数据库是否是线程安全之。

1 /** Run-time library version numbers
2  
3  @return The sqlite library version string.
4  
5  @see [sqlite3_libversion()](http://sqlite.org/c3ref/libversion.html)
6  */
7 
8 + (NSString*)sqliteLibVersion;

  返回时 SQLite 库的本。

1 + (NSString*)FMDBUserVersion;
2 
3 + (SInt32)FMDBVersion;

  返回 FMDB 使用的版,返回 FMDB 版本。

 创建 SQL 功能:

 1 /** Adds SQL functions or aggregates or to redefine the behavior of existing SQL functions or aggregates.
 2  
 3  For example:
 4  
 5     [db makeFunctionNamed:@"RemoveDiacritics" arguments:1 block:^(void *context, int argc, void **argv) {
 6         SqliteValueType type = [self.db valueType:argv[0]];
 7         if (type == SqliteValueTypeNull) {
 8             [self.db resultNullInContext:context];
 9              return;
10         }
11         if (type != SqliteValueTypeText) {
12             [self.db resultError:@"Expected text" context:context];
13             return;
14         }
15         NSString *string = [self.db valueString:argv[0]];
16         NSString *result = [string stringByFoldingWithOptions:NSDiacriticInsensitiveSearch locale:nil];
17         [self.db resultString:result context:context];
18     }];
19 
20     FMResultSet *rs = [db executeQuery:@"SELECT * FROM employees WHERE RemoveDiacritics(first_name) LIKE 'jose'"];
21     NSAssert(rs, @"Error %@", [db lastErrorMessage]);
22  
23  @param name Name of function.
24 
25  @param arguments Maximum number of parameters.
26 
27  @param block The block of code for the function.
28 
29  @see [sqlite3_create_function()](http://sqlite.org/c3ref/create_function.html)
30  */
31 
32 - (void)makeFunctionNamed:(NSString *)name arguments:(int)arguments block:(void (^)(void *context, int argc, void * _Nonnull * _Nonnull argv))block;

  添加 SQL 函数或聚合或还定义现有 SQL 函数或聚合的所作所为。

1 - (void)makeFunctionNamed:(NSString *)name maximumArguments:(int)count withBlock:(void (^)(void *context, int argc, void * _Nonnull * _Nonnull argv))block __deprecated_msg("Use makeFunctionNamed:arguments:block:");

  废弃的道。

1 typedef NS_ENUM(int, SqliteValueType) {
2     SqliteValueTypeInteger = 1,
3     SqliteValueTypeFloat   = 2,
4     SqliteValueTypeText    = 3,
5     SqliteValueTypeBlob    = 4,
6     SqliteValueTypeNull    = 5
7 };

  定义一个意味 SqliteValue 类型的枚举。

1 - (SqliteValueType)valueType:(void *)argv;

1 /**
2  Get integer value of parameter in custom function.
3  
4  @param value The argument whose value to return.
5  @return The integer value.
6  
7  @see makeFunctionNamed:arguments:block:
8  */
9 - (int)valueInt:(void *)value;

  以自定义函数中因参数值返回一个 int。

1 /**
2  Get long value of parameter in custom function.
3  
4  @param value The argument whose value to return.
5  @return The long value.
6  
7  @see makeFunctionNamed:arguments:block:
8  */
9 - (long long)valueLong:(void *)value;

  long。

1 /**
2  Get double value of parameter in custom function.
3  
4  @param value The argument whose value to return.
5  @return The double value.
6  
7  @see makeFunctionNamed:arguments:block:
8  */
9 - (double)valueDouble:(void *)value;

  double。

1 /**
2  Get `NSData` value of parameter in custom function.
3  
4  @param value The argument whose value to return.
5  @return The data object.
6  
7  @see makeFunctionNamed:arguments:block:
8  */
9 - (NSData * _Nullable)valueData:(void *)value;

  NSData。

1 /**
2  Get string value of parameter in custom function.
3  
4  @param value The argument whose value to return.
5  @return The string value.
6  
7  @see makeFunctionNamed:arguments:block:
8  */
9 - (NSString * _Nullable)valueString:(void *)value;

  NSString。

1 /**
2  Return null value from custom function.
3  
4  @param context The context to which the null value will be returned.
5  
6  @see makeFunctionNamed:arguments:block:
7  */
8 - (void)resultNullInContext:(void *)context NS_SWIFT_NAME(resultNull(context:));

1 /**
2  Return integer value from custom function.
3  
4  @param value The integer value to be returned.
5  @param context The context to which the value will be returned.
6  
7  @see makeFunctionNamed:arguments:block:
8  */
9 - (void)resultInt:(int) value context:(void *)context;

  返回 int。

1 /**
2  Return long value from custom function.
3  
4  @param value The long value to be returned.
5  @param context The context to which the value will be returned.
6  
7  @see makeFunctionNamed:arguments:block:
8  */
9 - (void)resultLong:(long long)value context:(void *)context;

  返回 long。

1 /**
2  Return double value from custom function.
3  
4  @param value The double value to be returned.
5  @param context The context to which the value will be returned.
6  
7  @see makeFunctionNamed:arguments:block:
8  */
9 - (void)resultDouble:(double)value context:(void *)context;

  返回 double。

 1 /**
 2  Return `NSData` object from custom function.
 3  
 4  @param data The `NSData` object to be returned.
 5  @param context The context to which the value will be returned.
 6  
 7  @see makeFunctionNamed:arguments:block:
 8  */
 9 - (void)resultData:(NSData *)data context:(void *)context;
10 
11 /**
12  Return string value from custom function.
13  
14  @param value The string value to be returned.
15  @param context The context to which the value will be returned.
16  
17  @see makeFunctionNamed:arguments:block:
18  */
19 - (void)resultString:(NSString *)value context:(void *)context;
20 
21 /**
22  Return error string from custom function.
23  
24  @param error The error string to be returned.
25  @param context The context to which the error will be returned.
26  
27  @see makeFunctionNamed:arguments:block:
28  */
29 - (void)resultError:(NSString *)error context:(void *)context;
30 
31 /**
32  Return error code from custom function.
33  
34  @param errorCode The integer error code to be returned.
35  @param context The context to which the error will be returned.
36  
37  @see makeFunctionNamed:arguments:block:
38  */
39 - (void)resultErrorCode:(int)errorCode context:(void *)context;

  和上述方法类似,返回不同门类的值。

1 /**
2  Report memory error in custom function.
3  
4  @param context The context to which the error will be returned.
5  
6  @see makeFunctionNamed:arguments:block:
7  */
8 - (void)resultErrorNoMemoryInContext:(void *)context NS_SWIFT_NAME(resultErrorNoMemory(context:));

  在从定义函数中晓外存不当。

1 /**
2  Report that string or BLOB is too long to represent in custom function.
3  
4  @param context The context to which the error will be returned.
5  
6  @see makeFunctionNamed:arguments:block:
7  */
8 - (void)resultErrorTooBigInContext:(void *)context NS_SWIFT_NAME(resultErrorTooBig(context:));

  报告字符串或项太长不能够于打定义函数中代表。

 日期格式:

 1 /** Generate an `NSDateFormatter` that won't be broken by permutations of timezones or locales.
 2  
 3  Use this method to generate values to set the dateFormat property.
 4  
 5  Example:
 6 
 7     myDB.dateFormat = [FMDatabase storeableDateFormat:@"yyyy-MM-dd HH:mm:ss"];
 8 
 9  @param format A valid NSDateFormatter format string.
10  
11  @return A `NSDateFormatter` that can be used for converting dates to strings and vice versa.
12  
13  @see hasDateFormatter
14  @see setDateFormat:
15  @see dateFromString:
16  @see stringFromDate:
17  @see storeableDateFormat:
18 
19  @warning Note that `NSDateFormatter` is not thread-safe, so the formatter generated by this method should be assigned to only one FMDB instance and should not be used for other purposes.
20 
21  */
22 
23 + (NSDateFormatter *)storeableDateFormat:(NSString *)format;

  生成一个 ‘sqliteNSDateFormatter’ 不为时区或位置破坏。
  使用这种措施变的价来安日期格式属性。

  注意: ‘NSDateFormatter’
不是线程安全之,所以该办法变的格式化程序应该仅仅分红为一个 FMDB
实例,不得用于其它用途。

 1 /** Test whether the database has a date formatter assigned.
 2  
 3  @return `YES` if there is a date formatter; `NO` if not.
 4  
 5  @see hasDateFormatter
 6  @see setDateFormat:
 7  @see dateFromString:
 8  @see stringFromDate:
 9  @see storeableDateFormat:
10  */
11 
12 - (BOOL)hasDateFormatter;

  判断数据库是否有指定的日子格式。

 1 /** Set to a date formatter to use string dates with sqlite instead of the default UNIX timestamps.
 2  
 3  @param format Set to nil to use UNIX timestamps. Defaults to nil. Should be set using a formatter generated using FMDatabase::storeableDateFormat.
 4  
 5  @see hasDateFormatter
 6  @see setDateFormat:
 7  @see dateFromString:
 8  @see stringFromDate:
 9  @see storeableDateFormat:
10  
11  @warning Note there is no direct getter for the `NSDateFormatter`, and you should not use the formatter you pass to FMDB for other purposes, as `NSDateFormatter` is not thread-safe.
12  */
13 
14 - (void)setDateFormat:(NSDateFormatter *)format;

  设置日期格式的日子使用字符串而无是默认的 Unix 时间戳,SQLite。

  设置为 nil 使用Unix时间戳。默认为 nil。应安装以格式化程序
storeabledateformat FMDatabase:返回的 NSDateFormatter 对象。

  注意: 有没有发出一直的
‘NSDateFormatter’,你无应当使用格式化程序传递让其它用途 FMDB,作为
‘NSDateFormatter’ 不是线程安全的。

 1 /** Convert the supplied NSString to NSDate, using the current database formatter.
 2  
 3  @param s `NSString` to convert to `NSDate`.
 4  
 5  @return The `NSDate` object; or `nil` if no formatter is set.
 6  
 7  @see hasDateFormatter
 8  @see setDateFormat:
 9  @see dateFromString:
10  @see stringFromDate:
11  @see storeableDateFormat:
12  */
13 
14 - (NSDate * _Nullable)dateFromString:(NSString *)s;

  将参数 NSString 转化为 NSDate,使用时数据库格式。

 1 /** Convert the supplied NSDate to NSString, using the current database formatter.
 2  
 3  @param date `NSDate` of date to convert to `NSString`.
 4 
 5  @return The `NSString` representation of the date; `nil` if no formatter is set.
 6  
 7  @see hasDateFormatter
 8  @see setDateFormat:
 9  @see dateFromString:
10  @see stringFromDate:
11  @see storeableDateFormat:
12  */
13 
14 - (NSString *)stringFromDate:(NSDate *)date;

  将参数 NSDate 转化为 NSString,使用时数据库格式。

 Objective-C wrapper for ‘sqlite3_stmt’:

1  This is a wrapper for a SQLite `sqlite3_stmt`. Generally when using FMDB you will not need to interact directly with `FMStatement`, but rather with `<FMDatabase>` and `<FMResultSet>` only.
2  
3  ### See also
4  
5  - `<FMDatabase>`
6  - `<FMResultSet>`
7  - [`sqlite3_stmt`](http://www.sqlite.org/c3ref/stmt.html)

  这是一个 SQLite ‘sqlite3_stmt’ 包装。通常使用 FMDB
时若无欲直接运用 ‘FMStatement’,而是就用 ‘<FMDatabase>’ 和
‘<FMResultSet>’。

 

 FMStatement 类:

 1 @interface FMStatement : NSObject {
 2     void *_statement;
 3     NSString *_query;
 4     long _useCount;
 5     BOOL _inUse;
 6 }
 7 
 8 ///-----------------
 9 /// @name Properties
10 ///-----------------
11 
12 /** Usage count */
13 
14 @property (atomic, assign) long useCount;
15 
16 /** SQL statement */
17 
18 @property (atomic, retain) NSString *query;
19 
20 /** SQLite sqlite3_stmt
21  
22  @see [`sqlite3_stmt`](http://www.sqlite.org/c3ref/stmt.html)
23  */
24 
25 @property (atomic, assign) void *statement;
26 
27 /** Indication of whether the statement is in use */
28 
29 @property (atomic, assign) BOOL inUse;
30 
31 ///----------------------------
32 /// @name Closing and Resetting
33 ///----------------------------
34 
35 /** Close statement */
36 
37 - (void)close;
38 
39 /** Reset statement */
40 
41 - (void)reset;
42 
43 @end

  成员变量和性能。

  int useCount; 使用计数。

  NSString *query; SQL 语句。

  void *statement; 声明陈述。

  BooL inUse; 指示语句是否在以受到的指令。

 

  最后是:关闭语句和重置语句。

END

网站地图xml地图