我有一个困扰我几天的问题。我想要做的就是在方法中添加一个命令' ViewDidLoad'这将使数据输入sqlite,这将使其变得简单,不需要其他字段和按钮,因此,在模拟运行时,新记录将自动插入sqlite中,所以我试试这个:
我创建了这个表:
CREATE TABLE" main"。" campos" (" id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE," campo1" VARCHAR," campo2" VARCHAR," campo3" VARCHAR)
在我的项目文件中,我所做的只是创建一个文件,名字是' MYFristViewController'使用xib文件,在'构建阶段'我添加了' libsqlite3.dylib'。在MyFristViewController.m中,我添加了以下代码:
#import "MyFristViewController.h"
#import <sqlite3.h>
@implementation MyFristViewController
- (void)viewDidLoad{
[super viewDidLoad];
sqlite3 *db;
NSString *dbPath = [[[NSBundle mainBundle] resourcePath ]stringByAppendingPathComponent:@"registros.sqlite"];
sqlite3_open([dbPath UTF8String], &db);
char *sql = "INSERT INTO campos (campo1,campo2,campo3) VALUES (?,?,?)";
sqlite3_stmt *stmt;
int resultado2 = sqlite3_prepare_v2(db, sql, -1, &stmt, nil);
sqlite3_bind_text(stmt, 1, [@"Campo_01" UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(stmt, 2, [@"Campo_02" UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(stmt, 3, [@"Campo_03" UTF8String], -1, SQLITE_TRANSIENT);
resultado2 = sqlite3_step(stmt);
sqlite3_finalize(stmt);
}
@end
作为初学者,我不知道还能做什么,我甚至尝试修改命令的第五个参数&#39; sqlite3_bind_text&#39;到SQLITE_STATIC或SQLITE_TRANSIENT,但似乎没有将值添加到数据库中,有人可以帮助我吗?
答案 0 :(得分:0)
在数据库中创建一个新的寄存器,在.h文件(继承NSObject)中,是否需要导入sqlite3.h,获取数据库的路径:
@interface RegistroCrud : NSObject{
sqlite3 *bd;
}
-(NSString *) getPathBD;
-(void)newRegister:(NSString *)campo1 campo2:(NSString *)campo2 campo3:(NSString *)campo3;
getPathDB方法是在退出时获取数据库,如果不退出则创建它
在.m文件中:
-(NSString *)getPathBD
{
NSString *dirDocs;
NSArray *rutas;
NSString *rutaBD;
rutas = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
dirDocs = [rutas objectAtIndex:0];
NSFileManager *fileMgr = [NSFileManager defaultManager];
rutaBD = [[NSString alloc] initWithString:[dirDocs
stringByAppendingPathComponent:@"registros.sqlite"]];
if([fileMgr fileExistsAtPath:rutaBD] == NO){
[fileMgr copyItemAtPath:[[[NSBundle mainBundle]resourcePath]stringByAppendingPathComponent:@"registros.sqlite"] toPath:rutaBD error:NULL
];
}
return rutaBD;
}
-(void)newRegister:(NSString *)campo1 campo2:(NSString *)campo2 campo3:(NSString *)campo3
{
NSString *pathDB = [self getPathBD];
if(!(sqlite3_open([pathDB UTF8String], &bd) == SQLITE_OK)){
NSLog(@"No se puede conectar con la BD");
return;
} else {
NSString *sqlInsert = [NSString stringWithFormat:@"INSERT OR IGNORE INTO campos (campo1,campo2,campo3) VALUES (%@,%@,'%@')",campo1,campo2,campo3];
const char *sql = [sqlInsert UTF8String];
sqlite3_stmt *sqlStatement;
if(sqlite3_prepare_v2(bd, sql, -1, &sqlStatement, NULL) != SQLITE_OK){
NSLog(@"Problema al preparar el statement");
return;
} else {
if(sqlite3_step(sqlStatement) == SQLITE_DONE){
sqlite3_finalize(sqlStatement);
sqlite3_close(bd);
}
}
}
}
您是否需要在项目中使用registros.sqlite
有一个西班牙语教程:http://www.imaginaformacion.com/tutoriales/crear-una-aplicacion-con-sql-lite-en-ios-5-parte-i/使用sqlite在ios数据库中创建crud,;)
答案 1 :(得分:0)
我尝试了很多东西,但没有得到任何结果,在这里我随身携带我的项目文件:
www.fazerbem.com.br/TesteUltimoSql.zip