0

在我的代码中,我试图在我创建的 SQLite 数据库中的表中插入一个新行。现在,当我创建打开数据库时,我检查它是否正确打开,但是当我尝试将一行插入其中一个表时,它不起作用。部分代码检查文档文件夹中是否已存在数据库文件,如果不存在则创建一个。现在我认为数据类型可能存在问题......这会产生错误吗?这是代码,请注意插入到表中的值是这样定义的对象的属性:

@property (nonatomic) int connectionRefNumber;
@property (nonatomic) int otherUserID;
@property (strong, nonatomic) NSString * otherUserName;
@property (strong, nonatomic) NSString * otherUserProfilePicturePath;
@property (strong, nonatomic) NSDate * connectionDate;
@property (nonatomic) BOOL * otherUserFB;
@property (nonatomic) BOOL * otherUserTW;
@property (nonatomic) BOOL * otherUserHP;

打开数据库并填充表的数据库方法(数据库本身被创建,如果不存在,则在另一种方法中)。这是我为处理所有与数据库相关的任务而创建的特殊类的一部分:

-(void)initDatabase {
NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES);
/*NSString * documentsDirectory = [paths objectAtIndex:0];
NSString * databasePath = [documentsDirectory stringByAppendingPathComponent:@"sqlite.db"];*/
NSArray * pathArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString * databasePath = [[pathArray objectAtIndex:0] stringByAppendingPathComponent:@"sqlite.db"];

BOOL databaseAlreadyExists = /*[[NSFileManager defaultManager] fileExistsAtPath:databasePath];*/NO;


if (sqlite3_open([databasePath UTF8String],&databaseHandle) == SQLITE_OK){
    NSLog(@"DATABASE OPEN");
    if (!databaseAlreadyExists){
        const char * sqlStatement = "CREATE TABLE IF NOT EXISTS CONNECTIONS (CONNECTIONREFNUMBER INTEGER PRIMARY KEY  AUTOINCREMENT , OTHERUSERID INTEGER, OTHERUSERNAME VARCHAR, OTHERUSERPICTUREPATH VARCHAR, CONNECTIONDATE DATETIME, OTHERUSERFB BOOL, OTHERUSERTW BOOL, OTHERUSERHP BOOL)";
        char *error;
        if (sqlite3_exec(databaseHandle, sqlStatement, NULL, NULL, &error) == SQLITE_OK) {
            NSLog(@"DATABSE AND TABLES CREATED");
        } else {
            NSLog(@"ErrorL %s", error);
        }
    }
}else{
    NSLog(@"cant open database");
}

}

最后,我用来调用此方法的代码,这可能是我在数据类型方面做错了

ConectionsDataController * dataController = [[ConectionsDataController alloc] init];
//[dataController initDatabase];
NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
int ID = 1;
int RefNumber = 1;
BOOL fb = YES;
BOOL tw = YES;
BOOL hp = YES;
NSDate *connectionDate = [dateFormatter dateFromString:@"1955-02-24"];
connectionData * connectionObject = [[connectionData alloc]initWithConnectionRefNumber:&RefNumber    otherUserID:&ID otherUserName:@"John Jones" otherUserProfilePicturePath:@"/1" connectionDate:connectionDate otherUserFB:&fb otherUserTW:&tw otherUserHP:&hp];
[dataController insertConnectionToDatabase:connectionObject];
4

1 回答 1

0

刚让别人看了我的代码,他发现了问题,所以我决定在这里分享:

在数据库中,我将其中一列定义为 PRIMARY KEY。这意味着每一行都必须是唯一的。现在出于测试目的,我只使用了一个,所以它工作了一次,但是当我再次尝试时(仍然是 1),它不是唯一的,因此它不能作为主键列的值。

只是在开发和调试时要看的东西,因为它可能会被忽略,尤其是在使用数据库方面没有太多经验的情况下。

于 2012-08-05T08:25:52.630 回答