热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JavaEE之JDBC技术

JavaEE之JDBC介绍JavaDatabaseConnectivity(使用java操作数据库的标准接口,任何java访问数据库框架最终底层都是基于jdbc接

Java EE 之 JDBC


介绍

Java Database Connectivity(使用java操作数据库的标准接口,任何java访问数据库框架最终底层都是基于jdbc接口实现
来操作数据库的,只是框架对jdbc有所封装).JDBC是java ee众多标准其中一个。

Java Database Connectivity (JDBC) is an application programming interface (API) for the programming language Java, which defines how a client may access a database.It is part of the Java Standard Edition platform, from Oracle Corporation.It provides methods to query and update data in a database, and is oriented towards relational databases. A JDBC-to-ODBC bridge enables connections to any ODBC-accessible data source in the Java virtual machine (JVM) host environment.

如今大多数应用都是构建在关系型数据库之上的,尤其是web应用更是如此,因此访问数据库是大多数应用都要需要的。对于后端开发者而言,经常需要访问数据库存储或检索数据,java给我们提供了jdbc标准来访问关系型数据库。


持久化概念

持久化(persistence):把数据保存到可掉电式存储设备中以供之使用。大多数情况下特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以“固化”,而持久化的实现过程大多通过各种关系型数据库完成。当然也可以存储在磁盘文件、XML数据文件中。简言之数据持久化,将数据从内存保存到硬盘文件上。



jdbc示意图



JDBC连接示意图




jdbc api 如图



jdbc api核心接口和类






核心内容


JDBC的核心接口和类

(深入研究源码有助于我们得心应手的使用)

核 心 类: DriverManager(驱动管理器)
核心接口: Connection、PreparedStatement、CallableStatement、ResultSet、Statement(不推荐直接使用)

DriverManager:管理一组JDBC驱动程序的基本服务
Statement接口:用于执行静态 SQL 语句并返回它所生成结果的对象—(我称之为处理机制对象)执行sql操作时,会引起sql注入问题
PreparedStatement接口:表示预编译的 SQL 语句的对象—(我称之为预处理机制对象) 可以填充占位符,执行效率更高效
SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。
CallableStatement接口:存储过程预处理器,继承自PreparedStatement。
ResultSet接口:表示数据库结果集的数据表。它的游标有类似集合框架里迭代器功能。

JDBC连接操作数据库的步骤:

1.加载驱动 Class来加载
2.创建Connection对象 DriverManager来获得(企业级开发使用连接池技术)
3.获得预处理机制执行语句 connection获得预处理机制,ps.executeUpdate()、ps.executeQuery();
4.获得结果集(可选) 预处理机制获得的
最后一步一定是关闭数据库资源(资源的操作一定释放资源)
备注:数据库的操作有两点要特别注意(事务、资源关闭)
注意:关闭资源时先后顺序,先打开的后关闭,犹如开门和关门。

获得数据库连接方式

1.使用Driver接口来实现(几乎不会使用)

2.使用DriverManager类来连接(适合自己学习使用)

3.使用数据库连接池来完成数据库连接(企业开发生产环境使用)

举例:连接mysql的几个基本参数

DRIVER="com.mysql.jdbc.Driver"
URL:"jdbc:mysql://127.0.0.1:3306/test"
URL:"jdbc:mysql:///test(如果是默认本机和3306端口)"
USERNAME:"admin"
PASSWORD:"admin"
通常这些配置都是写在配置文件中properties配置文件或xml配置文件

读取属性文件java代码

//读取 jdbc.properties
//属性文件对应 Java 中的 Properties 类 它是Map子类
Properties properties = new Properties();
InputStream inStream = ReviewTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
properties.load(inStream)

处理sql.Date和java.util.Date的转换

//第一个Date是java.sql里的Date
//第二个Date是java.util里的Date
new Date(new Date().getTime());
//更标准的写法是:
new java.sql.Date(new java.util.Date().getTime());

方式一:(直接使用预处理器 推荐使用)

preparedStatement=connection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS;//执行操作preparedStatement.executeUpdate();//获得自增主键的结果集ResultSet resultSet=preparedStatement.getGeneratedKeys();//如果知道插入记录只有一条的话if(resultSet.next()){Integer id=resultSet.getInt(1);System.out.println("主键id: "+id);}//如果插入数据是多条记录的话while(resultSet.next()){Integer id=resultSet.getInt(1); System.out.println("id "+id);}备注:通常情况下都是插入一条记录的

方式二:(使用静态的处理器 不推荐使用)

Statement statement=connection.createStatement(); statement.executeUpdate(sql, Statement.RETURN_GENERATED_KEYS);//获得自增主键结果集ResultSet resultSet=statement.getGeneratedKeys();//如果知道插入记录只有一条的话if(resultSet.next()){Integer id=resultSet.getInt(1);System.out.println("主键id: "+id);}//如果插入数据是多条记录的话while(resultSet.next()){ Integer id=resultSet.getInt(1); System.out.println("id "+id);}备注:不管使用那种方式都需要获得对应的结果集,还要使用Statement.RETURN_GENERATED_KEYS;

访问层框架进化史

1、原生jdbc
2、简易封装jdbc的小组件(DBUtils、spring JdbcTemplate
3、半自动化orm框架ibatis/mybatis框架(个人比较喜欢)
4、全自动化orm框架hibernate框架
5、JPA持久化标准(推荐使用)



总结

JDBC技术很重要,我们应该好好研读下其源码,但是实际开发中我们通常会使用封装过的访问层框架。例如mybatis、hibernate等ORM框架。java ee标准中又提出了一项新的对象持久化标准,即JPA规范基于JPA实现规范访问数据库就会变得更加简单,是站在OOP层面去访问数据库了。

疑问

如何判断某一次执行语句是否执行成功?




参考

https://en.wikipedia.org/wiki/Java_Database_Connectivity
https://www.ibm.com/developerworks/cn/java/l-jdbcperform/
https://docs.oracle.com/javase/8/docs/api/java/sql/package-summary.html


推荐阅读
  • oracle c3p0 dword 60,web_day10 dbcp c3p0 dbutils
    createdatabasemydbcharactersetutf8;alertdatabasemydbcharactersetutf8;1.自定义连接池为了不去经常创建连接和释放 ... [详细]
  • 在分析Android的Audio系统时,我们对mpAudioPolicy->get_input进行了详细探讨,发现其背后涉及的机制相当复杂。本文将详细介绍这一过程及其背后的实现细节。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 在本地环境中部署了两个不同版本的 Flink 集群,分别为 1.9.1 和 1.9.2。近期在尝试启动 1.9.1 版本的 Flink 任务时,遇到了 TaskExecutor 启动失败的问题。尽管 TaskManager 日志显示正常,但任务仍无法成功启动。经过详细分析,发现该问题是由 Kafka 版本不兼容引起的。通过调整 Kafka 客户端配置并升级相关依赖,最终成功解决了这一故障。 ... [详细]
  • 本文探讨了如何在 Java 中将多参数方法通过 Lambda 表达式传递给一个接受 List 的 Function。具体分析了 `OrderUtil` 类中的 `runInBatches` 方法及其使用场景。 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 本文总结了一些开发中常见的问题及其解决方案,包括特性过滤器的使用、NuGet程序集版本冲突、线程存储、溢出检查、ThreadPool的最大线程数设置、Redis使用中的问题以及Task.Result和Task.GetAwaiter().GetResult()的区别。 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 在Java Web服务开发中,Apache CXF 和 Axis2 是两个广泛使用的框架。CXF 由于其与 Spring 框架的无缝集成能力,以及更简便的部署方式,成为了许多开发者的首选。本文将详细介绍如何使用 CXF 框架进行 Web 服务的开发,包括环境搭建、服务发布和客户端调用等关键步骤,为开发者提供一个全面的实践指南。 ... [详细]
  • Java能否直接通过HTTP将字节流绕过HEAP写入SD卡? ... [详细]
  • 本指南详细介绍了在Linux环境中高效连接MySQL数据库的方法。用户可以通过安装并使用`mysql`客户端工具来实现本地连接,具体命令为:`mysql -u 用户名 -p 密码 -h 主机`。例如,使用管理员账户连接本地MySQL服务器的命令为:`mysql -u root -p pass`。此外,还提供了多种配置优化建议,以确保连接过程更加稳定和高效。 ... [详细]
author-avatar
小周颖子
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有