Java JDBC常见问题解惑

导读:本篇文章讲解 Java JDBC常见问题解惑,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

为什么形成了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都没有被关闭。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/69803.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!