杰信个项目第六天

来源:互联网 发布:怎样更改淘宝pid 编辑:程序博客网 时间:2024/05/16 00:28

MYSQL对日期类型直接支持likeOracleto_cahr() SqlServer cast() ,convert() 将日期类型先转换为字符串,然后在进行截取。

 

2、异构数据库

同一套程序同时支持多个类型的数据库。HQL不能消除不同数据库厂商的个性应用。大多数据库厂商都是基于SQL92SQL99标准。

SQL常见差异:

 

Oracle

SqlServer

MySql

取记录数

rownum

top

limit

日期

to_charto_date

castconvert

之间当日期类型为字符串

字符串拼接

||

+

concat

个性函数

 

 

 

 

MYSQL中拼接字符串

SELECT CONCAT(sys_code_id,'-',NAME) FROMsys_code_b

3、异构数据库实现原理

1)设置一个全局变量,database=MYSQL5

2)在程序中,加if语句

If(database==”MYSQL5”){

         sql  = “select * from contract_c limit 100”

}else(database==”SQLSERVER2000”){

         sql= “select top 100 * from contract_c”

}

 

最终能实现,程序直接修改数据库配置即可立即切换数据库。

        

4、怎样快速的实现,关键在于选择循环对象。

合同、货物、厂家、附件,在这里挑选一个循环次数最少,获取到数据最快的一个对象。

 

大数据测试。在日常记录少的情况下,程序员会忽略程序的性能问题。

利用已有数据,进行多次循环

Excel2003       2007

列:255     16384

行:65535   1048576

 

 

6、月统计,在企业中相当的典型。

例如:基层供电局每个月,每个季度,每年都要上报人事报表。

在职职工表,在职的职工数,离职的,退休,死亡

基层供电所上报到分局,分局汇总上报市局,市局汇总上报到省局,省局汇总上报到国网。

国家财政拨款,发工资。

 

年、季度、月、周、日统计。

对程序而言就是一个where条件的改变。


8、购销合同打印业务

打印API

1)        日期类型转中文日期格式

UtilFuns.formatDateTimeCN(UtilFuns.dateTimeFormat(contract.getSigningDate()))

2)        图片如何插入

POI插入图片时,给定起始单元格位置和结束单元格位置,它自动平铺。会带来图像失真。事先调整好单元格范围,高度和宽度。图片会压线,要设置一定的偏移量。

HSSFPatriarch patriarch =sheet.createDrawingPatriarch();           //addpicture

poiUtil.setPicture(wb, patriarch,rootPath+"make/xlsprint/logo.jpg", curRow, 2, curRow+4, 2);

 

3)        插入分页符,在何处插入,插入时怎么避免打印一个空白页

                            if(p>0){

                                     sheet.setRowBreak(curRow++);     //在第startRow行设置分页符

                            }

4)        插入一个线

poiUtil.setLine(wb, patriarch, curRow, 2,curRow, 8);    //draw line

5)        给金额类型加前缀,

                   HSSFDataFormatformat = wb.createDataFormat();

                   returnformat.getFormat("\"\"#,###,##0.00"); //设置格式

#代表一位数值,如果数值不存在,不显示

0代表一位数值,如果数值不存在用0代替。

 

6)        公式,乘法、合计

nCell.setCellType(HSSFCell.CELL_TYPE_FORMULA);

nCell.setCellFormula("F"+String.valueOf(curRow)+"*H"+String.valueOf(curRow));

 

nCell.setCellFormula("SUM(I"+String.valueOf(curRow-4)+":I"+String.valueOf(curRow-1)+")");

 

7)        合并单元格

合同单元格后,除第一个单元格会根据设定的样式生效。后续单元格没有边框线。

当前POI3.0支持2003,打印到2013或者WPS,会显示不全。

POI升级版本不兼容。合并单元格,画线

 

region = new Region(curRow-1, (short)(1),curRow-1, (short)3);   //纵向合并单元格

sheet.addMergedRegion(region);

 

写数据是操作合并前的第一个单元格

 

8)        指定输出到单元格的内容类型为数值

nCell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);

 

9)        审单人,等量空格替换

utilFuns.fixSpaceStr(contract.getCheckBy(),26)

 

业务逻辑控制

10)    同一个厂家的货物才能打印的同一页纸上。

11)    厂家跟着货物,循环货物才能得到对应的厂家,然后怎么写到现在的位置。    

12)    厂家信息只用第一个货物的信息

13)    重要程度,循环拼接星星。

14)    *将数据和业务分离。

 

9、读程过程

 

思路:

数据和业务分离,将每页的数据缓存起来,打印时,只需循环页数,获取每一页的数据,直接输出。

目的:写代码时,关注点少,将更多精力投入到一个地方。减少代码的复杂度。

 

实现:

怎样缓存数据?

字符串数组String[] ,不同页一款的两款的字段数不同。突然有一天,客户说你给我增加一个字段。

ArrayLIst,动态数组,遍历数据时,通过序号进行遍历。加字段,会影响后续顺序。访问时,只能按序号,调用时,不能明确知道调用的谁。

MAPkey+value

 

每页数据缓存到一个MAP集合中,将一个页的MAP放在一个ArrayList中。


0 0