Java JDBC常见问题解惑

为什么形成了Java JDK提供的JDBC数据访问接口,而数据访问类由数据库开发商提供?

  1. 数据库的各个厂商所提供的API操作接口并不一致,因此,必须要编写专用于各个厂商数据库的存取程序,十分的不方便。有个统一的操作接口,无需依赖于特定的数据库API,就可以达到“写一个Java程序,适用所有的数据库”的目的。

编写JDBC数据访问代码时,为什么要求Connection、Statement、ResultSet等导入的Java JDK提供的接口,而不导入具体的实现类?

  1. 使用JDBC,可由厂商操作实现操作数据库接口的驱动程序,而Java程序设计人员调用JDBC的API并操作SQL,实际对数据库的操作由JDBC驱动程序负责。如果要更换数据库,基本上只要更换驱动程序,Java程序中只要加载新的驱动程序来源,即可完成数据库系统的变更,Java程序的部分则无需改变。

数据库连接字符串中的主机地址怎么写?

  1. 数据库厂商名+填主机IP/网址+数据库程序的端口号+数据库+参数

例如:
MySQL url格式:jdbc:mysql://[host:port]/[database][?参数名1][=参数值1][&参数名2][=参数值2]…


JDBC访问数据库时,进行完数据操作,不关闭资源方法就结束会导致什么结果?

  1. 如果不关闭的话,就会等待该对象自动关闭时(垃圾收集)发生释放此 ResultSet 对象的数据库和 JDBC 资源此操作,导致占用大量内存资源,内存溢出。

例如:
对于一个日活2万的网站来说,假设每个用户只会发送5个请求,那么一天就是10万个请求,对于建立数据库连接,如果不主动释放资源,那么单单数据库连接,就不能完全保证你的服务能够正常运行,况且还要考虑其他。


关闭资源时,各个资源有顺序要求吗?为什么?

  1. 先关闭ResultSet,然后是Statement,最后是Connetion,刚好与创建相应对象时的顺序相反。
    rs.getStatement().close();自动导致ResultSet对象无效 ,这只是ResultSet对象无效,ResultSet所占用的资源可能还没有释放,所有最好还是调有rs.close()不执行ResultSet的close可能会导致更多的资源泄露。
  • 注意:
  1. 在一般的处理中,直接关闭connection没有问题,但必须保证是这里的关闭是真正的关闭。
  2. 但在使用连接池运用中,关闭connection并不意味着真正的关闭了connection,而是将connection返回到池中,并没有关闭。在这种情况下,你的prepstatment和resulset都没有被关闭。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值