如何在iphone的sqlite数据库中保存日期

时间:2012-01-03 10:36:37

标签: iphone objective-c

我知道如何在表格中插入数据        我尝试很多时间在不同的应用程序上它工作完美但是。当我创建新的数据库和表。当我调用添加按钮然后我在控制台上收到此错误保存错误:

  

没有这样的表:位

这是我的sqlite代码

#import "untitled.h"
#import<sqlite3.h>
#define DATABASE_NAME @"hello.sqlite"

@implementation untitled
@synthesize enter;


- (NSString *) getDBPath {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
    NSString *documentsDir = [paths objectAtIndex:0];
    NSLog(@"*****##:%@",documentsDir);
    return [documentsDir stringByAppendingPathComponent:DATABASE_NAME];
}

- (void) copyDatabaseIfNeeded {

    //Using NSFileManager we can perform many file system operations.
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSError *error;
    NSString *dbPath = [self getDBPath];
    NSLog(@"*****:%@",dbPath);
    BOOL success = [fileManager fileExistsAtPath:dbPath]; 

    if(!success) {

        NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:DATABASE_NAME];
        success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error];

        if (!success) 
            NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
    }


}

-(void)Add
{
    NSString *filePath = [self getDBPath];
    NSLog(@"this check:%@",filePath);
    sqlite3 *database;

    if(sqlite3_open([filePath UTF8String], &database) == SQLITE_OK) {
        const char *sqlStatement = "insert into bit(Title) VALUES (?)";
        sqlite3_stmt *compiledStatement;
        if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK)    {


            sqlite3_bind_text( compiledStatement, 1, [enter.text UTF8String], -1, SQLITE_TRANSIENT);



        }
        if(sqlite3_step(compiledStatement) != SQLITE_DONE ) {
            NSLog( @"Save Error: %s", sqlite3_errmsg(database) );
        }
        else {
            sqlite3_reset(compiledStatement);
            UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"UIAlertView" message:@"Record added" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [alert show];
            [alert release];
            alert = nil;

        }

        sqlite3_finalize(compiledStatement);
    }
    sqlite3_close(database);
}

-(IBAction)sumit{

    [self Add];


}

2 个答案:

答案 0 :(得分:0)

我需要申报

static sqlite3_stmt *addStmt = nil; 

在@implementation className的上面。

...添加

+ (void) finalizeStatements 
{ 
if (database) sqlite3_close(database); 
if (addStmt) sqlite3_finalize(addStmt);`
}

然后在ADD()中你必须在if

中添加以下语句
sqlite3_bind_text(addStmt, 1, [Title UTF8String], -1, SQLITE_TRANSIENT);

我认为它会对你有所帮助。

答案 1 :(得分:0)

查看sql语句“insert into bit(title)VALUES(?)”和输出“No such table:bit”,您可以猜测该表尚未在您的代码中的任何位置定义。您必须在尝试插入数据之前创建表。

只是一个建议,为什么不使用核心数据?创建一个使用Core Data模板的新项目,您将看到使用Core Data创建应用程序的示例代码。