错误收集

idea连接mysql数据库报java.lang.RuntimeException: com.mysql.cj.exceptions.InvalidConnectionAttributeException

出错场景:
使用idea连接mysql(5.2版本)报错:

java.lang.RuntimeException: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
            at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
            at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
            at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
            at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
            at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
            at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:85)
            at com.mysql.cj.util.TimeUtil.getCanonicalTimezone(TimeUtil.java:132)
            at com.mysql.cj.protocol.a.NativePro... (show balloon)

大概原因:
 JDBC驱动程序的5.2版本与UTC时区配合使用,必须在连接字符串中明确指定serverTimezone。

解决方法:

jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC

 

JavaBean封装数据规范,get/set找不到属性错误

偶然发现,定义的数组和数组里面的属性有的首字母是大写,然后在自动生成get和set方法时,get和set后面部分是首字母大写的属性名。假设你属性名是name,然后生成的get和set方法分别为,getName()和setName()。但是如果你属性名字是Name,生成的get和set方法还是getName()和setName()。但是程序会自动默认你传过来的属性是小写的name。然后就会报错,找不到你想要的大写的Name的值。更要命的是,这种错误还不会提示出错地方,只能自己发现。 
之前属性命名时,习惯性的都是小写,没有大写的,所以没有遇到这种情况。所以在命名时一定要注意规范。

Sun推荐的属性命名规则是:xxx的属性对应setXxx()方法。

一般情况下,Java的属性变量都以小写字母起头,如name,userName等,但也存在特殊的情况下,如一些特定意义的大写英文缩略词(如XML.URL)等。JavaBean也允许大写字母起头的情况,不过必须满足“变量的前两个字母要么全部大写,要么全部小写”的要求,如IDCode、ID、ICCcard等属性变量名是合法的,而iD、iCcard、iDCode等属性变量名则是非法的。在有些情况下非法的变量再以属性名第一个字母大写的方式命名get和set方法,会导致找不到属性错误。

解决办法:

1、如果属性名的第二个字母大写,那么该属性名直接用作setter/getter方法中set/get的后部分,就是说大小写不变。例如属性名为uName,方法是getuName()/setuName().

2、如果前两个字母大写(一般的专有名词和缩略词都会大写),则属性名直接用作setter/getter方法中set/get的后部分。例如属性名为URL,方法名是getURL/setURL。

3、如果首字母大写,则属性名直接用作setter/getter方法中set/get的后部分,例如属性名为Name,方法是getName/setName, 这是最糟糕的情况,会找不到属性出错的地方,因为默认的属性名是name。

 

转载于:https://my.oschina.net/wuaiting/blog/3061319

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值