长白山山长 发表于 2013-11-4 22:01:50

phonegap循环调用insert语句,只有最后一次的数据入库了,费解

var category_id;
var parent_category_id;
var category_name;
function insertCategory(id,parent_id,name){
        category_id = id;
        parent_category_id = parent_id;
        category_name = name;
        egory_id+"\n"+category_name);
        var db = window.openDatabase("Database", "1.0", "Cordova Demo", 200000);
        db.transaction(insertCategory_, errorCB);
}
function insertCategory_(tx){
        var insertSQL = "INSERT INTO PRODUCT_CATEGORY "
                                  + "(PRODUCT_CATEGORY_ID, "
                                  + "PRIMARY_PARENT_CATEGORY_ID, "
                                  + "CATEGORY_NAME) "
                                  
                                  + "VALUES ('" + category_id + "',"
                                  + "'" + parent_category_id + "',"
                                  + "'" + category_name + "')";
                                  
        console.log(insertSQL);       
        tx.executeSql(insertSQL);
}
function test() {
    for(var i=0;i<3;i++){
      insertCategory(i,"parentID_"+i,"categoryName_"+i);
    }
}循环结束后,只有最后一次循环的数据入库了,这是怎么回事呢?求指点!!感激不尽

长白山山长 发表于 2013-11-4 22:06:15

第8行代码是无用代码,可忽略不计

admin 发表于 2013-11-4 22:09:26

看看如下代码,再就是研究一下官方html5 Web SQL 看看有些东西到底是这么用的谢谢你对我们的支持
<html>
    <head>
      <title>Web SQL Demo</title>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <meta name="viewport" content="width=device-width,initial-scale=1.0" />
      <script src="jquery.js"></script>
      <script src="phonegap.js"></script>
      <script>
      function openDB() {
            var db = openDatabase(
                  "body_building_db",             // 数据库的短名字
                  "1.0",                        // 数据库的版本
                  "Database for body building",   // 数据库的长名字
                  1024*1024                     // 允许的最大尺寸(字节为单位)
                );
            return db;
      }

      function createBodyBuildingTable(db) {
            var sql = "CREATE TABLE IF NOT EXISTS body_building (id INTEGER PRIMARY KEY AUTOINCREMENT, note TEXT, date DATE);";
            db.transaction(function (tx) {
                tx.executeSql(
                  sql,// 要执行的SQL语句
                  [],   // SQL语句的参数列表
                  function () { // 成功的回调函数
                        // 插入样本数据
                        record = {note: "今天练了两个小时", date: new Date(2012, 2, 1)};
                        insertRecord(db, record);
                        record = {note: "今天重点练习了腰部", date: new Date(2012, 2, 4)};
                        insertRecord(db, record);
                        record = {note: "手臂练得好疼", date: new Date(2012, 2, 7)};
                        insertRecord(db, record);
                        record = {note: "洗完澡,称了一下,增重了,呵呵", date: new Date(2012, 2, 11)};
                        insertRecord(db, record);
                  },
                  statementErrorCallback // 语句执行失败的回调函数
                );
                console.log("Execute sql...");
            }, transactionErrorCallback// 事务创建失败的回调函数
            );
            console.log("create table...");
      }

      function transactionErrorCallback(error) {
            alert("Error: " + error.message);
      }

      function statementErrorCallback(transaction, error) {
            alert("Error: " + error.message);
      }

      function insertRecord(db, bodyBuildingRecord) {
            var sql = "INSERT INTO body_building (note, date) VALUES (?,?);"
            db.transaction(function (tx) {
                tx.executeSql(
                  sql,
                  , // SQL语句的参数列表
                  function() {
                        console.log('success');
                  },
                  statementErrorCallback
                );
            });
      }

      function getRecords(db) {
            var sql = "SELECT * FROM body_building;";
            db.transaction(function (tx) {
                tx.executeSql(
                  sql,
                  [], // SQL语句的参数列表
                  function(transaction, resultSet) {
                        var rows = resultSet.rows;
                        for (var i = 0; i < rows.length; i++) {
                            // 每条记录显示为一个列表项
                            $("#body_building").append('<li>'+ rows.item(i).note + ' ' + '</li>');
                        }
                  },
                  statementErrorCallback
                );
            });
      }
      
      // 应用入口点
      document.addEventListener("deviceready", function() {
            var db = openDB();
            createBodyBuildingTable(db);
            $("#load_button").click(function() {
                // 获取数据并更新页面
                getRecords(db);
            });
      });
      </script>
    </head>
    <body>
      <h1>Web SQL演示</h1>
      <input type="button" id="load_button" value="加载" />
      <ul id="body_building"></ul>
    </body>
</html>


页: [1]
查看完整版本: phonegap循环调用insert语句,只有最后一次的数据入库了,费解