我知道如何在表格中插入数据 我尝试很多时间在不同的应用程序上它工作完美但是。当我创建新的数据库和表。当我调用添加按钮然后我在控制台上收到此错误保存错误:
没有这样的表:位
这是我的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];
}
答案 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创建应用程序的示例代码。