我在Xcode中使用以下代碼創建數據庫。它可以順利運行到NSFilemanager
代碼,但在此之後,它將終止到代碼爲else
的代碼[email protected]"failed to open/create database";
,因此無法創建表。 我輸入了sqlite3.h
並創建了sqlDatabase
參考變量sqlite3
仍然不起作用。使用sqlite在xcode中爲表創建表失敗
-(void)databaseCreate
{
NSString *docsDir;
NSString *dbPath;
NSArray *dirPath;
dirPath=NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES);
NSLog(@"dirpath::%@",dirPath);
docsDir=[dirPath objectAtIndex:0];
NSLog(@"document directory::%@",docsDir);
dbPath=[[NSString alloc] initWithString:[docsDir stringByAppendingPathComponent:@"timerpro1.db"]];
NSLog(@"database path::%@",dbPath);
NSFileManager *fileManager=[NSFileManager defaultManager];
if([fileManager fileExistsAtPath: dbPath] == NO)
{
const char *databsPath=[dbPath UTF8String];
NSLog(@"treat filemanager");
if(sqlite3_open(databsPath,&sqlDatabase) == SQLITE_OK)
{
char *err;
NSLog(@"create inside");
const char *sql_stmt="CREATE TABLE IF NOT EXISTS PRJDATA(ID INTEGER PRIMERY KEY AUTOINCREMENT,PRJ_NAME TEXT,PRJ_DATE TEXT,TIME_POINT1 TEXT,TIME_POINT2 TEXT,TIME_POINT3 TEXT,POINT2_DIFF_MIN TEXT,POINT2_DIFF_SEC TEXT,POINT3_DIFF_MIN TEXT,POINT3_DIFF_SEC TEXT)";
if (sqlite3_exec(sqlDatabase, sql_stmt, NULL, NULL, &err)!=SQLITE_OK)
{
[email protected]"failed to create table";
}
sqlite3_close(sqlDatabase);
}
else
{
[email protected]"failed to open/create database";
}
}
[fileManager release];
}
感謝羅布它工作正常.. –
當我用sqlite3_errmsg();在上面提到的代碼中,那麼它會生成日誌,如**庫例程稱爲失序序列**沒有任何其他錯誤獲取表也創建。 –
@hirangsheth這是文檔不得不說[關於不按順序的庫例程](http://sqlite.org/cvstrac/wiki?p=LibraryRoutineCalledOutOfSequence)。總之,這意味着你調用'sqlite3'函數的順序錯誤。你上面的問題的代碼(用我上面的兩個修補程序),對我來說工作得很好,所以我猜你已經改變了你的代碼了?也許在關閉數據庫後嘗試另一個'sqlite3'函數?如果解決方案沒有在你身上跳躍,也許你可以在新問題中發佈該代碼。 – Rob