一、JAVA代码实现
1.给查询的list进行分页:
1 List<ReportQueryEntity> allList = reportQueryService.execute(merno, cname, orgcode);
2 int count = allList.size();
3 /*对查询的列表进行分页:截取每页的集合列表 */
4 List<ReportQueryEntity> pageList;
5 //总页数
6 int indexSum = (int) (count % query.getPagesize() == 0 ? count / query.getPagesize() : count / query.getPagesize() + 1);
7 if(query.getPageindex()!=indexSum-1){
8 //不是最后一页(query.getPageindex():从0开始)
9 pageList = allList.subList(query.getPageindex()*query.getPagesize(), (query.getPageindex()+1)*query.getPagesize() );
10 }else{//最后一页
11 pageList= allList.subList(query.getPageindex()*query.getPagesize(),count );
12 }
13 Page<ReportQueryEntity> page = new PageImpl<ReportQueryEntity>(pageList,new PageRequest(query.getPageindex(), query.getPagesize()), count);
14 modelMap.put(PAGE, page);
2.
二、js,jquery实现
1.计算两个日期之间的相差天数:
1 /**
2 * 根据两个日期,判断相差天数
3 * @param sDate1 开始日期 如:20161101
4 * @param sDate2 结束日期 如:20161102
5 * @returns {number} 返回相差天数
6 */
7 function daysBetween(sDate1,sDate2){
8 //转换为12-18-2006格式
9 var startdate=new Date(sDate1.substring(4,6)+"-"+sDate1.substring(6,8)+"-"+sDate1.substring(0,4));
10 var enddate=new Date(sDate2.substring(4,6)+"-"+sDate2.substring(6,8)+"-"+sDate2.substring(0,4));
11 var time=enddate-startdate;
12 var days=parseInt(time/(1000 * 60 * 60 * 24));
13 return days;
14 };
2.select下拉框实现模糊查询:
(1)使用bootstrap框架进行实现
①首先需要引入的JS和CSS有:
bootstrap.css
bootstrap-select.min.css
jquery-1.11.3.min.js
bootstrap.min.js
bootstrap-select.min.js
备注:
(a)官网: https://developer.snapappointments.com/bootstrap-select/
(b) xx.js 和xx.min.jsI区别(xx.css和xx.min.css区别):
min是将js进行压缩,去除了注释和空格;在网络传输中文件小了很多,节省宽带。
xx.js带有注释和空格。所以,应用的时候推荐使用min,学习读源代码的时候使用xx.js
②jsp:内容:
<link type="text/css" href="<%=path %>/style/bootstrap/bootstrap-select.min.css<%=version %>" rel="stylesheet">
<link href="="<%=path %>/style/bootstrap/bootstrap.min.css" rel="stylesheet">
<script src="="<%=path %>/script/bootstrap/bootstrap.min.js"></script>
<script type="text/javascript" src="<%=path %>/script/bootstrap/bootstrap-select.min.js<%=version %>"></script>
<script type="text/javascript" src<%=path %>/script/commons/jquery.min.js"></script>
<select name="pk.merchNo" validation="required" class="selectpicker" data-live-search="true" >
<option value="">—— select ——</option>
<c:forEach items="${channelmerchantList }" var="item">
<option value='${item.merchNo }' >${item.merchNo }-${item.cname }</option>
</c:forEach>
</select>
(a) class="selectpicker"
(b) data-live-search="true"时显示模糊搜索框,不设置或等于false时不显示。
(c) 设置属性:multiple 时为多选
备注:若对应的select下拉列表不是一开始就加载进页面的:而是动态绑定的数据,则在数据动态绑定更新之后,需要 初始化刷新数据 :
$(".selectpicker" ).selectpicker('refresh'); //动态绑定数据一定要加这句话否则没用
代码示例:
//联动:根据受理机构的改变获取对应的受理商户列表
function changeBaseOrg(obj){
$("#merchantcodeIn option").remove();
var baseOrg = obj.value;
$.ajax({
type : 'POST',
async : true,
url : '<%=path %>/baseBankPoscontrast/searchBaseMerNoByBaseOrg?baseOrg='+baseOrg,
dataType : 'json',
success : function(date) {
console.log(1);
console.log(date);
console.log(date[0]);
console.log(date.length);
$("#merchantcodeIn").append("<option value=''>—— select ——</option>");
for(var i=0;i<date.length;i++){
$("#merchantcodeIn").append("<option value='"+date[i].merchNo+"'>"+date[i].merchNo+"-"+date[i].cname+"</option>");
}
$("select").trigger("optionChange", "111");
$(".selectpicker" ).selectpicker('refresh'); //动态绑定数据一定要加这句话否则没用
},
error : function(data, status, e) {
console.log(2);
console.log(e);
}
});
}
三、SQL(Oracle)语句实现:
1.替换某表的某字段所有记录为不同的数据(存储过程)
1 create or replace procedure replaceChannelMerPId(
2 po_RETURN out varchar2
3 ) is
4 v_orgcode CHAR(8);
5 v_merch_no CHAR(15);
6 v_bankno VARCHAR2(64);
7 v_bankacctno VARCHAR2(64);
8 v_pid CHAR(4);
9 v_rowcount number(4);
10 v_pidcount number(4);
11 begin
12 v_rowcount :=0;
13 v_pidcount :=0;
14 --首先遍历需要替换PID的表:base_channel_merchant(根据唯一键(t.bankno,t.bankaccno,t.orgcode,t.merch_no)或者主键或者rowid遍历,才能遍历所有记录)
15 DECLARE
16 CURSOR cv_new_cursor IS
17 select t.bankno,t.bankaccno,t.orgcode,t.merch_no from base_channel_merchant t
18 where t.bankno is not null and t.bankaccno is not null and t.payinfo_pid is null
19 group by t.bankno,t.bankaccno,t.orgcode,t.merch_no;
20 BEGIN
21 OPEN cv_new_cursor;
22 LOOP
23 FETCH cv_new_cursor
24 INTO v_bankno,
25 v_bankacctno,
26 v_orgcode,
27 v_merch_no ;
28 EXIT WHEN cv_new_cursor%NOTFOUND;
29 --查询出对应的银行信息维护表
30 select min(t.p_id)
31 into v_pid
32 from BASE_MERCH_PAYINFO t
33 where t.bank_line=v_bankno and t.account_no=XOR_Encrypt(v_bankacctno,0);
34 update base_channel_merchant t
35 set t.payinfo_pid=v_pid
36 where t.orgcode= v_orgcode and t.merch_no=v_merch_no ;
37 v_rowcount :=v_rowcount+1;
38 --统计更新的PID不为空条数
39 IF v_pid IS NOT NULL THEN
40 v_pidcount :=v_pidcount+1;
41 END IF;
42 END LOOP;
43 CLOSE cv_new_cursor;
44 commit;
45 po_RETURN := '(0000)操作成功,总计更新数据条数:'||v_rowcount||',PID不为空条数:'||v_pidcount;
46 END;
47 EXCEPTION
48 WHEN OTHERS THEN
49 ROLLBACK;
50 end replaceChannelMerPId;
2.oracle系统变量以及常用SQL总结:
(1)user_objects是oracle字典表的试图,他包含了通过DDL建立的所有对象。表,试图,索引。。等等。
其中:
USER_TABLES 包含有关所有表的名称、列数和其他详细信息的信息
USER_CATALOG 包含表、视图和同义词
USER_COL_COMMENTS 包含对列的备注
USER_CONSTRAINTS 包含表的约束定义
USER_INDEXES 包含有关为表 (IND) 创建的索引的所有信息
USER_OBJECTS 包含用户拥有的所有数据库对象
USER_TAB_COLUMNS 包含用户拥有的表的列和视图
USER_TAB_COMMENTS 包含对表和视图的备注
USER_TRIGGERS 包含用户定义的所有触发器
USER_USERS 存储有关当前用户的信息
①查询sequence是否存在:
1 select COUNT(*)
2 from user_objects
3 where object_name = 'SEQ_DOWNLOAD'
4 and status = 'VALID';
②查询某表某字段(类型和长度)是否存在:
1 select COUNT(*) from all_tab_cols
2 where owner = 'QUAS'
3 and table_name = 'BASE_CHANNEL_MERCHANT'
4 and column_name = 'PAYINFO_PID'
5 and data_type = 'CHAR'
6 and data_length = 4;
select COUNT(*) from all_tab_cols
where owner = 'QUAS'
and table_name = 'BASE_CHANNEL_TERMNO'
and column_name = 'KEYTYPE'
and nullable = 'Y';
③查询某表是否存在主键
1 select COUNT(*) from user_constraints
2 where table_name = 'BASE_MCC_FEE'
3 and constraint_type ='P';
④查询某表是否存在唯一键
1 select COUNT(*) from user_constraints
2 where table_name = 'BASE_BANK_POSCONTRAST'
3 and constraint_type ='U';
⑤查询某表是否存在
select COUNT(*) from user_tables
where table_name = 'BUSINTYPE_PRODFUNC_RELATION';
⑥查询某方法是否存在
1 select COUNT(*) from user_objects
2 where object_name = 'RANDOMUUID'
3 and object_type = 'FUNCTION'
4 and status = 'VALID';
⑦查询表中字段个数
select count(*) from user_tab_columns where table_name=upper('base_merchant');
--or
select max(column_id) from user_tab_columns where table_name=upper('base_merchant_check');
(2)时间戳查询以前的数据并还原
①4个小时以前的数据:
select * from sys_dictionary as of timestamp sysdate-(4/(24)) ;
②查询几天前的快照(最多五天前)
select * from BASE_BANK_POSCONTRAST as of timestamp systimestamp -5;
③查询某日期的数据(只能查询5天内的快照)
select * from BASE_BANK_POSCONTRAST as of timestamp to_timestamp('20180528', 'yyyymmdd');
④某表还原几天前的数据
--先将表数据删除,在将查询到的数据插入
delete from tb_billservice14;--delete而不是drop。Delete删除表数据,drop表整个表删除
commit;
insert into tb_billservice14
select * from tb_billservice14 as of timestamp to_timestamp('20151125 09:00:00', 'yyyymmdd HH:mi:ss') ;
commit;
--DML操作注意要commit。
--如果你还原的时间点离当前时间太久,可能无法还原。
⑤还原指定内容
--如果你误删除了部分数据,可指定条件还原。如:
insert into tb_policy20151223 select * from tb_policy20151223
as of timestamp to_timestamp('20160112 10:00:00', 'yyyymmdd HH:mi:ss') where (status=5 or status=6) and prod_no='2026';
commit;
(3)查询oracle数据库 版本
SELECT * FROM v$version;
--or
SELECT * FROM product_component_version;