1:Java写csv文件时关于逗号的问题
最近有个报表存在效率问题,客户又不愿意缩短统计时间,便尝试将报表由excel转换为csv,转换过程中发现了逗号的问题。
CSV文件由任意数目的记录组成,记录间以某种换行符分隔(一般为逗号)。那么很显然,一条记录中出现逗号时,csv会将该信息解析为两条信息。势必要对逗号进行特殊处理,处理方法如下:列内容如存在半角逗号(即,)则用半角双引号(即"")将该字段值包含起来。而字段内部的引号必须在其前面增加一个引号来实现文字引号的转码.
在Java中"有要用\"来转义,写入常量时格式为:"\"XXXXX ,XXXXXXX\"",写入变量时格式为:"\""+XXXXX+"\"",java示例代码如下:(如果插入的值都是数字,逗号前/后要加个空格,要不然在excel中打开时会有格式问题,即逗号会被解析为千位分隔符)
try {
File csv = new File("C:\\writers.csv"); // CSV文件 List写C:\\test.csv
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(csv), "GBK"));
List list=new ArrayList();
list.add("qqq");
list.add("www");
bw.write("\"333333333 ,3333333333333"+\"");
bw.write("\""+list.get(0) +","+list.get(1)+"\"");
bw.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
2:oracle not in问题
做一个简单的查询
select distinct b.code from asset_sys_cost_center b where b.code not in (select a.code from hr_users a),
但是查询结果为空,完全不符合预期,查不到原因,无奈之后又写了个替代语句
select distinct b.code from asset_sys_cost_center b where not exists (select 1 from hr_users a where a.code=b.code),
查询出的结果符合预期,更是不解,经百度,才知道,原来not in 中的结果集,如果存在空的话,那么查出的结果集就是空。
唉,孤陋寡闻了。
3:sql注入
sql注入的原理和危害什么的,就不说了,简单记一下我自己感觉各异防止sql注入的方法
1:使用ajax,不显示实际URL
2:加密所有参数,后台再解密。
3:将所有参数加密成一个新的参数,同时传递给后台。
4: 使用PreparedStatement
4:装饰器模式
简单总结就是:一个被装饰接口,一个简单实现该结构的被装饰类,一个装饰接口,一群实现了装饰接口的装饰类。Java 中i/o便是这中模式。