sqlite3_prepare_v2(
sqlite3 *db,/* Database handle */
const char *zSql,/* SQL statement,UTF-8 encoded */
int nByte,/* Maximum length of zSql in bytes. */
sqlite3_stmt **ppStmt,/* OUT: Statement handle */
const char **pzTail /* OUT: Pointer to unused portion of zSql */
注意:这里使用的是 v2 - version 2,这是 sqlite 推荐使用的版本,version 1 仅仅是为了向后兼容而保留着。
然后使用如下接口来评估的查询结果:
SQLITE_API int sqlite3_step(sqlite3_stmt*);
如果该接口返回 SQLITE_ROW,表面查询到了一行记录,我们就可以以下接口从查询描述中获取我们想要的值:
sqlITE_API const void *sqlite3_column_blob(sqlite3_stmt*,int iCol);
sqlITE_API int sqlite3_column_bytes(sqlite3_stmt*,0)"> iCol);
sqlITE_API
int
sqlite3_column_bytes16(
sqlite3_stmt*,0)"> iCol);
sqlITE_API double
sqlite3_column_double(
sqlite3_stmt*,0)"> iCol);
sqlITE_API int
sqlite3_column_int(
sqlite3_stmt*,0)"> iCol);
sqlITE_API
sqlite3_int64
sqlite3_column_int64(
sqlite3_stmt*,0)"> iCol);
sqlITE_API const unsigned char *
sqlite3_column_text(
sqlite3_stmt*,0)"> iCol);
sqlITE_API const void *
sqlite3_column_text16(
sqlite3_stmt*,0)"> iCol);
sqlITE_API int
sqlite3_column_type(
sqlite3_stmt*,0)"> iCol);
sqlITE_API
sqlite3_value *
sqlite3_column_value(
sqlite3_stmt*,int iCol);
三,MAC 下查看 sqlite db 文件的工具
MAC 下有一款不错的开源可视化 sqlite db 浏览器:sqlite Database Browser,你可以从以下链接获取:
http://sourceforge.net/projects/sqlitebrowser/
该软件运行界面如下:
四,封装 sqlite 的第三方库 FMDB
在 iOS 中直接使用 sqlite 原生 C 接口还是不那么方便,因此催生了第三方的 iOS 版封装库,其中使用比较广泛又轻量级的就是 FMDB(https://github.com/ccgus/fmdb),目前该库只有六个文件,不超过2000行代码。
使用也是非常简单,在工程中包含这六个文件:
然后包含头文件:
#import "FMDatabase.h"
#import "FMResultSet.h"
#import "FMDatabaseAdditions.h"
就可以使用该库了:
// Create database
//
NSString * path = [UIHUtilities configPathFor:kDatabaseFile];
FMDatabase db = [[FMDatabase databaseWithPath:path] retain];
if (![db open])
{
DLog(@" >> Error: Failed to open database at %@"
db.traceExecution = TRUE;
#endif
// Create tables
//
[db executeUpdate:@"CREATE TABLE Image (studyUid text,patientId text,seriesUid text,SOPUid text,contentDate text,modality text,patientPosition text,filepath text,thumbnailPath text)"];
// insert
//
BOOL retValue = [db executeUpdate:@"INSERT INTO Image (studyUid,patientId,seriesUid,SOPUid,contentDate,patientPosition,modality,filepath,thumbnailPath) VALUES (?,?,?)"retValue)
DLog(@" >> Error: Database Failed to insert image %@" ([rs next])
{
....
}
// query count
//
NSInteger count = 0;
FMResultSet *rs = [db executeQuery:@"SELECT COUNT(*) FROM Image WHERE seriesUid = ?" ([rs next]) {
count = [rs intForColumnIndex:0];
}
// delete
//
retValue = [db executeUpdate:@"DELETE FROM Image WHERE seriesUid = ?"retValue)
DLog(@" >> Error: Database Failed to delete image by seriesUid %@"