JAVA 中的Iterator
迭代器是一种设计模式,他是对象,他可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构,迭代器通常称为“轻量级”对象,因为创建他是代加小
sql 语句从编译和运行的角度可以分为俩种,静态sql和动态sql。这俩种sql在使用方式,运行机制和性能表现等方面各有特点;
静态sql :语句一般用于切入式sql应用中。在程序运行前,sql语句必须是确定的,例如sql中涉及到的列名和表名必须是存在的。静态是sql是在应用程序运行前进行的,编译的结果会存储在数据库内部。而后程序运行时。数据库将直接执行编译好的sql语句,降低运行开销、。,
动态sql : 动态sql语句是在应用程序运行时编译和执行的。例如:使用DB2的交互式工具CLP访问数据库时。用户输入的sql语句是不确定的。因此sql语句只能被动态地编译。
动态 SQL 的应用较多,常见的 CLI 和 JDBC 应用程序都使用动态 SQL。
防火墙 四种技术
1》包过滤技术
2》应用代理
3》状态监控过滤包
4》应用层监控和控制状态包过滤
2 什么叫“限制的访问控制技术”?
2)在访问控制列表中,默认是拒绝所有
2)这种默认行为为拒绝所有的控制技术就被称为“
"限制的访问控制技术”
3 关于访问控制列表的处理流程
1)入站的访问控制列表 In
A 流量从接口流入
B 若匹配访问控制列表。且执行动作为Permit,则继续执行
c 若匹配访问控制列表,且执行动作为Deny,. 则丢弃该数据包
d 若配置的访问控制列表均没有匹配,则丢弃该数据包
总结 :先检查访问控制列表,在检查路由表
2) 出站的访问控制列表 out
a 流量需要从设备转发出去
b 设备查路由表,确定流量该从哪一个接口转发出去
c 此时,若该接口部署了访问控制列表,且执行方向为出方向
d 若匹配访问控制列表, 且执行动作Permit,则执行方向为出方向
e 若匹配访问控制列表,且执行动作Deny,则丢弃该数据包
f 若配置访问控制列表均没有匹配,则丢弃该数据包;;
MYSQL手册中find_in_set函数用法:
FIND_IN_SET(str,strlist)
注意:str要查询的字符串,strlist字段名。参数以“,”分割如
(1,2,6,8)
查询字段中包含str的结果。返回结果为null或记录。
假如字符串str在由N个子链组成的字符串列表strlist中,则返回值的范围在1到N之间。
一个字符串列表就是一个由一些被“,”符号分开的子链组成的字符串,如果第一个参数是一个常量字符串。而第二是type set列,则find_in_set()函数被优化,使用比特计算。
如果str不在strlist为空字符串,则返回值为0.如果任意一个null,则返回值为null。这个函数在第一个包含一个逗号(,)时将无法正常运行、。
mysql> SELECT FIND_IN_SET('b', 'a,b,c,d');
输出2,应为b在strlist集合中放在2的位置,从1开始。
find_in_set()和in的区别
弄个测试表来说明俩则的区别
CREATE TABLE tb_test
(
id
int(8) NOT NULL auto_increment,
name
varchar(255) NOT NULL,
list
varchar(255) NOT NULL,
PRIMARY KEY (id
)
);
INSERT INTO tb_test
VALUES (1, ‘name’, ‘daodao,xiaohu,xiaoqin’);
INSERT INTO tb_test
VALUES (2, ‘name2’, ‘xiaohu,daodao,xiaoqin’);
INSERT INTO tb_test
VALUES (3, ‘name3’, ‘xiaoqin,daodao,xiaohu’);
我们来看俩天语句
SQL1: SELECT id,name,list from tb_test WHERE ‘daodao’ IN(list);
SQL2: SELECT id,name,list from tb_test WHERE ‘daodao’ IN (‘libk’, ‘zyfon’, ‘daodao’);
sql1不行,这样只有当list字段的值等于‘daodao’时(和in前面的字符串完全匹配),查询才有效,否则都得不到结果。既使‘daodao’真的在list中;
sql2 是可行的
这俩条到底有什么区别呢?为什么第一条不能取得正确的结果,二条却能取得结果
其实原因是sql1中(list)是变量,而sql2中(‘libk’,‘zyfon’,‘daodao’)是常量。
所以如果要让sql1 能正常工作,需要用find_in_set();
SELECT id,name,list from tb_test WHERE FIND_IN_SET(‘daodao’,list);
总结:如果list是常量,则可以直接用in,否则要用find _in_set()函数,mysql字符串函数find_in_set(str1,str2)函数是返回str2中str1所在的位置索引,str2必须以“,”分割开
函数IFNULL(SUM(transfer_amount),0),
当数据库不存在任何符合求和记录时,sum返回0
例如:SELECT IFNULL(SUM(transfer_amount),0) FROM cm_agent_withdrawal WHERE transfer_status in (1,2,3)
mysql IFNULL(expr1,expr2)
如果 expr1 不是 NULL,IFNULL() 返回 expr1,否则它返回 expr2。
IFNULL()返回一个数字或字符串值,取决于它被使用的上下文环境。
String mouthBegin = DateUtils.getYear() + "-" + DateUtils.getMonth()+"-01";
double mouthSum = 0;
// 查询年累计用
String yearBegin = DateUtils.getYear()+"-01-01";
看看下面这个sql
SELECT
c.name AS ‘name’,
IFNULL(SUM(IF(a.status=2 AND a.model_type LIKE concat(’%’,4,’%’),1,0)),0) AS ‘violation’,
IFNULL(SUM(IF(a.status=3 OR (a.status = 2 AND a.model_type NOT LIKE concat(’%’,4,’%’)),1,0)),0) AS ‘noViolation’,
IFNULL(SUM(IF((a.status=2 AND a.model_type LIKE concat(’%’,1,’%’)) OR (a.status=3 OR (a.status = 2 AND a.model_type NOT LIKE concat(’%’,4,’%’))),1,0)),0) AS ‘count’
FROM money_account_info a
LEFT JOIN sys_account b ON b.account_number = a.account_number
LEFT JOIN sys_office c ON c.id = b.office_id