jQTouch创建客户端数据库andTables
慕容修伟
2023-12-01
jQTouch创建客户端数据库andTables 开始Web开发forSmartphones:开发Web应用程序使用PHP,MySQL和jQTouch创建客户端数据库andTables 在这个例子中,WEL是使用APIfor客户端数据库中的JavaScript库。这个API提供了存储,检索和腌制用户提供信息的简单方法。此外,它providesa关系数据库模型,所以可以轻松地处理复杂的数据。我们可以usestandard SQL语句来执行所有与数据库相关的任务,如creatingdatabases和表,以及插入,读取,删除和updatingrows于表中。 让我们通过创建和打开数据库开始。用于创建和打开客户端数据库中的代码如下所示: VAR数据B; VAR短名称='tmpCart'; VAR版='1.0'; VAR显示名='tmpCart'; VAR MAXSIZE = 200000;数据B =的openDatabase(短名称,版本,显示名,MAXSIZE);在代码片段isshown表1中使用的变量的使用。 表1的客户端数据库变量的变量用法 数据B用于保存参考数据库连接,当它被建立。 SHORTNAME商店我们将创建在客户端的数据库的名称。 版本存储分配给该数据库的版本号。 版本号经常需要升级或修改数据库。 显示名存储提供给用户的数据库的名称。 MAXSIZE商店我们以KB为单位的数据库的预期大小。如果大小超过这个变量的限制,我们将会通知并询问是否增加应该被允许或拒绝。 在我们的代码片段中定义的变量值,说我们要创建一个名为tmpCart与1.0的版本号和大小限制of200000上传一个客户端数据库。后分配这些变量的值。我们可以将它们传递给命令的openDatabase,这实际上造成了tmpCart数据库和存储在数据B变量的连接。 的代码段,也可以写为: 数据B =的openDatabase('tmpCart“,”1.0“,”tmpCart“,200000); 也就是说,我们可以在不usingvariables在所有直接指定在theopenDatabase函数的参数值。 现在凌晨创建并打开服务器端的数据库,让我们在它创建一个表。 创建客户端表在本实施例中,WEL是使用客户端数据库forstoring购物信息。让我们首先创建一个名为的购物车在我们的客户端数据库tmpCart表,如图这段代码: datab.transaction( 功能(事务){ transaction.executeSql( “CREATE TABLE IF NOT EXISTS的购物车'+ '(ID INTEGER NOT NULL PRIMARY KEY自动增量,'+ “cart_sess VARCHAR(50),cart_isbn VARCHAR(30),cart_item_name 的varchar(100),cart_qty整数,cart_price浮动);' ); } ); JavaScript的数据库API支持SQL交易andall数据库查询必须在一个事务上下文。要执行一个标准的SQL查询,我们需要调用事务对象的方法的ExecuteSQL。要做到这一点,wecall的数据B对象的交易方法,并把它传递aanonymous功能。然后,我们的交易传递给匿名函数sothat我们可以调用事务对象的executeSqlmethod。 的的ExecuteSQL方法创建一个名为的购物车表,如果它已经没有按exidst。该表有四个字段:ID,cart_sess,cart_ISBN,cart_item_name,cart_qtyand cart_price。 id字段是主键。它的值不能为空,且是唯一的表中的每一行。我们将该字段设置为自动增量,所以它的价值将增加1为每个表rowadded。在客户端表插入行Letassume用户已经掉了一本书的车,所以我们现在有一些cartdata到processession号,书号,书名,数量和价格。这datais存储在变量SID,ISBN,书名,数量,以及价格respectively.Wel在客户端的购物车此表的数据转移到一个排,如图下面的代码片段。 datab.transaction( 功能(事务){ transaction.executeSql( “INSERT INTO的购物车(cart_sess,cart_isbn,cart_item_name,cart_qty, cart_price)VALUES(,,,);???“, [SID,ISBN,书名,数量,价格] 函数(){ } displayerrormessage ); } ); 注:会话ID是用于使用fortracking用户访问我们的Web应用程序sessionmanagement机制。服务器生成一个唯一的idfor当前会话。 首先,我们使用事务对象的ExecuteSQL方法来执行SQL查询。我们需要传递海图的五个字段,或列于该方法。五个问号(?)在VALUES括号内占位符,并采取对数组[SID,ISBN,书名,数量,价格]中的值。第一问号所取代的SID变量的值时,第二个问号替换bythe ISBN值,依此类推。值 Thearray后跟一个匿名函数调用datacallback功能,这可能containstatements成功执行SQL语句后执行。例如︰数据的回调可能包含调用了显示确认消息或导航到其他面板等功能。如果我们不希望任何行动thesuccessful执行SQL语句后发生,我们可以把这个功能空白,aswe实际上在代码段完成。 片段,displayerrormessage的最后部分,是呼吁我们希望如果SQL语句未能唤起的错误处理功能。这里是一个演示displayerrormessage用法: 功能displayerrormessage(交易错误){ 警报('错误:“+ +返回Error.message”已经发生了代码:'+ error.code); 返回true; } 两个参数被传递给displayerrormessage功能:transactionobject和错误对象。 Error对象显示错误信息和错误代码。究其原因,通过事务对象的displayerrormessage功能是允许多个SQL语句可以从withinthe函数执行时,如果需要的话。该displayerrormessage功能可能返回true,停止执行和回滚entiretransaction,还是假的,在whichcase交易将继续进行。 错误代码Table2contains快速浏览一下在执行transactionon客户端数据库表生成的常见错误代码。 表2错误代码和发生 错误代码 时发生 0交易失败等非数据库相关的错误。 1交易失败,其他数据库相关的错误。 2本次交易失败,因为数据库的版本不匹配一个用户请求。 3的交易失败,因为从数据库中返回的数据太大。 4交易失败,因为无论有没有留下足够的存储空间,或者用户不想要的数据库增长超越现有限制。 5交易失败,因为该交易包含一个语法错误,参数数量不匹配,说明修改只读事务中的数据库,等等。 6所述的交易失败,因为约束失败,例如,分配给两行中的主字段相同的值。 如果wearen有意捕捉的错误,我们就可以省略这两个数据的回调和错误处理回调函数。如果我们这样做,代码片段willappear如下: datab.transaction( 功能(事务){ transaction.executeSql( “插入INTOshopcart(cart_sess,cart_isbn,cart_item_name,cart_qty, cart_price)VALUES(,,,);???“, [SID,ISBN,书名,数量,价格] ); } );