Я сделал некоторые простые операции на таблице, которая может быть вам помочь:
во-первых, создать объект SQLdb в Lazarus как: sqlite3 *dbObject;
создать DB
-(NSString *)filePath{
NSString *documentsDir=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES) objectAtIndex:0];
return [documentsDir stringByAppendingPathComponent:@"Company.db"];
// NSLog(@"DB CREATED");
}
создать Таблица
-(void)createTable
{
if(sqlite3_open([[self filePath] UTF8String], &dbObject) == SQLITE_OK) {
char *err;
NSString *sqlString=[NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS Employee(emp_id INTEGER PRIMARY KEY,emp_name VARCHAR (20),emp_add text);"];
if (sqlite3_exec(dbObject, [sqlString UTF8String], NULL,NULL,&err)!=SQLITE_OK){
// created
}
else
{
}
sqlite3_close(dbObject);
}
else
{
NSLog(@"SaveBody: Failed from sqlite3_prepare_v2. Error is: %s ", sqlite3_errmsg(dbObject));
}
}
вставки данных
-(void)insertData:(NSMutableArray*) mutableArr
{
if(sqlite3_open([[self filePath] UTF8String], &dbObject) == SQLITE_OK) {
const char *sqlQuery="INSERT INTO Employee (emp_id,emp_name,emp_add) VALUES (?,?,?)";
sqlite3_stmt* statement;
for (NSDictionary *empdict in mutableArr)
{
if(sqlite3_prepare_v2(dbObject, sqlQuery, -1, &statement, NULL) == SQLITE_OK)
{
int card_Id = [empdict valueForKey:@"card_Id"];
NSString *name =[NSString stringWithFormat:@"%@", [empdict valueForKey:@"name"]];
NSString *add = [NSString stringWithFormat:@"%@",[empdict valueForKey:@"address"]];
sqlite3_bind_int(statement,1,card_Id);
sqlite3_bind_text(statement,2,[name UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement,3,[add UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_step(statement);
}
else {
NSLog(@"SaveBody: Failed from sqlite3_prepare_v2. Error is: %s ", sqlite3_errmsg(dbObject));
}
sqlite3_finalize(statement);
}
sqlite3_close(dbObject);
}
}
получить все данные
-(void)getData:(int)empId
{
if(sqlite3_open([[self filePath] UTF8String], &dbObject) == SQLITE_OK) {
NSString* sqliteQuery= [NSString stringWithFormat:@"SELECT emp_name FROM Employee Where emp_id=%i;",empId];
sqlite3_stmt *compiledStatement;
if(sqlite3_prepare_v2(dbObject, [sqliteQuery UTF8String], -1, &compiledStatement, NULL) == SQLITE_OK){
while(sqlite3_step(compiledStatement) == SQLITE_ROW){
NSString *name = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)];
}
}
else{
NSLog(@"SaveBody: Failed from sqlite3_prepare_v2. Error is: %s ", sqlite3_errmsg(dbObject));
}
sqlite3_finalize(compiledStatement);
sqlite3_close(dbObject);
}
else{
NSLog(@"SaveBody: Failed from sqlite3_prepare_v2. Error is: %s ", sqlite3_errmsg(dbObject));
}
}
обновление
-(void)updateDetails:(NSArray*)arr
{
sqlite3_stmt *statment;
for (NSString *tagString in arr) {
NSString* query = [NSString stringWithFormat:@"UPDATE Employee SET emp_name='ABC'WHERE emp_id=1;"];
if(sqlite3_prepare_v2(dbObject,[query UTF8String], -1, &statment, NULL)==SQLITE_OK)
{
while(sqlite3_step(statment) == SQLITE_DONE)
{
NSLog(@"updated ");
}
}
}
sqlite3_finalize(statment);
}
удалить
- (void)deleteData{
sqlite3_stmt* statement;
NSString *query = [NSString stringWithFormat:@"Delete from Employee Where emp_id=1;"];
if(sqlite3_prepare_v2(dbObject,[query UTF8String], -1, &statement, NULL)==SQLITE_OK)
{
while(sqlite3_step(statement) == SQLITE_DONE)
{
// record has deleted
}
sqlite3_finalize(statement);
}
}
Мне кажется, что вы пытаетесь изменить только для чтения копию базы данных в связке. (На SO есть около 100 примеров того, как инициализировать БД при запуске, если вы их ищете.) –
Вы * должны * проверить возвращаемое значение 'sqlite3_prepare_v2()'. –