javascript - Inserting related data using SQLite with Blackberry Webworks -


i have blackberry webworks webapp running under bb5, storing data locally using sqlite database. database has 2 tables, event , flight, 1 event can have many flights associated it.

i'm finding difficult work out how populate both tables array of data. trouble in getting foreign key insert flights table, due asynchronous way bb's sqlite implementation works.

db.transaction(function(tx) {      for(var = 0; < eventsarray.length; i++) {           var insertid = 0;           tx.executesql("insert event(id,eventname,venuename) values (?,?,?)",                             [null,                              eventsarray[i].eventname,                              eventsarray[i].venuename],                              function(tx,result) { //success callback                                  insertid = result.insertid;                                  //if try inserting flights here, eventsarray[i] returns                                  //the last item in array, loop has kept running                              }            );            //if try inserting here, don't have insertid            //to populate foreign key (still set 0            //callbacks haven't fired yet) } 

so seems wherever try perform insert query flights, i'm missing piece of data. either insert id or actual event object containing flights need insert.

is there better way of doing this?

there many ways resolve problem. straightforward approach:

db.transaction(function(tx) {      var eventids = [];      for(var = 0; < eventsarray.length; i++) {
tx.executesql("insert event(id,eventname,venuename) values (?,?,?)", [null, eventsarray[i].eventname, eventsarray[i].venuename], function(tx,result) { //success callback eventids[i] = result.insertid; } ); } //for //now, every event eventsarray[i] have eventid eventids[i] for(i = 0; < flightsarray.length; i++) { //use eventids[i] here } });

it more appropriate store id in callback eventsarray[i].id = result.indsertid; i.e. directly on current event object. depends on details of business logic, maybe event.id means else. also, makes sense use local variable event not re-calculate eventsarray[i] every time access members.


Comments

Popular posts from this blog

linux - Mailx and Gmail nss config dir -

c# - Is it possible to remove an existing registration from Autofac container builder? -

php - Mysql PK and FK char(36) vs int(10) -