JAVA开发中会遇到的小问题,记录一下!

795 阅读3分钟

JAVA问题

1.httpss问题

要将http转为https的需求,此时使用replaceAll("http","https")会出现将“https”中前一部分“http”转为了“https”,导致出现“httpss”。解决办法是replaceAll("http://","https://")或者加判断url.contains("https").

2.启动项目问题

tomcat启动时会报各种类初始化、注入失败的错误。

检查第一步:看一下项目的jar包,有可能和tomcat自带的jar包冲突

二,jdk和tomcat的版本兼容问题,记住tomcat的版本高,jdk的版本低,tomcat v7.0-------support-------->Java EE 5 and 6 

tomcat v8.0-------support-------->Java EE 5,6 and 7 

tomcat v8.5-------support-------->Java EE 5,6 and 7 

tomcat v9.0-------support-------->Java EE 5,6,7 and 8 

三,java Compiler版本要和jdk一致。

3.BigDecimal的使用

BigDecimal在做除法divide时,最好加上a.divide(new BigDecimal("100"), 2, BigDecimal.Round_HALF_UP),这样做能方式结果为无线循环小数时报错java.lang.ArithmeticException: Rounding necessary

4.路径问题

windows和linux的规则不一样。

windows使用\,但程序可能不识别这个符号,所以最好的写法是:C:\\A\\B\\C。

linux使用的是/。

最省力的写法是使用java.io.File的separotor。这个是获取系统的分隔符,在windows是\,在linux是/。

5.SimpleDateFormat

SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”)

下滑线部分如果不规范会导致格式化的时间错误。

5.RequestBody和ResponseBody

@RequestBody放在参数上用于将前台传输的json数据(必须为application/json格式)封装成实体类,一般在POST请求中使用。

@ResponseBody:在加了@RequestMapping后,返回值通常解析为跳转路径,所以会出现访问结果为404找不到相关页面,而在方法上加上@ResponseBody后,返回结果会直接写入HTTP 的response体中返回。


@ResponseBody

@RequestMapping(value = "")

public List<String> getData(@RequestBody User user){

}

6.往服务器存文件

逻辑为用FileInputStream读文件,用FileOutputStream写文件。在此过程中涉及LInux文件路径的问题,例如:需要存文件至/static/excel下,单纯写这个字符串是没有用的,报错FileNotFound,应该在前面加上webroot项目根目录。此外,文件要使用File创建:File dir + new File(webroot+"/static/excel"),并加上判断if(!dir.exist){ dir.mkdir();}.

数据库

1.count和distinct同用

count(distinct a),多个字段时count(distinct a,b)会报错,

正确的写法是select count(*) from (select distinct a,b from 表)  

或者将需要distinct的字段拼接为一个字段select count(distinct(a+b+c)) from 表

2.取差集

在ORACLE中使用except会报错,因改用minus,并且保持查询出的结果集保持一致。

3.查询字段需要双引号

如果使用了navcate创建了表,会自动加上双引号,这样创建的表需要加双引号查询。如果加了双引号,Oracle不会将其转为大写,否则Oracle会将所有sql转为大写去数据库执行。

4.ORACLE数据库最高水位线

表占20G,HWM为20G,即使删除数据最高水位线依旧为20G,

方法:ALTER TABLE 表名 MOVE

           执行上述语句后索引会失效,需重建索引:ALTER INDEX 索引名 REBUILD.

5.ORACLE转大写

ORACLE会将所有语句转为大写执行,所以在写sql是尽量写大写,减少oracle使用资源。

6.char

oracle中会自动补足char后面的空白,例如char(10), 你插入12345,则数据库结果为12345加五个空格,多表查询会出错。

7.模糊查询

一般的模糊查询使用like %%,多个查询条件时使用REGEXP_LIKE

用法:REGEXP_LIKE(字段名, '(匹配串1|匹配串2|...)') //全模糊匹配

           REGEXP_LIKE(字段名, '^(匹配串1|匹配串2|...)') ";//右模糊匹配

           REGEXP_LIKE(字段名, '(匹配串1|匹配串2|...)$') ";//左模糊匹配