`
stephen830
  • 浏览: 2965891 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

iphone 数据库操作 (转载)

 
阅读更多

iphone 数据库操作 (转载)

 

转载自:http://heidianfeng.blog.163.com/blog/static/6184345620101135565206/

 

在iphone上,当我们需要将数据存入数据库时,有多种方法,但是如果所要存入得数据里面有特殊字符,例如:‘,%等时,我们采用一些方法插入数据库就会出错。因此一般情况下建议都使用绑定bind.


- (void ) InsertIntoDatabase:(CStationInfo *)sInfo

{

[ self OpenDatabase];

char *sql = "INSERT INTO Feature (id, name, slogan) VALUES (?, ?, ?)";

if ( sqlite3_prepare_v2 ( database, sql, - 1 , & insert_statement, NULL ) != SQLITE_OK )

{

Assert ( 0 , "Failed to prepare insert statement for '%s'.", sqlite3_errmsg ( database ));

    }

    // -- prepare the values

sqlite3_bind_text( insert_statement , 1 , [[ NSString stringWithFormat: @"%d" , sInfo. stationID ] UTF8String],- 1 , SQLITE_TRANSIENT );

sqlite3_bind_text( insert_statement , 2 , [sInfo. name UTF8String], - 1 , SQLITE_TRANSIENT );

sqlite3_bind_text( insert_statement , 3 , [sInfo. slogan UTF8String], - 1 , SQLITE_TRANSIENT );

 

    int32 success = sqlite3_step ( insert_statement);

    sqlite3_reset ( insert_statement);

    if (success != SQLITE_ERROR )

    {

NSLog ( @"insert is success");

    }

    else

    {

NSLog ( @"insert is failse");

        Assert ( 0 , "Failed to insert into database with message '%s'.", sqlite3_errmsg ( database ));

    }    

sqlite3_close( database );

}

 

需要从数据库中查询出来时,可以使用:

 

- (NSMutableArray *)SelectFromDatabase

{

NSLog ( @"%%%%%%%%%%");

[ self OpenDatabase];

char * sql = "select * from Feature";

if (!list ) {

[ list removeAllObjects];

}

if ( sqlite3_prepare_v2 ( database, sql, - 1 , & select_statement, nil )== SQLITE_OK )

{

while ( sqlite3_step ( select_statement)== SQLITE_ROW )

{

NSString * id = [ NSString stringWithUTF8String: ( char *) sqlite3_column_text( select_statement , 0 )];

NSString *name = [ NSString stringWithUTF8String: ( char *) sqlite3_column_text( select_statement , 1 )];

NSString *slogan = [ NSString stringWithUTF8String: ( char *) sqlite3_column_text( select_statement , 2 )];

CStationInfo *sInfo=[[CStationInfo alloc ] InitWithName :name slogan :slogan stationID :[id integerValue ]];

[list addObject :sInfo];

[sInfo release ];

}

}

sqlite3_reset ( select_statement);

sqlite3_close( database );

return list ;

}

 

在此时需要注意得是:

当我们使用绑定bind插入数据库 时,下标是从1开始 的!!!!!!!!

当我们一般情况使用,如从数据库中读取数据 时,下标是从0开始 的。

 

而且,我们对sqlite数据库 操作时,有很多的限制 。例如:top 100 不能用。
top 100  <=> limit 100
distinct 不能使用 等!
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics