值插入模拟器但未显示在数据库表中

时间:2011-04-18 10:27:36

标签: objective-c cocoa-touch ios sqlite

我为我的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];

}

3 个答案:

答案 0 :(得分:0)

你可以这样试试

   NSString* str = [NSString stringwithformat:@"INSERT OR REPLACE INTO insert (textfieldm, textfieldn) VALUES ('%@', '%@')", Gunameq, Gpassq];
    if(sqlite3_exec(database, [str 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;
}

我想通过这种方式你可以做到!祝你好运!!!

答案 1 :(得分:0)

.h文件

#import <Foundation/Foundation.h>
#import <sqlite3.h>

@interface SqliteDatabase : NSObject {


}

// Check and Create Sqlite Table.
+ (void) CheckAndCreateDatabase;
+ (void) insert;

@end

.m文件

// Static Variables.
static NSString* dataBaseName;
static NSString* dataBasePath;
static sqlite3*  database;


#pragma mark -
#pragma mark Check and Create Sqlite Table.
+ (void) CheckAndCreateDatabase {
    NSLog(@"\nCall of: CheckAndCreateDatabase");
    // Set database name.
    dataBaseName = @"Database.db";
    // Initialize database path.
    NSArray* paths         = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString* documentsDir = [paths objectAtIndex:0];
    dataBasePath           = [NSString stringWithFormat:@"%@/%@", documentsDir, dataBaseName];
    NSLog(@"Database Path is: %@", dataBasePath);
    NSLog(@"Database Name is: %@", dataBaseName);

    // Create a FileManager object, we will use this to check the status
    // of the database and to copy it over if required
    NSFileManager* fileManager = [NSFileManager defaultManager];

    // Check if the database has already been created in the users filesystem.
    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 [TableName] (textfieldm, text, textfieldn text)";
            if( sqlite3_exec(database, articlesTable, NULL, NULL, &errorMsg) != SQLITE_OK )
                NSLog( @"Fail to create [TableName] table. Error is: %@", errorMsg );


        } else NSLog(@"Fail to Create/Open database");
    }
    else {
        NSLog(@"Open database.");
        sqlite3_open( [dataBasePath UTF8String], &database );
    }
}

以下是必须插入的方式

+ (void) insert {
    // Create Pre Sqlite query string.
    NSString* preSqliteQuery = @"INSERT INTO [TableName] (textfieldm, textfieldn VALUES ('%@', '%@')";

    // Create Sqlite query string.
    NSString* queryString = [NSString stringWithFormat:preSqliteQuery, Gunameq, Gpassq];
    // Execute query.
    sqlite3_exec(database, [queryString UTF8String], NULL, NULL, NULL);
}

如果我帮助你,别忘了评价我!!!祝你好运!!!

答案 2 :(得分:0)

sqlite3_exec(database, [queryString UTF8String], NULL, NULL, NULL);
NSLog("Error is: %@");

添加NSLog行并查看日志,请告诉我您的项目中发生了什么错误。也许以这种方式我可以告诉你该怎么做。