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 不能用。