0

データベースからデータを取得できませんsqlite。その中にデータが存在します(データベースファイルを手動で開いて確認しました)。データベースへの接続が正常に確立されています。私の sqlite3_step ステートメントも SQLITE_OK を返します。しかし、結果セットには何も含まれていません。コードスニペットは次のとおりです。

 - (void)viewDidLoad
    {
        [super viewDidLoad];

        databaseReferences = [[DatabaseReferences alloc]init];

        const char *newPath = [databasepath UTF8String];
        int opened = sqlite3_open(newPath, &db);

        if(opened == SQLITE_OK)
        {
            NSLog(@"Database for processing login query opened successfully...");
        }
        else
        {
            NSLog(@"Database for processing login query NOT OPENED...");
        }
    }

sqlite3注: ここで、databaseReferences は型変数を含むクラスのオブジェクトです

実際には、UI 側で、ユーザーはユーザー名と pwd を入力し、ユーザーが入力したフィールドを sqlite データベースに既に存在するデータと照合しています。ユーザーがログインボタンを押したとき。次のことが起こります。

-(BOOL)processLoginQueryusername:(NSString *)uname password:(NSString *)pwd
{
    const char *getUsernames = "select Username from LoginTable";
    int outcome = sqlite3_prepare_v2(db, getUsernames, -1, &statement, NULL);

    if(outcome != SQLITE_OK)
    {
        NSLog(@"could not find the usernames");
        NSLog(@"the error is %s", sqlite3_errmsg(db));
    }

    else
    {
        NSLog(@"got the usernames.. Now checking for valid username and password entry..");

        NSLog(@"the number of columns returned is %d", sqlite3_column_count(statement));

        int i = 0;
        while( sqlite3_step(statement)== SQLITE_ROW)
        {
            NSString *name = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(statement, 0)];
            [usernameList addObject:name];
            NSLog(@"the Username list array contains %d names", usernameList.count);
            NSLog(@"the name is %@", [usernameList objectAtIndex:i]);
            i++;
        }

        for(int i = 0; i<usernameList.count; i++)
        {   
            if([uname isEqualToString:[usernameList objectAtIndex:i]])
            {
                NSLog(@"You are an authenticated user..");
                return YES;
            }
        }
        return NO;
    }

    return NO;
}

これは、AppDelegate のメソッドの私のコードです。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    referenceToDatabase = [[DatabaseReferences alloc]init];
    [referenceToDatabase establishDatabaseConnection];
    [referenceToDatabase release];
    //code for initializing window.. so not including that code
}

referenceToDatabasesqlite3 変数を含むクラスのオブジェクトです。これが私の呼び出されたメソッドです:

-(BOOL)establishDatabaseConnection
{
    usernameList = [[NSMutableArray alloc] init];

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *dbPath = [paths objectAtIndex:0];
    databaseName = @"TaskManagementDatabase.sql";

    databasepath = [dbPath stringByAppendingPathComponent:databaseName];
    NSLog(@"%@",databasepath);

    NSFileManager *fileManager = [NSFileManager defaultManager];

    if([fileManager fileExistsAtPath:databasepath])
    {
        NSLog(@"the database already exists");
        return YES;
    }

    else
    {
        NSLog(@"database does not exist.. creating the database");
        const char *newPath = [databasepath UTF8String];
        int opened = sqlite3_open(newPath, &db);

        if(opened == SQLITE_OK)
        {
            NSLog(@"newly created database opened successfully...");
            [self createBothTables];
            [self insertInitialDataIntoBothTables];
            sqlite3_close(db);
            return YES;
        }

これは私がコンソールで得ているものです:

TaskListManagementApplication[9838:c07] はユーザー名を取得しました.現在、有効なユーザー名とパスワードのエントリを確認しています.. 2013-09-02 11:33:55.134 TaskListManagementApplication[9838:c07] 返される列の数は 1 です 2013-09-02 11 :33:55.135 TaskListManagementApplication[9838:c07] ユーザー名リスト配列には 0 個の名前が含まれています 2013-09-02 11:33:55.136 TaskListManagementApplication[9838:c07] 名前は (null) 2013-09-02 11:33:55.136 TaskListManagementApplication [9838:c07] ユーザー名リスト配列には 0 個の名前が含まれています 2013-09-02 11:33:55.136 TaskListManagementApplication[9838:c07] 名前は (null) 2013-09-02 11:33:55.137 TaskListManagementApplication[9838:c07]ユーザー名リスト配列には 0 個の名前が含まれています 2013-09-02 11:33:55.137 TaskListManagementApplication[9838:c07] 名前は (null) 2013-09-02 11:33:55.137 TaskListManagementApplication[9838:c07] ユーザー名リスト配列には 0 個の名前が含まれています 2013-09-02 11:33:55.138 TaskListManagementApplication[9838:c07] 名前は (null) 2013-09-02 11:33:55.138 TaskListManagementApplication[9838:c07] ユーザー名リスト配列には 0 個の名前が含まれています 2013-09-02 11:33:55.138 TaskListManagementApplication[9838:c07] 名前は (null)

4

0 に答える 0