2015-07-27 12 views
12

Ho allegato $cordovaSQLite alla mia app ionica. Ecco un esempio di base del codice.Recupero di dati da oggetti che non funzionano in ionica

function retrieve() { 
var q = $q.defer(); 

var query = 'SELECT user_credentials, user_id FROM Users;'; 

$ionicPlatform.ready(function(){ 
    $cordovaSQLite.execute(db, query).then(function(res) { 
    if (res.rows.length > 0) { 
     console.log("found user"); 
     console.log(res); 
     console.log(JSON.stringify(res)); 
     q.resolve(res.rows[0]); 
    } else { 
     console.log("no rows found"); 
     q.resolve(false); 

    } 
    }, function (err) { 
    q.reject(err); 
    }); 
}); 

return q.promise; 
} 

Ecco il codice per aprire il db.

if(window.cordova) { 
    // App syntax 
    db = $cordovaSQLite.openDB("CoolApp.db"); 
} else { 
    // Ionic serve syntax 
    db = window.openDatabase("CoolApp.db", "1.0", "Cool App", -1); 
} 

quando verifico il mio app su Chrome, miei log mostrano questo

rows: SQLResultSetRowList 
    0: Object 
    user_credentials: "asdf" 
    user_id: 234 
    length: 1 
rowsAffected: 0 

Tuttavia quando ho visualizzare i registri quando si esegue il mio app iOS o Safari, ricevo

{"rows":{"length":1},"rowsAffected":0,"insertId":1} 

La mia domanda è: perché non ricevo il valore di rows? Perché funziona sul browser ma non su iOS?

+1

ma nel browser anche rowsaffected è 0! – tharif

+0

Le righeAffected sono irrilevanti per me. Ciò che conta è il contenuto della riga. A meno che non mi sbagli. – jason328

+0

@ jason328 Ci sono dei record nel database del telefono? – Vidul

risposta

1

Hai provato a creare un'istanza di un webSQL anziché SQLite DB per il tuo browser?

È sempre possibile tornare a SQLite per il dispositivo, ma i browser moderni come Chrome e Firefox non supportano SQLite.

+0

Sì, l'ho fatto. Quando apro db devo impostarlo per aprirlo a seconda se sto usando un browser o un dispositivo mobile. – jason328

2

È possibile ottenere i risultati interrogando il metodo rows.item con l'indice corrispondente se sono stati restituiti più risultati.

var elements = []; 
for (var i = 0; i < result.rows.length; i++) { 
    elements.push(result.rows.item(i)); 
} 
return elements; 

Dove risultato è l'oggetto restituito da $ cordovaSQL quando la sua promessa è completa.

Problemi correlati