【发布时间】:2011-08-07 18:37:37
【问题描述】:
我为插入记录的 SQLite 数据库创建了一个 insert 语句。我的代码工作正常——当我运行我的代码时,它会显示一条消息,指出添加了一条新记录。
当我打开 SQLite 浏览器查看记录是否已添加到数据库表时,记录没有出现。可能是什么问题呢?我的代码工作正常。它在模拟器中显示添加了联系人的消息,但在数据库中没有添加联系人。
这是我的代码:
#import <UIKit/UIKit.h>
#import "TAddNewJourney.h"
@interface insertAppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
TAddNewJourney *iC;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) TAddNewJourney *iC;
-(void) chekAndCreateDatabase;
-(void)insert;
@end
.m 文件:
#import "insertAppDelegate.h"
#import <sqlite3.h>
#import "TAddNewJourney.h"
#import "Global.h"
@implementation insertAppDelegate
@synthesize window;
@synthesize iC;
static NSString* databaseName;
static NSString* databasePath;
static sqlite3* database;
-(void) chekAndCreateDatabase
{
BOOL success;
databaseName=@"demo.sqlite";
NSArray *documentPaths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir =[documentPaths objectAtIndex:0];
databasePath = [NSString stringWithFormat:@"%@/%@", documentsDir, databaseName];
NSLog(@"Database Path is: %@", databasePath);
NSLog(@"Database Name is: %@", databaseName);
NSFileManager *fileManager=[NSFileManager defaultManager];
if( [fileManager fileExistsAtPath:databasePath] == NO ) {
// Open database.
if( sqlite3_open( [databasePath UTF8String], &database ) == SQLITE_OK ) {
char* errorMsg;
// Create Articles Table.
const char* articlesTable = "CREATE TABLE [UserJourney] (name text, location text)";
if( sqlite3_exec(database, articlesTable, NULL, NULL, &errorMsg) != SQLITE_OK )
NSLog( @"Fail to create UserJourney table. Error is: %@", errorMsg );
} else NSLog(@"Fail to Create/Open database");
}
else {
NSLog(@"Open database.");
sqlite3_open( [databasePath UTF8String], &database );
}
}
-(void)insert{
[self chekAndCreateDatabase];
// Create Pre Sqlite query string.
NSString* preSqliteQuery = @"INSERT INTO UserJourney VALUES ('%@', '%@')";
// Create Sqlite query string.
NSString* queryString = [NSString stringWithFormat:preSqliteQuery,Gjourney,Glocation];
// Execute query.
if(sqlite3_exec(database, [queryString UTF8String], NULL, NULL, NULL)== SQLITE_DONE){
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"UIAlertView" message:@"Record added" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
alert = nil;
}
else {
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"UIAlertView" message:@"not Added" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
alert = nil;
}
这是我的控制器类:
@interface TAddNewJourney : UIViewController {
IBOutlet UITextField *mTextJourney;
IBOutlet UITextField *mTextLocation;
IBOutlet UIButton *mStart;
IBOutlet UIButton *mCancel;
}
@property (nonatomic,retain)UITextField *textjourney;
@property (nonatomic,retain)UITextField *textlocation;
-(IBAction)Start:(id)sender;
-(IBAction)Cancel:(id)sender;
@end
.m 文件
#import "TAddNewJourney.h"
#import "Global.h"
#import <sqlite3.h>
#import "insertAppDelegate.h"
@implementation TAddNewJourney
@synthesize textjourney=mTextJourney;
@synthesize textlocation =mTextLocation;
-(IBAction)Start:(id)sender{
Gjourney = mTextJourney.text;
Glocation = mTextLocation.text;
insertAppDelegate *app=(insertAppDelegate *)[[UIApplication sharedApplication]delegate];
[app insert];
}
【问题讨论】:
-
放一些代码,这样任何人都可以尝试给你一些建议
-
您是否已将数据库复制到您的文档目录中......并且您是否在插入后检查该副本中的数据?
标签: objective-c cocoa-touch ios sqlite