cordova调用本地SQLite数据库的方法
第一篇技术博客,写下来和大家分享今天所学,其次自己也巩固一下。
整个下午的时间用来钻研如何用cordova调用移动端本地SQLite数据库。首先我并不是用eclipse来编程的,而是用cordova建立project后直接用notepad编辑www下的index文件。
一、cordova的下载安装和建立project的方法
该部分不是文章重点,抽空另开一篇文章详细介绍。官网上有相关教程:http://cordova.apache.org/docs/en/5.0.0/guide_cli_index.md.html#The%20Command-Line%20Interface(插一句,测试时尽量用真机,虚拟机实在太慢)
二、插件下载
调用SQLite需要使用cordova的插件cordova-sqlite-storage,下载方法为在所建的project目录下打开cmd,输入cordova plugin add cordova-sqlite-storage回车。
三、插件的使用
参考资源:https://www.npmjs.com/package/cordova-sqlite-storage
使用sqlite数据库的基本步骤
(1)建立连接
有两种方法可用来创建并打开对数据库的一个连接:
var db = window.sqlitePlugin.openDatabase({name: "my.db"}); //my.db表示数据库名称var db = window.sqlitePlugin.openDatabase("myDatabase.db", "1.0", "Demo", -1); //myDatabase.db代表数据库名称,1.0是版本号,Demo是描述信息,第四个参数参考其他资料应该是预估数据库大小,-1代表什么自己也没搞懂,请大神指点。
(2)执行SQL操作
使用db.transaction()方法来执行一个SQL操作,该方法只有一个参数。该参数是一个函数,并且通常是匿名的,可以直接定义在db.transaction()中。如:
db.transaction(function(tx)
{
...
});
这个匿名函数具有一个事务类型的参数tx,它是一个事务对象,该事物对象具有一个方法:executeSql(),使用该方法可以执行SQL语句。
该方法有四个参数,其中后三个参数是可选的:
- 查询字符串
- 替换参数化查询中的占位符的数据
- SQL执行成功时调用的回调函数
- SQL执行失败时调用的回调函数
例如下面的代码,同时定义了四个参数:
tx.executeSql("INSERT INTO test_table (data, data_num) VALUES (?,?)", ["test", 100], function1,function2);
(3)对结果进行处理
3.1 当SQL操作执行成功时回执行一个回调函数,即上文中的funciton1,该函数有两个参数,一个是执行他的事物对象tx,另一个是操作返回的结果res(下面会详细介绍),即:
function function1(tx,res)
{
...
}
3.2当SQL操作失败时就会调用function2,该函数也有两个参数,一个是tx,另一个是错误对象,通过该错误对象可以获知具体的错误信息:
function function2(tx,err)
{
alert(err.message);
}
3.3 成功使用executeSql()方法执行的SQL语句可以返回一个执行结果即上文中的res,该执行结果回作为回调函数的一个参数。
执行结果是一个SQLResultSet对象,由SQLResultSet接口定义:
interface SQLResultSet{
readonly attribute long insertId;
readonly attribute long rowsAffected;
readonly attribute SQLResultRowList rows;
};
1、属性insertId返回记录行的行ID,每个SQL INSERT插入操作会自动插入一个行ID,如果插入多行,则该属性返回最后一行的行ID;如果不存在记录行则调用该属性时抛出INVALID_ACCESS_ERR异常。
2、属性rowsAffect返回SQL语句所改变的记录行的行数,如果没有任何改变,则该属性返回0;
3、属性rows 返回一个SQLResultList 对象,表示返回的所用记录行,结果按照数据库中的序列排列,如果没有数据,则返回空对象,即SQLResultList.length属相值为0;
SQLResultList对象由SQLResultList 接口定义:
interface SQLResultSetRowList{
readonly attribute unsigned long length;
getter any item(in unsigned long index);
};
1、属性length表示返回记录行的总行数。
2、item(x)方法根据索引号x获取一个指定的行(下标从0开始)。如果不存在指定的索引号,则该方法返回null。
一行就是一个javascript Object类型的对象,每个记录行的属性名相当于对象的属性名,例如row={id:0,data:“test”,data_num:100},使用对象语法可以获取每个属性的值,如row["data"](记得加引号)。
整体代码如下:
在手机上显示结果为:
data_num=100
data=test
id=0
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<script src="cordova.js" type="text/javascript"></script>
<link rel="stylesheet" href="http://code.jquery.com/ui/1.11.0/themes/smoothness/jquery-ui.css">
<script src="http://code.jquery.com/jquery-1.10.2.js"></script>
<script src="http://code.jquery.com/ui/1.11.0/jquery-ui.js"></script>
<link rel="stylesheet" href="http://jqueryui.com/resources/demos/style.css">
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.2/jquery.mobile-1.3.2.min.css">
<script src="http://code.jquery.com/mobile/1.3.2/jquery.mobile-1.3.2.min.js"></script>
</head>
<body>
<script>
document.addEventListener("deviceready", onDeviceReady, false); function onDeviceReady() {
var db = window.sqlitePlugin.openDatabase("Database", "1.0", "Demo", -1); db.transaction(function(tx) {
tx.executeSql('DROP TABLE IF EXISTS test_table');
tx.executeSql('CREATE TABLE IF NOT EXISTS test_table (id integer primary key, data text, data_num integer)'); tx.executeSql("INSERT INTO test_table (data, data_num) VALUES (?,?)", ["test", 100], function(tx, res) {
tx.executeSql("select * from test_table", [], function(tx, res) {
alert("hello world");
var row=res.rows.item(0);
for(var j in row){
document.write(j+"="+row[j]+"<br />");
}
});
}, function(e) {
alert("ERROR: " + e.message);
});
});
}
</script>
</body>
</html>
cordova调用本地SQLite数据库的方法的更多相关文章
- Python操作SQLite数据库的方法详解
Python操作SQLite数据库的方法详解 本文实例讲述了Python操作SQLite数据库的方法.分享给大家供大家参考,具体如下: SQLite简单介绍 SQLite数据库是一款非常小巧的嵌入式开 ...
- Python3实现连接SQLite数据库的方法
本文实例讲述了Python3实现连接SQLite数据库的方法,对于Python的学习有不错的参考借鉴价值.分享给大家供大家参考之用.具体方法如下: 实例代码如下: ? 1 2 3 4 5 6 7 8 ...
- C#基于SQLiteHelper类似SqlHelper类实现存取Sqlite数据库的方法
本文实例讲述了C#基于SQLiteHelper类似SqlHelper类实现存取Sqlite数据库的方法.分享给大家供大家参考.具体如下: 这个类不是我实现的,英文原文地址为http://www.egg ...
- android 中activity调用本地service中的方法。
1.自定义一个接口,暴露服务中的方法 public interface IService { /**服务中对外暴露的方法 */ void methodInService();} 2.自定一 ...
- 从服务器将Oracle数据库导出到本地Oracle数据库的方法
1.将服务器上的Oracle数据库导入到本地 在CMD模式下执行以下命令: exp username1/password@服务器端数据库 file=本地硬盘:/文件名.dmp 例如: exp ...
- 整理两个PetaPoco连接SQLite数据库的方法
从https://github.com/qingask/PetaPoco.NetCore下载源文件压缩包 解压出文件PetaPoco.Multiple.cs.PetaPoco.NetCore.cs 放 ...
- 【Unity3D】使用MD5值,确保本地Sqlite数据库内容没有被篡改
Sqlite的应用场景 在判断是否使用存储格式为Sqlite模式的标准,我们的标准是内容只读.也就是说,除非发布者修改Sqlite内容,玩家只有读取的权限. 换个角度说,Sqlite里面的数据都是游戏 ...
- Android项目通过Android Debug Database实时查看本地Sqlite数据库内容
前几天写Android项目时,想和Sqlyog那样图形化查看数据库中的文件,由于Android自带小型的Sqlite轻量级数据库,在查找方法时发现了一个特别简单适用的方法,纪录一下. 在android ...
- Navicat 连接Sqlite数据库的方法和步骤
1.打开Navicat,进行如下操作. 2.在弹出的新建连接对话框中输入正确的信息,点击“确定”按钮. 3.可见如下
随机推荐
- (简单) POJ 1321 棋盘问题,回溯。
Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子 ...
- OPENCV形态学操作1
形态学操作是指基于形状的一系列图像处理操作,包括膨胀,腐蚀,二值化,开运算,闭运算,顶帽算法,黑帽算法,形态学梯度等,最基本的形态学操作就是膨胀和腐蚀. 一.膨胀 首先需要明确一个概念,膨胀和腐蚀都是 ...
- Xcode7 新添旧版模拟器方法
http://blog.csdn.net/xiaoluodecai/article/details/48649697 更新了最新的Xcode后,总是仅保留最新的模拟器,如iOS9.0,如果此时想添加以 ...
- Linux 环境编译安装mysql (源码安装包)
标注: Linux需要先配置网络yum源,确定yum能在线安装软件包,方便测试过程中安装部分依赖包.配置163网易提示的网络yum源参考博客 http://www.cnblogs.com/zoulo ...
- javascript之日期对象
学习要点: 日期对象 将日期对象转换为字符串 将日期对象中的日期和时间转换为字符串 日期对象中的日期 日期对象中的时间 设置日期对象中的日期 设置日期对象中的时间 与毫秒相关的方法 一.日期对象 在j ...
- iOS8 UISearchViewController搜索功能讲解
在iOS8以前我们实现搜索功能需要用到UISearchbar和UISearchDisplayController, 在iOS8之后呢, UISearchController配合UITableView的 ...
- thinkphp所有参数配置
/* 项目设定 */ 'APP_DEBUG' => false, // 是否开启调试模式 'APP_DOMAIN_DEPLOY' => false, // 是否使用独立域名部署项目 'AP ...
- 开启分布式事物DTC
1.web服务器开启分布式事物配置后,数据库服务器的host文件要设置 “IP web服务器主机名” 的映射,否则会 出现 “与基础事务管理器的通信失败” #跨网段使用TransactionSco ...
- iOS开发:创建真机调试证书 分类: ios相关 2015-04-10 10:22 149人阅读 评论(0) 收藏
关于苹果iOS开发,笔者也是从小白过来的,经历过各种困难和坑,其中就有关于开发证书,生产证书,in_house证书,add_Hoc证书申请过程中的问题,以及上架发布问题.今天就着重说一下关于针对于苹果 ...
- OI队内测试——石门一
T1: 题目大意: 给你一个立方体,每个面上有些数字,给你一个数字K,你可以玩K轮游戏, 每轮你会将每个面上的数均分为4份,分给相邻的面,求K轮游戏后,上面的数字是 依次给你前.后.上.下.左.右的起 ...