sqlite3 in applicazione iphone
Domanda
I costruire in sqlite3 3 tavoli. Quando sto facendo il seguente comando 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
E 'funzionare bene nel guscio, ma se metto questa dichiarazione nella mia applicazione iphone sto ottenendo un errore.
/*
* 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;
}
Quando eseguo l'applicazione ottengo l'errore in "sqlite3_prepare_v2" }
Cosa c'è di sbagliato?
Soluzione
Forse prova a mettere i parametri all'interno apici
Quindi, qualcosa di simile:
WHERE u.userID = 'us.userID' AND st.storeID = 'us.saleStoreID' ORDER BY us.saleID
Inoltre si dovrebbe fare uso di attacchi per ottenere le dichiarazioni di sicurezza:
per es.
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];
}
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow