起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13899|回复: 19

SQLquery 的用法,简单的demo案例分享

  [复制链接]

1

主题

3232

帖子

1174

积分

金牌会员

Rank: 6Rank: 6

积分
1174
QQ
发表于 2016-4-27 11:39:42 | 显示全部楼层 |阅读模式
这是一个简单的关于SQLquery的小的示例demo,它主要实现了利用前后端对数据进行动态的过滤,排序等功能,主要说明了 :filter ::filter 和orderby ::orderby的用法

SQLQuery(数据查询)
WeX5中的baas目录下,提供了默认的Action能力,SQLQuery数据查询功能。可以通过简单的数据库语句,实现对数据的过滤,排序等功能。再通过前端的调用,使数据灵活的显示在Web页面中。下面,我们就来介绍一下SQLQuery的使用方法:
首先我们需要在baas目录下新建一个文件,在新建的文件中创建一项服务服,务创建好之后,我们需要建立一个新的Action,选择好我们需要的数据库名称和数据库表之后,在继续新增一个Action,在实现中我们利用action:common/CRUD/sqlQuery来进行设置数据。
SQLQuery中有两种形式的参数分别为private(私有的)和public(公有的)。其中privateSQLQuery中必填参数,他是SQL的必须参数,其中它包括countSqlDBtablenameSQl四中属性。
1、countSql  count可以获取到数据的总条数。
2、DB       数据源,用于选择当前所需要的数据库。
3、tableName数据库表名,用于选择当前所需要的数据库表
4、SQL      SQL语句,使用SQL语句,对数据进行操作,比如过滤排序等。
Public(公有的)为SQLQuery的选填参数,它基本通过前端的方法传递参数,其中包括filterlimitorderByoffsetvariables等属性,当然我们在这里也可以自行命名参数。通过前端的方法对数据进行过滤、排序、限制等。
SQL中有两种参数的写法 分别是“:”但冒号写法 和 “::”双冒号写法。
单冒号写法是静态操作数据,它主要以SQL语句为主,在后端写好SQL语句,然后通后前端调用,实现对数据的操作。
双冒号写法是可以动态的操作数据,它主要通过前端的方法调用,动态的操作SQL的数据。灵活操作数据。

我们介绍一下单冒号于双冒号的区别及其具体用法。
1、(单冒号的写法):name----一个:的方式,这种是值参数,类似于我们通常的的sql中的?如:select * from abc(表名) where name=:name,前端设置通过data设置name='liming' data.filters.setVar("name",'liming');最终服务端按  select * from abc where name=?,        'liming'执行。 “:”后面的参数变量,是前端传过来的变量,可以随意起名字,但是要前端变量,要与后台单冒号后面的参数保持一致。
2、(双冒号的写法)   ::filter----两个::的方式,这种参数将会拼到sql中去
如:select * from abc where ::filter ::orderBy,前端设置通过data设置filter,        data.setFilter("filter1","name='liming'");data.setOrderBy("age",0);
最终服务端按select * from abc where name='liming' order by age DESC执行
“::”后面为Public提供的参数,一般常用的就是filterorderBy两种。

下面举例说明一下filterorderBy 的用法。因为MySqlOracle默认已经定义好了Limit分页查询的能力,当然在其他数据库,同样也可以实现limit的功能,所以这里我们没有limit的用法,它在baasData属性中直接设置即可。
1、:filter与::filter
:filter 静态过滤数据,主要写在 SQL语句中 如 :
SELECT u.fID,u.fType,u.fClass,u.fDescription,u.fCreateTime,u.fMoney,u.fDate FROM account as u WHERE  (0=:useSearch) or (u.fType LIKE :filter OR u.fClass LIKE :filter OR u.fDescription LIKE :filter)
前端调用方法:data.filters.setVar("filter",'%'+searchVal+'%');
                  data.filters.setVar("useSearch",searchVal?1:0);
     该方法只能在数据库中提前规定好过滤数据的规则。
         ::filter 动态过滤数据,SQL 语句 :
SELECT u.fID,u.fType,u.fClass,u.fDescription,u.fCreateTime,u.fMoney,u.fDate FROM account as u WHERE ::filter
前端调用方法:var select =this.getElementByXid("select2").value;
                      var data = event.source;
                      data.setFilter("filter1", "u.fType like '%"+ select +"%'");
该方法可以动态的设置熟虑方法,进行数据的查询,
2orderBy :: orderBy

