JDBC相关问题
做了一个小型增删改查的航班程序,主要练习java代码操作数据库,连接池相关。
问题1:我用了连接池还需要自己手动关么?
答:建议手动关闭。对于数据量不大的程序来说,无所谓,但是大家学java不都是为了应用到真实场景么,实际上,我们在连接池中的关闭,连接池的close方法并不会立即关闭它,而是看配置文件,当前连接数是否超出此前设置的最大值,再依据最低连接数量,空闲时间等条件来决定是关闭还是维持连接,设为空闲,等待其他连接的调用。
问题2:判断查询结果是否为空,但一直不为空,即使数据不存在,实体类不为空
具体描述:我在设置修改时,依据主键id判定是否存在该记录,然后决定是否让用户继续输入新的值,因为如果你的记录都找不到,还让用户输入新的,再提示修改失败,这也太难受了,所以我用查找byID方法,想着,没有你这一条记录(实体)返回肯定null,然后return方法,可是这个实体一直不为null,我就打断点调试,返现,我已经在内部创建了对象,所以肯定不会为空。
如图:
解决:换个判断条件,我是用目的地是否为空,毕竟目的地的String没有赋值肯定为空啊。
问题3:如何格式化输出数字,比如我有一个int值为1,我想输出为001。
答:
方法一:转换成String,调用String的format方法
%03d,表示三位数,不足添0,d表示十进制
先取出需要格式的
方法二:DecimalFormat(String pattern).format(数值)
干嘛要转换成String呢,多麻烦。所以直接调用DecimalFormat类的format方法 (NumberFormat和DecimalFormat都是线程不安全)
这种方式是用来处理小数,科学计数法等使用比较高,
其中0是代表任意数字,不足填0,#表示非零数字,只会省去小数末尾的0,示例在下面
一般0用在强制格式的地方
代码:
int i = 1;
System.out.println(new DecimalFormat("000").format(i));
关于#格式化:
DecimalFormat decimalFormat= new DecimalFormat("#,##0.##");
float x = 874934.7682f;
System.out.println(decimalFormat.format(x));
输出结果:874,934.75
此部分参考String.format用法,numberformat和decimalformat
问题4:int如何转换成String类型?
i数值类型即可
答:这个简单问题我就想到了一个方式,补充其他方式
方式一:任意数字类型+"";加一个空字符串就好。
方式二:String num = String.valueOf(i)
方式三:String num = Interger.toString(i)
问题5:druid validationQuery not set
图:
这是我在使用druid连接池的时候,默认
private static DruidDataSource dataSource = new DruidDataSource();
//默认情况,该值为true;
dataSource.setTestWhileIdle(false);
我改为false后,第一个错误消失,但是不能这么做,我得知道他是什么。随后查阅资料,得知这是一个在空闲时测试连接是否有效的方法,默认开启,不影响性能,之所以报上述问题,是因为我没有设置sql语句。你想查询连接是否可用,你总得需要执行一句sql语句才知道,其实提示说得很明显,下次要仔细看看。后来自己追加了一条sql语句,也是开发文档用于测试的语句;
dataSource.setValidationQuery("select 'x'");
差不多就这些,东西有点多,贵在积累。
下次见。
sue
2021年2月20日17:10:45