热门标签 | 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


推荐阅读
  • 本文详细介绍如何在Spring Boot项目中集成和使用JPA,涵盖JPA的基本概念、Spring Data JPA的功能以及具体的操作步骤,帮助开发者快速掌握这一强大的持久化技术。 ... [详细]
  • Python安全实践:Web安全与SQL注入防御
    本文旨在介绍Web安全的基础知识,特别是如何使用Python和相关工具来识别和防止SQL注入攻击。通过实际案例分析,帮助读者理解SQL注入的危害,并掌握有效的防御策略。 ... [详细]
  • 本文探讨了Flutter和Angular这两个流行框架的主要区别,包括它们的设计理念、适用场景及技术实现。 ... [详细]
  • UMPlatForm.NET 5.1 版本数据字典管理功能解析
    本文介绍了 UMPlatForm.NET 5.1 版本中的数据字典管理模块,探讨了该模块如何支持平台的数据共享与管理,以及如何通过用户和角色权限来增强系统的安全性。 ... [详细]
  • 本文详细介绍了如何解决在使用本地SQlyog客户端尝试连接阿里云上的MariaDB数据库时遇到的2003错误,即无法连接到MySQL服务器的问题。 ... [详细]
  • Hibernate入门指南:单表数据库操作详解
    本文介绍了Hibernate作为全面的ORM框架的基础知识,并详细讲解了在MyEclipse环境中配置Hibernate以及进行基本的数据库单表操作的方法,包括增删改查等常见操作。 ... [详细]
  • 本文探讨了如何利用 Application 对象在 PHP 应用程序中共享数据,特别是在多用户环境中保持数据的一致性和安全性。文章还介绍了 Application 对象的基本结构、方法和事件,并提供了实际应用示例。 ... [详细]
  • 解决MySQL Administrator 登录失败问题
    本文提供了解决在使用MySQL Administrator时遇到的登录错误的方法,包括启动变量和服务部分禁用的问题。同时,文章还介绍了通过安全配置模式来解决问题的具体步骤。 ... [详细]
  • 优化Nginx中PHP-FPM模块配置以提升性能
    通过调整Nginx与PHP-FPM之间的配置,可以显著提高Web服务器处理PHP请求的速度和效率。本文将详细介绍如何针对不同的应用场景优化PHP-FPM的各项关键参数。 ... [详细]
  • 深入解析线程池的工作原理与实际应用
    本文详细探讨了线程池的核心概念、工作原理及其在实际开发中的应用,包括不同类型的线程池创建方式及其适用场景。 ... [详细]
  • Linux环境下的PHP7安装与配置指南
    本文详细介绍了如何在Linux操作系统中安装和配置PHP7,包括检查当前PHP版本、升级PHP以及配置MySQL支持等步骤,适合后端开发者参考。 ... [详细]
  • 匠心|传统_2021年度总结 | 葡萄城软件开发技术回顾(上)
    匠心|传统_2021年度总结 | 葡萄城软件开发技术回顾(上) ... [详细]
  • 设计模式系列-原型模式
    一、上篇回顾上篇创建者模式中,我们主要讲述了创建者的几类实现方案,和创建者模式的应用的场景和特点,创建者模式适合创建复杂的对象,并且这些对象的每个组成部分的详细创建步骤可以是动态的变化的,但 ... [详细]
  • 本文档提供了详细的MySQL安装步骤,包括解压安装文件、选择安装类型、配置MySQL服务以及设置管理员密码等关键环节,帮助用户顺利完成MySQL的安装。 ... [详细]
  • 帝国cms各数据表有什么用
    CMS教程|帝国CMS帝国cmsCMS教程-帝国CMS精易编程助手源码,ubuntu桥接设置,500错误是tomcat吗,爬虫c原理,php会话包括什么,营销seo关键词优化一般多 ... [详细]
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社区 版权所有