標籤:
資料庫操作幾點建議:
注意sql執行語句的字串的拼字。(一定要注意拼字,深受其害 T_T )
Obj-C中SQLite常用函數。
(沒幾個,sqlite3_open,sqlite3_close,sqlite3_exec,sqlite3_perpare_v2,sqlite3_step,sqlite3_column_*,……)(外加兩個對象:sqlite,sqlite_stmt)
SQLite文法。(一般的資料庫操作都一樣)
如果做大一點的項目的話,資料庫操作還是儘可能的封裝吧。
善用搜尋。(沒少走彎路)
廢話不多說,代碼加註釋:
//資料庫路徑
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
NSString *filePath = [documentsDir stringByAppendingPathComponent:@"test3.sqlite"];
//開啟資料庫
if (sqlite3_open([filePath UTF8String], &database) != SQLITE_OK)
{
NSLog(@"開啟資料庫失敗");
}
//資料執行操作封裝,不想封裝直接用sqlite3_exec函數
//sqlite3_exec返回枚舉值(整形),可以執行建立表,插入,刪除,更新等操作
- (int)execSql:(NSString*)sql
{
char *errmsg;
if (sqlite3_exec(database, [sql UTF8String], nil, nil, &errmsg) != SQLITE_OK) {
NSLog(@"資料庫操作失敗!");
NSLog(@"%s", errmsg);
return SQLITE_ERROR;
}
return SQLITE_OK;
}
//調用封裝後的方法建立資料庫
NSString *createTableHistory = @"create table if not exists atable(id integer primary key autoincrement, acolumn nvarchar(20) not null);";
[self execSql:createTableHistory];
//資料庫查詢,(待封裝)
thing = [[NSMutableArray alloc] init];
NSString *selectSql = @"select * from atable";
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(database, [selectSql UTF8String], -1, &statement, nil) == SQLITE_OK) {
while (sqlite3_step(statement) == SQLITE_ROW) {
//nvarchar類型查詢出來是char*,賦值給NSString的話需要轉換,
//注意,這裡是第1列,列數是從第0列開始的
//如果要查詢多個欄位,如學生資訊,可以把學生封裝成一個類,然後把該類的案例一個個放到數組裡
[thing addObject:[NSString stringWithUTF8String:(char*)sqlite3_column_text(statement, 1)]];
}
}
else
{
NSLog(@"資料查詢失敗!");
}
//最後當頁面關閉,或程式關閉記得關閉資料庫
sqlite3_close(database);
iOS資料庫SQLite基本操作