Когда я использую Web SQL, у меня проблемы - PullRequest
0 голосов
/ 14 февраля 2012

Я попытался вставить некоторые данные в базу данных web sql. Но я столкнулся с проблемой.

Мой код:

database();

for(var i=0;i<m.length;i++){ 
  showid = m[i].id;
  showtitle = m[i].title;
  insert();
} 

function database(){
  //open the database 
  db = window.openDatabase("youyanchu", "1.0","youyanchu",500000);
  db.transaction(function(tx) {
   var table = tx.executeSql("CREATE TABLE showList (id int PRIMARY KEY, title NVARCHAR, finishDate NVARCHAR, status NVARCHAR, tkCount NVARCHAR )");
  });
}

//INTEGER NOT NULL PRIMARY KEY

function insert(){
  db.transaction(function(ar) {
  ar.executeSql("INSERT INTO showList (id, title,finishDate,status) values(?,?,?,?)", [showid,showtitle,'aaa','bbb']);
  });
}

m.length равен 3, а "m" должно быть

aaa = {'id': '999', 'title': 'ninini'}

bbb = {'id': '888', 'title': 'ninini'}

ccc = {'id': '777', 'title': 'ninini'}

Наконец, в сети просто отображается "ccc".

Каквставить все данные в базу данных? Какую ошибку я допустил в коде?

1 Ответ

2 голосов
/ 14 февраля 2012

Поскольку tx.executeSql является асинхронным, я полагаю, что ваш loop завершится до того, как первый insert запустится.

Следовательно, showid и showtitle всегда будут иметь последние значения объекта m

Попробуйте вместо этого:

for(var i=0;i<m.length;i++){ 
    insert(m[i].id, m[i].title);
} 


function insert(id, title){

  db.transaction(function(tx) {
    txexecuteSql("INSERT INTO showList (id, title,finishDate,status) values(?,?,?,?)", [id, title,'aaa','bbb']);
  });

}   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...