将值插入sqlite表iOS
我试图在我的表中插入一些值,没有得到任何错误,但是没有得到插入值。我将一些值定义为varchar(100),另一些是integer。如果你仔细检查代码,你就会得到它。如果我有任何步骤。在我的表中,还有一列是int主键。这是代码将值插入sqlite表iOS,ios,iphone,sqlite,cocoa,Ios,Iphone,Sqlite,Cocoa,我试图在我的表中插入一些值,没有得到任何错误,但是没有得到插入值。我将一些值定义为varchar(100),另一些是integer。如果你仔细检查代码,你就会得到它。如果我有任何步骤。在我的表中,还有一列是int主键。这是代码 NSString *dbPath = [[[NSBundle mainBundle] resourcePath ]stringByAppendingPathComponent:@"FOM.sql"]; const char *dbpath = [dbPath
NSString *dbPath = [[[NSBundle mainBundle] resourcePath ]stringByAppendingPathComponent:@"FOM.sql"];
const char *dbpath = [dbPath UTF8String];
sqlite3 *contactDB;
sqlite3_stmt *statement;
NSString*size=@"0";
NSString*DateCreated=@"Now";
NSLog(@"db path%@",dbPath);
if (sqlite3_open(dbpath, &contactDB) == SQLITE_OK)
{
NSString *insertSQL = @"INSERT INTO MyTable (Name,one,Two,Three,Four,Date) VALUES ('SatTest',5,7,6,'0','Now')";
NSLog(@"Inser stmt %@",insertSQL);
const char *insert_stmt = [insertSQL UTF8String];
sqlite3_prepare_v2(contactDB, insert_stmt, -1, &statement, NULL);
if (sqlite3_step(statement) == SQLITE_DONE)
{
NSLog(@"SqliteDone");
// sqlite3_bind_text(statement, 1, [Name UTF8String], -1, SQLITE_TRANSIENT);
//sqlite3_bind_text(statement, 2, [r UTF8String], -1, SQLITE_TRANSIENT);
} else {
NSLog(@"error");
return NO;
}
sqlite3_finalize(statement);
sqlite3_close(contactDB);
}
我在桌子上做了一些简单的操作,可能会对您有所帮助:
首先创建sqldb对象,如:sqlite3*dbObject代码>
创建数据库
创建表
插入数据
获取所有数据
更新
删除
不需要使用try/catch-around-SQLite语句。我提到的上述代码和给定的代码Irshad都插入了值,但没有保存它,如果我立即检查,我可以看到数据,但第二次执行数据不存在。@Sat--VcanShakeTheWorld--当您写入只读文件时,数据不会持久。在我看来,您似乎在试图修改捆绑包中数据库的只读副本。(关于如何在启动时初始化DB,如果您搜索它们,大约有100个示例。)您必须检查sqlite3\u prepare\u v2()
的返回值。
- (NSString *)ExecuteNonQuery:(NSString *)query {
@try {
query = [query stringByReplacingOccurrencesOfString:@"'" withString:@"\'"];
sqlite3_prepare_v2(db, [query UTF8String], -1, &execStatement, NULL);
if (sqlite3_step(execStatement) == SQLITE_DONE) {
NSString *temp1 = [NSString stringWithFormat:@"%lld",sqlite3_last_insert_rowid(db)];
return temp1;
} else {
return [NSString stringWithFormat:@"SQL Insert Error\nError Code: %d\n Error Message: %s", sqlite3_errcode(db), sqlite3_errmsg(db)];
}
sqlite3_finalize(execStatement);
}
@catch (NSException *exception) {
@throw exception;
}
@finally {
sqlite3_close(db);
}
}
// Double check your query in sqlite manager and try with this code
-(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);
}
}