iphone 数据库操作 (转载)

 


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


- (void ) InsertIntoDatabase:(CStationInfo
{
  [ 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 ));
    }
  
    
   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
{
   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
release
  }
  }
   sqlite3_reset ( select_statement);
   sqlite3_close( database );
   return  list ;
}

 

在此时需要注意得是:

绑定bind插入数据库 时,下标是从1开始

读取数据 时,下标是从0开始

 

而且,我们对

sqlite数据库 操作时,有 很多的限制

top 100  <=> limit 100


distinct 不能使用