`

【转】html5 Web SQL Database应用例子

阅读更多
//1. initialization

var localDB = null;

function onInit(){
    try {
        if (!window.openDatabase) {
            updateStatus("Error: DB not supported");
        }
        else {
            initDB();
            createTables();
            queryAndUpdateOverview();
        }
    } 
    catch (e) {
        if (e == 2) {
            updateStatus("Error: Invalid database version.");
        }
        else {
            updateStatus("Error: Unknown error " + e + ".");
        }
        return;
    }
}

function initDB(){
    var shortName = 'stuffDB';
    var version = '1.0';
    var displayName = 'MyStuffDB';
    var maxSize = 65536; // in bytes
    localDB = window.openDatabase(shortName, version, displayName, maxSize);
}

function createTables(){
    var query = 'CREATE TABLE IF NOT EXISTS items(id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, amount VARCHAR NOT NULL, name VARCHAR NOT NULL);';
    try {
        localDB.transaction(function(transaction){
            transaction.executeSql(query, [], nullDataHandler, errorHandler);
            updateStatus("Table 'items' is present");
        });
    } 
    catch (e) {
        updateStatus("Error: Unable to create table 'items' " + e + ".");
        return;
    }
}




//2. query db and view update

// event handler start with on*


function onUpdate(){
    var id = document.itemForm.id.value;
    var amount = document.itemForm.amount.value;
    var name = document.itemForm.name.value;
    if (amount == "" || name == "") {
        updateStatus("'Amount' and 'Name' are required fields!");
    }
    else {
        var query = "update items set amount=?, name=? where id=?;";
        try {
            localDB.transaction(function(transaction){
                transaction.executeSql(query, [amount, name, id], function(transaction, results){
                    if (!results.rowsAffected) {
                        updateStatus("Error: No rows affected");
                    }
                    else {
                        updateForm("", "", "");
                        updateStatus("Updated rows:" + results.rowsAffected);
                        queryAndUpdateOverview();
                    }
                }, errorHandler);
            });
        } 
        catch (e) {
            updateStatus("Error: Unable to perform an UPDATE " + e + ".");
        }
    }
}

function onDelete(){
    var id = document.itemForm.id.value;
    
    var query = "delete from items where id=?;";
    try {
        localDB.transaction(function(transaction){
        
            transaction.executeSql(query, [id], function(transaction, results){
                if (!results.rowsAffected) {
                    updateStatus("Error: No rows affected.");
                }
                else {
                    updateForm("", "", "");
                    updateStatus("Deleted rows:" + results.rowsAffected);
                    queryAndUpdateOverview();
                }
            }, errorHandler);
        });
    } 
    catch (e) {
        updateStatus("Error: Unable to perform an DELETE " + e + ".");
    }
    
}

function onCreate(){
    var amount = document.itemForm.amount.value;
    var name = document.itemForm.name.value;
    if (amount == "" || name == "") {
        updateStatus("Error: 'Amount' and 'Name' are required fields!");
    }
    else {
        var query = "insert into items (amount, name) VALUES (?, ?);";
        try {
            localDB.transaction(function(transaction){
                transaction.executeSql(query, [amount, name], function(transaction, results){
                    if (!results.rowsAffected) {
                        updateStatus("Error: No rows affected.");
                    }
                    else {
                        updateForm("", "", "");
                        updateStatus("Inserted row with id " + results.insertId);
                        queryAndUpdateOverview();
                    }
                }, errorHandler);
            });
        } 
        catch (e) {
            updateStatus("Error: Unable to perform an INSERT " + e + ".");
        }
    }
}

function onSelect(htmlLIElement){
	var id = htmlLIElement.getAttribute("id");
	
	query = "SELECT * FROM items where id=?;";
    try {
        localDB.transaction(function(transaction){
        
            transaction.executeSql(query, [id], function(transaction, results){
            
                var row = results.rows.item(0);
                
                updateForm(row['id'], row['amount'], row['name']);
                
            }, function(transaction, error){
                updateStatus("Error: " + error.code + "<br>Message: " + error.message);
            });
        });
    } 
    catch (e) {
        updateStatus("Error: Unable to select data from the db " + e + ".");
    }
   
}

function queryAndUpdateOverview(){

	//remove old table rows
    var dataRows = document.getElementById("itemData").getElementsByClassName("data");
	
    while (dataRows.length > 0) {
        row = dataRows[0];
        document.getElementById("itemData").removeChild(row);
    };
    
	//read db data and create new table rows
    var query = "SELECT * FROM items;";
    try {
        localDB.transaction(function(transaction){
        
            transaction.executeSql(query, [], function(transaction, results){
                for (var i = 0; i < results.rows.length; i++) {
                
                    var row = results.rows.item(i);
                    var li = document.createElement("li");
					li.setAttribute("id", row['id']);
                    li.setAttribute("class", "data");
                    li.setAttribute("onclick", "onSelect(this)");
                    
                    var liText = document.createTextNode(row['amount'] + " x "+ row['name']);
                    li.appendChild(liText);
                    
                    document.getElementById("itemData").appendChild(li);
                }
            }, function(transaction, error){
                updateStatus("Error: " + error.code + "<br>Message: " + error.message);
            });
        });
    } 
    catch (e) {
        updateStatus("Error: Unable to select data from the db " + e + ".");
    }
}

// 3. misc utility functions

// db data handler

errorHandler = function(transaction, error){
    updateStatus("Error: " + error.message);
    return true;
}

nullDataHandler = function(transaction, results){
}

// update view functions

function updateForm(id, amount, name){
    document.itemForm.id.value = id;
    document.itemForm.amount.value = amount;
    document.itemForm.name.value = name;
}

function updateStatus(status){
    document.getElementById('status').innerHTML = status;
}
分享到:
评论

相关推荐

    2024年全国职业院校技能大赛集成电路应用开发赛项竞赛试题(04 卷)

    2024年全国职业院校技能大赛集成电路应用开发赛项竞赛试题(04 卷)

    Bihl+Wiedemann BWU376024 ASi-3 PROFINET 网关,单主站 GSD文件

    Bihl+Wiedemann BWU376024 ASi-3 PROFINET 网关,单主站 GSD文件

    植物大战僵尸.docx

    《植物大战僵尸》是一款由美国宝开游戏公司(PopCap Games)开发的益智策略类塔防游戏,于2009年5月5日正式发售。这款游戏以其独特的玩法和丰富的角色设定吸引了大量玩家。 首先,游戏的核心玩法是玩家通过种植不同的植物来防御入侵的僵尸。游戏中植物种类繁多,每种植物都有其独特的攻击方式和功能,如豌豆射手、向日葵、樱桃炸弹等。其中,豌豆射手作为玩家的第一道防线,能够发射豌豆攻击僵尸;向日葵则是收集阳光的重要来源,为种植更多植物提供能量;樱桃炸弹则能一次性炸飞一片区域内的所有僵尸。 其次,游戏中的僵尸种类也非常丰富,从最基本的普通僵尸到拥有各种特殊能力的僵尸,如路障头僵尸、撑杆跳僵尸、铁桶头僵尸等,每种僵尸都有其独特的特性和攻击方式。玩家需要根据不同僵尸的特点,合理安排植物的种植位置和种类,以达到最佳的防御效果。 此外,游戏还设置了多种游戏模式,如冒险模式、小游戏、解密模式等,让玩家在游戏中体验不同的挑战和乐趣。同时,游戏还支持多人合作玩法,玩家可以与朋友一起合作抵御僵尸的入侵。 总的来说,《植物大战僵尸》以其独特的玩法、丰富的角色设定和多样化的游戏模式,成为了一款备受欢迎的游

    2024年全国职业院校技能大赛集成电路应用开发赛项竞赛试题(03卷)

    2024年全国职业院校技能大赛集成电路应用开发赛项竞赛试题(03卷)

    (人事)档案室安全设备明细表.docx

    (人事)档案室安全设备明细表.docx

    rabbitmq面试题.pdf

    以下是针对RabbitMQ的一些面试题,覆盖了基础概念、架构、特性、使用场景、性能、监控与管理等多个方面: ### 基础概念 1. RabbitMQ是什么?它是如何工作的? 2. 解释RabbitMQ中的生产者、消费者、队列和交换器。 3. 什么是消息队列(Message Queueing),使用消息队列有什么好处? 4. RabbitMQ中的交换器有哪些类型? 5. 什么是死信队列(Dead-Letter Queue)? 6. 解释RabbitMQ中的消息确认机制。 7. 什么是RabbitMQ中的持久化消息(Persistent Message)? 8. 如何理解RabbitMQ的发布订阅模型? ### 高级特性 9. 什么是RabbitMQ的路由(Routing)? 10. 解释RabbitMQ中的主题交换器(Topic Exchange)和如何使用。 11. RabbitMQ支持哪些高级消息模式?例如RPC。 12. 什么是RabbitMQ的消息重试机制? 13. 解释RabbitMQ的集群,它是如何工作的? 14. RabbitMQ的镜像队列(Mirrored Queue

    一种基于红外测温传感器的高速电吹风高精度体感控温解决方案

    主要分享了红外非接触测温传感器在智能高速电吹风上的一种做提感温度控制的方案,目前当下绝大部分电吹风在温控上都是控制出风口温度。但在实际生活使用过程中吹风口距离头发或者皮肤的距离是不断变化的,因此感受到的风温也是变化的。这种情况一般会有两个潜在问题,比如婴幼儿吹干时可能会有过热烫伤风险,还有可能会因为距离过近温度过高而损伤发质。里面分享了一家专业做红外测温传感器的原厂在如何做恒温体感温度上的一些经验,行业应用实现了迈莱芯的国产替代。通过红外测温传感器直接检测头发或者皮肤温度,因为其高响应率,0.1s即可将检测的数值反馈给控制单元,在及时调整发热体功率,从而实现相对恒定的体感温度。目前传感器主要安装在出风口位置或者内嵌下沉到底部,工作环境比较恶劣,整个开发过程中需要做各种测试,摸清电吹风各种工作模式下的热模型,再针对性的做算法,里面罗列了部分踩过的大坑和应对方案。该分享适用于做电吹风的电控板设计公司、整机方案商、电吹风整机ODM工厂和电吹风品牌公司做参考设计。

    Java版贪吃蛇小游戏(保姆级:每步均有注释)

    Java版贪吃蛇小游戏(保姆级:每步均有注释)

    18783027252-2405121303.amr

    18783027252-2405121303.amr

    高等职业教育品牌专业申报表.doc

    高等职业教育品牌专业申报表.doc

    2024-2030中国IGBT市场现状研究分析与发展前景预测报告 Sample.pdf

    QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。 邮箱:market@qyresearch.com

    一个微信小程序开发的二手物品交易小程序 .zip

    微信小程序开发项目 微信小程序在产品功能设计上给用户更多控制力。在微信小程序的设置页,为用户提供了数据权限开关,一旦用户授权之后又关闭,微信小程序再次使用该用户数据时需要重新获得授权,为用户提供更方便的数据控制权。用户在微信小程序的资料页还可以看到隐私数据保护的提示以及投诉入口。 微信小程序在收集、获取用户数据上,微信小程序坚持“必要+合理”原则。必要是指只有在微信小程序的具体业务中,确实有场景需要获取用户数据的情况下,开发者才能去获取用户的同意授权;合理是指开发者获取数据的范围不应该超出具体场景所需要的数据范围。例如一个提供外卖服务的微信小程序,可能需要获得电话、地址等数据,但没有必要获取性别、年龄等数据,否则平台会认为微信小程序收集用户数据的行为违反了“必要并且合理”的原则,会对这类微信小程序进行处理。 [8] 2022年5月2日消息,据微信方面发布,部分小程序开发者不合理地要求用户授权提供手机号等个人信息,中断了正常的使用流程,影响了用户的使用体验,同时会带来个人隐私信息泄露的风险。这种行为违反了《微信小程序平台运营规范》的用户隐私和数据规范

    考生签到记录表.docx

    考生签到记录表.docx

    模拟退火算法的 MATLAB 代码

    模拟退火算法matlab代码 代码说明 初始参数: T:初始温度。 T_min:停止温度。 alpha:温度衰减率。 max_iter:每个温度下的最大迭代次数。 x:初始解,设置为随机值。 主循环: while T > T_min: 温度逐渐降低,直到低于最低温度。 在每个温度 T 下进行 max_iter 次迭代。 在每次迭代中,生成一个邻域解 x_new,并根据 Metropolis 准则决定是否接受新解。 每次迭代后打印当前状态。 目标函数 (objective_function):这里使用了一个简单的单位一元二次函数 x^2 + 4 * sin(5 * x) 作为例子,但你可以替换为你自己的目标函数。 邻域生成函数 (neighbor):生成一个新解,模拟退火算法通常通过对当前解进行微小随机扰动生成邻域解。

    C语言超市管理系统.zip

    C语言超市管理系统

    2024-2030中国N甲基吡咯烷酮市场现状研究分析与发展前景预测报告 Sample.pdf

    QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。 邮箱:market@qyresearch.com

    HTML5小游戏【龟兔再跑之乌龟乌龟跳-425款经典优秀H5小游戏合集】游戏源码分享下载 - gtzp.zip

    HTML5小游戏【龟兔再跑之乌龟乌龟跳--425款经典优秀H5小游戏合集】游戏源码分享下载 --- gtzp.zipHTML5小游戏【龟兔再跑之乌龟乌龟跳--425款经典优秀H5小游戏合集】游戏源码分享下载 --- gtzp.zipHTML5小游戏【龟兔再跑之乌龟乌龟跳--425款经典优秀H5小游戏合集】游戏源码分享下载 --- gtzp.zipHTML5小游戏【龟兔再跑之乌龟乌龟跳--425款经典优秀H5小游戏合集】游戏源码分享下载 --- gtzp.zipHTML5小游戏【龟兔再跑之乌龟乌龟跳--425款经典优秀H5小游戏合集】游戏源码分享下载 --- gtzp.zipHTML5小游戏【龟兔再跑之乌龟乌龟跳--425款经典优秀H5小游戏合集】游戏源码分享下载 --- gtzp.zipHTML5小游戏【龟兔再跑之乌龟乌龟跳--425款经典优秀H5小游戏合集】游戏源码分享下载 --- gtzp.zipHTML5小游戏【龟兔再跑之乌龟乌龟跳--425款经典优秀H5小游戏合集】游戏源码分享下载 --- gtzp.zipHTML5小游戏【龟兔再跑之乌龟乌龟跳--425款经典优秀H5小游戏合集

    python 比较 mysql 表结构差异

    python 比较 mysql 表结构差异

    ASP.NET报名管理信息系统(源代码)

    本系统开发的初衷就是为了满足培训机构的需要,使其在培训管理过程中所进行的各项日常工作像处理学生信息、打印报表、统计分析等都利用计算机实现自动化,避免大量繁杂的手工劳动,提高办公效率。

    基于Python 实现半监督密度聚类+增量学习的故障诊断

    【作品名称】:基于Python 实现半监督密度聚类+增量学习的故障诊断 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:整体架构 故障诊断模块 半监督标记模块 增量更新模块 故障诊断模块读取设备监测数据,根据数据判断设备是否处于正常状态,如果出现故障,判断设备发生何种故障; 半监督标记模块首先判断设备监测数据中是否存在未知的故障类别样本,并对所有无标签的设备监测数据(包括已知故障类别与未知故障类别样本)标记伪标签,最后输出带有伪标签的样本以辅助增量更新模块对故障诊断模块进行更新; 增量更新模块使用半监督标记模块输出的伪标签样本对故障诊断模块进行增量地更新 环境配置 python3.6 tslearn 0.5.0.5 tslearn是一个Python软件包,提供了用于分析时间序列的机器学习工具。 scikit-learn 0.23.2 机器学习库 pytorch 1.7.0 深度学习库 dcipy 科学计算 numpy 1.19.2 矩阵计算 h5py 2.10.0 用来存储使用h5文件。

Global site tag (gtag.js) - Google Analytics