0

私はiPhone開発に不慣れです。データベースにsqlite3を使用してアプリを作成しています。sqlite3 manager 3.9.5を使用してテーブルを作成し、appdelegete.mファイルにコードコピーデータベースを書き込み、データベースコピーを正常に実行します。

データベースにデータを挿入すると、主キーを使用して挿入が正常に行われますが、データベースからデータにアクセスするとnullが送信され、データベースを開いてテーブルを開くと、テーブルに入力したデータが表示されません。これが、データを挿入してデータベースからデータを取得するための私のコードです。

- (IBAction)addrecord:(id)sender {

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"ebirthdaydatabase.sqlite"];
        if (sqlite3_open([path UTF8String], &database) == SQLITE_OK) {


            const char *sqlStatement = "insert into Name(name) VALUES(?)";
            sqlite3_stmt *compiledStatement;                
            if (sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK){
                NSLog(@"name.text :%@",name.text);

                sqlite3_bind_text(compiledStatement, 1, [name.text UTF8String], -1, SQLITE_TRANSIENT);
//                ShowContactsViewController *contact = [[ShowContactsViewController alloc]init];
//                contact.username = name.text;
//                [contact addarray:contact];

            }

            if(sqlite3_step(compiledStatement) != SQLITE_DONE ) {
                NSLog( @"Error: %s", sqlite3_errmsg(database) );
            } else {
                NSLog( @"Insert into row id = %lld", sqlite3_last_insert_rowid(database));
            }
            sqlite3_finalize(compiledStatement);

        sqlite3_close(database);
        }

 sqlite3 *database;
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"ebirthdaydatabase.sqlite"];

    NSLog(@"%@",path);
    if (sqlite3_open([path UTF8String], &database) == SQLITE_OK) {

        const char *sql = "select name from Name";
        sqlite3_stmt *selectstmt;
        if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) {

            while(sqlite3_step(selectstmt) == SQLITE_ROW) {

                //                NSInteger primaryKey = sqlite3_column_int(selectstmt, 0);
                //                Coffee *coffeeObj = [[Coffee alloc] initWithPrimaryKey:primaryKey];
                ShowContactsViewController *contact=[[ShowContactsViewController alloc]init];

                char *localityChars =( char *)sqlite3_column_name(selectstmt, 0);

                if (localityChars ==NULL)
                    contact.username = nil;
                else
                    contact.username = [NSString stringWithUTF8String: localityChars];

                //contact.username = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 1)];
                NSLog(@"%@",username);

                [showcontact addObject:contact];
            }
        }
    }
4

2 に答える 2

0

問題を解決できない場合は、一部のマネージャーを使用します。例:https://github.com/misato/SQLiteManager4iOS

于 2012-06-29T07:49:46.570 に答える
0

このsqlite3_column_name()関数は、内容ではなく、列の名前を返します。sqlite3_column_text()代わりに必要です。

于 2012-06-29T08:06:15.277 に答える