проблема при вставке значений в базу данных - PullRequest
1 голос
/ 08 апреля 2011

Я знакомился с sqlite и пытался вставить значения в базу данных, но дал исключение.tf1 и tf2 являются объектами текстового поля.Вот мой код:

@synthesize tf1, tf2, add, disp;
-(id)initApp

{
if(![super init])
        return nil;

    //DB stored in application bundle
    NSString *DBName = @"kbase.sqlite";
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *path = [documentsDirectory stringByAppendingString:DBName];

    db = [FMDatabase databaseWithPath:path];
    [db setLogsErrors:TRUE];
    [db setTraceExecution:TRUE];

    if(![db open])
    {
        NSLog(@"Could not open Database");
        return 0;
    }

    else
    {
        NSLog(@"Database opened successfully");
    }
    return self;
}


- (void)viewDidLoad {
    [super viewDidLoad];
    [self initApp];
    [add addTarget:self action:@selector(insertButtonClicked:)   forControlEvents:UIControlEventTouchUpInside]; 
    [disp addTarget:self action:@selector(displaytButtonClicked:)   forControlEvents:UIControlEventTouchUpInside]; 
}


-(IBAction)insertButtonClicked :(id)sender
{ 
    NSLog(@"insert");
    NSLog(@"db.....%@",db);
    [db executeUpdate:@"insert into info values (?,?)", tf1.text, tf2.text];

    [self resignFirstResponder];

}

-(IBAction)displayButtonClicked:(id)sender

{
    NSString *str1 = tf2.text;
    NSString *returnResult = [[NSString alloc]init];
    FMResultSet *rs = [db executeQuery:@"select name from info where rollno = 1"];

    while ([rs next])
    {
        returnResult = [rs stringForColumn:@"rollno"];
        [tf1 setText:returnResult];
        [tf2 setText:returnResult];
    }       
}

База данных успешно открывается, и управление завершается после исключения вставки печати:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSURL executeQuery:]: unrecognized selector sent to instance 0x3d30ef0'

Я не могу настроить проблему.Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 08 апреля 2011

Я думаю, сделайте ваш метод

[db executeUpdate: @ "вставить в информационные значения (?,?)" WithValue1: tf1.text withValue2: tf2.text];

Вместо

[db executeUpdate: @ "вставить в информационные значения (?,?)", Tf1.text, tf2.text];

0 голосов
/ 08 апреля 2011

кажется, что db не существует в этом контексте.Если db является переменной класса, убедитесь, что она не выпущена где-то еще.Просто поместите NSLog(@"%@", db); над исполнением, чтобы проверить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...