orderBy: 在数据库中排序,为静态排序 使用 order by 字段名 DESC/ASC 即可做到排序
::orderBy,动态对数据进行排序,可以利用前端的 data.setOrderBy(relation, type)方法调用,实现对数据的动态排序,如:
var select =this.getElementByXid("select2").value;
data.setOrderBy(select,1);        //0:DESC 倒叙/1:ASC 正序
Public(公有的), filterlimitoffsetorderBy可以从前端直接设置使用,我们主要说一下variables(条件变量)和自定义属性var-XXX的用法。
首先,variable同样也是有前端传过来的参数,只是这个参数一般是比较复杂的JSON格式的对象,或者复杂的字符串类型,比较不方便操作。那我们可以自定义一个以var-打头的条件参数,来替代复杂的variable,使参数数据更方便操作。var-XXX是一个Integer类型的数据,默认值为0

文档链接地址: http://doc.wex5.com/sqlquery/
案例压缩包:使用前注意说明内容

SQLquery-demo.rar

130.29 KB, 下载次数: 1098

在问题解决后,希望大家可以吧解决方法也分享一下,这样可以让更多的X5开发者共同进步,谢谢大家的知识共享

4

主题

24

帖子

124

积分

初级会员

Rank: 2

积分
124
QQ
发表于 2016-4-28 16:59:54 | 显示全部楼层
可以加QQ聊下吗?  767860980   使用::方式报错
1.png
回复 支持 反对

使用道具 举报

1

主题

3232

帖子

1174

积分

金牌会员

Rank: 6Rank: 6

积分
1174
QQ
 楼主| 发表于 2016-4-28 17:07:57 | 显示全部楼层
decai 发表于 2016-4-28 16:59
可以加QQ聊下吗?  767860980   使用::方式报错

可以啊 你加我QQ就可以,我会的一定会帮你的 我的QQ799764887
在问题解决后,希望大家可以吧解决方法也分享一下,这样可以让更多的X5开发者共同进步,谢谢大家的知识共享
回复 支持 反对

使用道具 举报

0

主题

20

帖子

13

积分

新手上路

Rank: 1

积分
13
QQ
发表于 2016-4-28 17:58:27 | 显示全部楼层

学习学习!!

点评

学习了! http://m.shubaol.com/info-1573/ 白洁高义  发表于 2017-3-18 19:12
回复

使用道具 举报

5

主题

19

帖子

41

积分

新手上路

Rank: 1

积分
41
QQ
发表于 2016-5-1 12:12:09 | 显示全部楼层
楼主了解SQlite吗  
记账本案例SQlite 遇到问题
能不能帮我一下
回复 支持 反对

使用道具 举报

5

主题

19

帖子

41

积分

新手上路

Rank: 1

积分
41
QQ
发表于 2016-5-1 12:12:57 | 显示全部楼层
回复 支持 反对

使用道具 举报

1

主题

3232

帖子

1174

积分

金牌会员

Rank: 6Rank: 6

积分
1174
QQ
 楼主| 发表于 2016-5-3 09:49:09 | 显示全部楼层
本帖最后由 闰土 于 2016-5-3 09:50 编辑
kk1314 发表于 2016-5-1 12:12
楼主了解SQlite吗  
记账本案例SQlite 遇到问题
能不能帮我一下

抱歉,我不了解你说的SQLlite,只知道他是一款轻量级关系数据库,不过我看了你那个记账本的案例,你是想把之前的input 改成 select 对吗?你是用data引入了你的数据库 ,我研究下
在问题解决后,希望大家可以吧解决方法也分享一下,这样可以让更多的X5开发者共同进步,谢谢大家的知识共享
回复 支持 反对

使用道具 举报

5

主题

10

帖子

34

积分

新手上路

Rank: 1

积分
34
QQ
发表于 2016-6-15 14:19:15 | 显示全部楼层
HTTP Status 500 - 执行Action:text/text/action2失败,Action[text/text/action2] Class加载失败,可能原因:Baas模型没有编译,请Baas模型编译后重启服务!

出现这样的错误提示,怎么解决。
回复 支持 反对

使用道具 举报

1

主题

3232

帖子

1174

积分

金牌会员

Rank: 6Rank: 6

积分
1174
QQ
 楼主| 发表于 2016-6-15 16:07:39 | 显示全部楼层
pcdj0502 发表于 2016-6-15 14:19
HTTP Status 500 - 执行Action:text/text/action2失败,Action[text/text/action2] Class加载失败,可能原 ...

500 服务器段错误 ,你确定编译了 bass?
在问题解决后,希望大家可以吧解决方法也分享一下,这样可以让更多的X5开发者共同进步,谢谢大家的知识共享
回复 支持 反对

使用道具 举报

5

主题

10

帖子

34

积分

新手上路

Rank: 1

积分
34
QQ
发表于 2016-6-15 16:47:02 | 显示全部楼层
闰土 发表于 2016-6-15 16:07
500 服务器段错误 ,你确定编译了 bass?

bass怎么编译
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-3-29 17:56 , Processed in 0.074365 second(s), 27 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表