【问题标题】:sqlite3 in iphone applicationiphone应用程序中的sqlite3
【发布时间】:2012-02-15 21:51:59
【问题描述】:

我在 sqlite3 中构建了 3 个表。当我执行以下 SELECT 命令时:

select us.saleSpecificProduct,us.fAtMall,u.name,u.gender,st.storeName
  from UsersSale us,Users u,Stores st
 where u.userID=us.userID and st.storeID=us.saleStoreID order by us.saleID

它在 shell 中工作正常,但如果我将此语句放在我的 iphone 应用程序中,我会收到错误。

/*
 * read items from the database and store in itemw
 *
 */
-(void)readItems {

if (!database) return; // earlier problems

// build select statement
if (!selStmt)
{
  const char *sql =  "select us.saleSpecificProduct,us.fAtMall,u.name,u.gender,st.storeName from UsersSale us,Users u,Stores st where u.userID=us.userID and st.storeID=us.saleStoreID order by us.saleID"; 
      if (sqlite3_prepare_v2(database, sql, -1, &selStmt, NULL) != SQLITE_OK)
    {
        selStmt = nil;
    }

当我执行应用程序时,“sqlite3_prepare_v2”中出现错误 }

怎么了?

【问题讨论】:

    标签: ios5 sqlite xcode4.2


    【解决方案1】:

    也许试着把你的参数放在单引号里

    比如:

    WHERE u.userID = 'us.userID' AND st.storeID = 'us.saleStoreID' ORDER BY us.saleID
    

    您还应该使用绑定来获取安全语句:

    例如

    NSString *strGet = @" . . . WHERE u.userID = ? AND st.storeID = ? ORDER BY us.saleID"
    
    if(sqlite_prepare_v2(...) == SQLITE_OK)
    {
        sqlite3_bind_int(stmtGet, 1, us.userID);
        sqlite3_bind_int(stmtGet, 2, us.saleStoreID);
    
        while(sqlite3_step(stmtGet) == SQLITE_ROW)
        {
            DatabaseDataObject *myDataObj = [[DatabaseDataObject alloc] init];
    
            myDataObj.objID = sqlite3_column_int(0);
            myDataObj.postcode = sqlite3_column_int(1);
    
            // add to parameter array of objects
            [myArr addObject:myDataObj];
    
            [myDataObj release];
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-20
      • 2012-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多