JDBC章节问题集锦


做了一个小型增删改查的航班程序,主要练习java代码操作数据库,连接池相关。

问题1:我用了连接池还需要自己手动关么?

答:建议手动关闭。对于数据量不大的程序来说,无所谓,但是大家学java不都是为了应用到真实场景么,实际上,我们在连接池中的关闭,连接池的close方法并不会立即关闭它,而是看配置文件,当前连接数是否超出此前设置的最大值,再依据最低连接数量,空闲时间等条件来决定是关闭还是维持连接,设为空闲,等待其他连接的调用。

参考

问题2:判断查询结果是否为空,但一直不为空,即使数据不存在,实体类不为空

具体描述:我在设置修改时,依据主键id判定是否存在该记录,然后决定是否让用户继续输入新的值,因为如果你的记录都找不到,还让用户输入新的,再提示修改失败,这也太难受了,所以我用查找byID方法,想着,没有你这一条记录(实体)返回肯定null,然后return方法,可是这个实体一直不为null,我就打断点调试,返现,我已经在内部创建了对象,所以肯定不会为空。

如图:
判断id是否存在

解决:换个判断条件,我是用目的地是否为空,毕竟目的地的String没有赋值肯定为空啊。

问题3:如何格式化输出数字,比如我有一个int值为1,我想输出为001。

答:

方法一:转换成String,调用String的format方法

%03d,表示三位数,不足添0,d表示十进制
语法格式

先取出需要格式的

方法二:DecimalFormat(String pattern).format(数值)

干嘛要转换成String呢,多麻烦。所以直接调用DecimalFormat类的format方法 (NumberFormat和DecimalFormat都是线程不安全)
这种方式是用来处理小数,科学计数法等使用比较高,
其中0是代表任意数字,不足填0,#表示非零数字,只会省去小数末尾的0,示例在下面
一般0用在强制格式的地方
decimal的格式化
代码:

		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的测试语句没写导致异常
这是我在使用druid连接池的时候,默认

	private static DruidDataSource dataSource = new DruidDataSource();
	//默认情况,该值为true;
	dataSource.setTestWhileIdle(false);

我改为false后,第一个错误消失,但是不能这么做,我得知道他是什么。随后查阅资料,得知这是一个在空闲时测试连接是否有效的方法,默认开启,不影响性能,之所以报上述问题,是因为我没有设置sql语句。你想查询连接是否可用,你总得需要执行一句sql语句才知道,其实提示说得很明显,下次要仔细看看。后来自己追加了一条sql语句,也是开发文档用于测试的语句;

	dataSource.setValidationQuery("select 'x'");

参考github地址


差不多就这些,东西有点多,贵在积累。
下次见。
sue
2021年2月20日17:10:45

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值