JDBC基础-MYSQL

spring cloud alibaba +seata 实战中问题总结 1 找不到包:SeataDataSourceBeanPostProcessor java.lang.IllegalStateException: Error processing condition on io.seata.spring.boot.autoconfigure.SeataAutoConfiguration.globalTransactionScanner at org.springframework.boot.autoconfigure.condition.SpringBootCondit 阅读详情

一、JDBC介绍

1.JDBC是什么

JDBC是java官方定义的一套操作所有关系型数据库(mysql、oracle等)的接口规范,各个数据库厂商基于这套接口规范提供自己的驱动jar包(接口实现类),通过接口调用实现类达到操作数据库的目的。

2.JDBC的优点

(1)java不用针对每个数据库进行单独的开发
(2)可以随时替换底层的数据库

二、JDBC常见概念

2.1 DriverManager(数据库驱动)

2.1.1 注册驱动

注册代码示例:DriverManager.registerDeriver(new Driver());
实际注册代码:Class.forName(“com.mysql.jdbc.Driver”);
实际注册原理:
(1)com.mysql.jdbc.Driver继承了com.mysql.cj.jdbc.Driver
(2)com.mysql.cj.jdbc.Driver中的静态代码块调用了java.sql.DriverManager.registerDriver(new Driver());
(3)所以当Class.forName()初始化com.mysql.jdbc.Driver时,会执行com.mysql.cj.jdbc.Driver的静态代码块注册驱动。
注意:jdk1.6+Mysql5.1.6及之后的版本不再需要通过Class.forName()注册驱动,通过自动读取驱动包下的META-INF/services/java.sql.Driver文件注册驱动。

2.1.2 获取数据库连接

Connection connection = DriverManager.getConnection(String url,String userName,String password);

2.2 Connection(数据库连接)

2.2.1 获取SQL执行对象

Statement statement = connection.createStatement();

2.2.2 获取预编译SQL执行对象

PreparedStatement preparedStatement = connection.prepareStatement(String sql);

2.2.3 获取存储过程执行对象

CallableStatement callable = connection.prepareCall(String sql);

2.2.4 管理事务

1)connection.setAutoCommit(boolean autoCommit); true为自动提交事务,false为手动提交事务并开启事务。
	(2)connection.commit(); 		提交事务
	(3)connection.rollback();		回滚事务

2.3 Statement(SQL执行对象)

2.3.1 执行DDL、DML语句

 int count = statement.executeUpdate(String sql); 	执行DML语句返回影响行数,执行DDL语句返回0

2.3.2 执行DQL语句0

ResultSet resultSet = statement.executeQuery(String sql);	返回查询结果集

2.4 PrepareStatement(预编译SQL执行对象)

String sql = "SELECT * FROM student where student_no = ? and student_name = ?"
preparedStatement.setString(1, 0211066);
preparedStatement.setInt(2, "陈冠希");
ResultSet resultSet = preparedStatement.executeQuery();

优点:
1.创建PreparedStatement对象时会将SQL模版传入mysql,完成SQL检查和SQL编译工作,提高执行效率。
2.需要执行多条相同的SQL模版时,只需要进行一次检查和编译,效率高。
3.可以防止SQL注入。(设置String参数时无论传入什么值都会封装到单引号中,例如id = ‘1 or 1 = 1’)
注意:如果想要使用预编译功能需要开启预编译配置:useServerPrepStmts=true

2.5 ResultSet(SQL查询结果集)

2.5.1 处理结果集

代码示例:

   ResultSet resultSet = preparedStatement.executeQuery();
   while (resultSet.next()) {
       String cardId = resultSet.getString("card_id");
       String cardName = resultSet.getString("card_name");
       System.out.println(cardId + ":" + cardName);
   }

三、完整示例

代码示例1(Statement):

    private String url = "jdbc:mysql://localhost:3306/marketing_db?serverTimezone=Asia/Shanghai&useServerPrepStmts=true";
    private String userName = "root";
    private String password = "123456";

    @Test
    public void test01() throws ClassNotFoundException, SQLException {
        // 1.注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        // 2.获取链接
        Connection connection = DriverManager.getConnection(url, userName, password);
        // 3.定义SQL语句
        String sql1 = "SELECT * FROM m_card_info WHERE card_id = 1";
        String sql2 = "SELECT * FROM m_card_info WHERE card_id = 2";
       // 4.创建SQL执行器
        Statement statement = connection.createStatement();
        ResultSet resultSet1 = statement.executeQuery(sql1);
        while (resultSet1.next()) {
            String cardId = resultSet1.getString("card_id");
            String cardName = resultSet1.getString("card_name");
            System.out.println(cardId + ":" + cardName);
        }
        ResultSet resultSet2 = statement.executeQuery(sql2);
        while (resultSet2.next()) {
            String cardId = resultSet2.getString("card_id");
            String cardName = resultSet2.getString("card_name");
            System.out.println(cardId + ":" + cardName);
        }
        statement.close();
        // 关闭连接
        connection.close();
    }

代码示例2(PrepareStatement):

	 private String url = "jdbc:mysql://localhost:3306/marketing_db?serverTimezone=Asia/Shanghai&useServerPrepStmts=true";
	 private String userName = "root";
	 private String password = "123456";
    @Test
    public void test02() throws ClassNotFoundException, SQLException {
        // 1.注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        // 2.获取链接
        Connection connection = DriverManager.getConnection(url, userName, password);
        // 3.定义SQL语句
        String sql = "SELECT * FROM m_card_info WHERE card_id = ?";
        // 4.创建SQL预编译执行器
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setString(1, "1");
        ResultSet resultSet1 = preparedStatement.executeQuery();
        while (resultSet1.next()) {
            String cardId = resultSet1.getString("card_id");
            String cardName = resultSet1.getString("card_name");
            System.out.println(cardId + ":" + cardName);
        }
        preparedStatement.setString(1, "7");
        ResultSet resultSet2 = preparedStatement.executeQuery();
        while (resultSet2.next()) {
            String cardId = resultSet2.getString("card_id");
            String cardName = resultSet2.getString("card_name");
            System.out.println(cardId + ":" + cardName);
        }
        preparedStatement.close();
        // 关闭连接
        connection.close();
    }
JDBC连接MySQL基本步骤 JDBC连接MySQL(1) JDBC连接MySQL一般步骤: 1、加载JDBC驱动 (1.1)、下载JDBC驱动、(链接: https://pan.baidu.com/s/1adjzuLHDjXhFA2_W8IiLGg 提取码: e6zv ). (2)、将驱动jar加到项目中。 (3)、加... 阅读详情

相关推荐

com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver

一、 com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver介绍 1.MySQL Connector / J介绍 MySQL通过MySQL Connector / J为使用Java编程语言开发的客户端应用程序提供连接。Connector / J实现了 Java数据库连接(JDBC)API以及它的许多增值扩展。它还支持新的X DevAPI。 MySQL Connector / J是JDBC Type 4驱动程序,实现了 JDBC 4.2规范。Type 4表示驱动程序是

XiaoPub的博客 9161

seata核心流程原理

文章目录ATTM开启事务提交事务回滚事务RM提交分支事务回滚分支事务TC开启事务注册分支事务提交事务回滚事务参考 AT 模块: Transaction Coordinator (TC):事务协调器,维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚。 Transaction Manager™ :控制全局事务的边界,负责开启一个全局事务,并最终发起全局提交或全局回滚的决议。 Resource Manager (RM):控制分支事务,负责分支注册、状态汇报,并接收事务协调器的指令,驱动分支(本地)

qq_40369829的博客 1219

Java后端中的链路追踪:使用OpenTelemetry实现全链路监控

在现代的微服务架构中,链路追踪是监控和优化系统性能的关键技术。通过链路追踪,我们可以跟踪请求在系统中的流转,识别性能瓶颈,定位问题根源。本文将介绍如何在Java后端应用中使用OpenTelemetry实现全链路监控,包括具体的实现步骤和代码示例。通过集成OpenTelemetry,您可以实现全面的链路追踪,帮助您识别瓶颈和潜在问题,从而提升系统的可靠性和用户体验。OpenTelemetry是一个开源项目,旨在提供统一的工具集来收集、处理和导出应用程序的遥测数据,包括跟踪、度量和日志。

聚娃科技开发者博客 1693

同一方法下两个数据源的回滚_寻常操作竟引发惊天巨坑?深挖Seata数据源代理机制...

数据源代理在Seata1.3.0版本中,数据源自动代理和手动代理一定不能混合使用,否则会导致多层代理,从而导致以下问题:单数据源情况下:导致分支事务提交时,undo_log本身也被代理,即为 undo_log 生成了 undo_log, 假设为undo_log2,此时undo_log将被当作分支事务来处理;分支事务回滚时,因为undo_log2生成的有问题,在undo_log对应的事务分...

weixin_39637151的博客 935

Fescar - RM AbstractDMLBaseExecutor介绍

开篇  这篇文章的目的是讲解RM Executor模块当中一些通用的方法,这些方法在各个Executor的父类当中实现的,各个子类Executor模块都会复用,因此抽取出来统一的进行讲解。  个人是认为抽取通用的内容放在一篇文章讲解完后可以针对每类Executor讲解特有的功能,这样能够有更好的理解。这篇文章讲解Executor的父类AbstractDM...

测试0901-1 353

servlet mysql 事务_基于Seata实现分布式事务

一、Seata简介2019 年 1 月,阿里巴巴中间件团队发起了开源项目 Fescar(Fast & EaSy Commit And Rollback),蚂蚁金服后在Fescar 0.4.0 版本中贡献了 TCC 模式。后来更名为 Seata,意为:Simple Extensible Autonomous Transaction Architecture,是一套一站式分布式事务解决方案。S...

weixin_33940469的博客 1703

JDBC 连接 MySQL

JDBC 是 Java DataBase Connectivity (Java 数据连接)技术的简称,是一种可用于执行SQL 语句的 Java API。它由一些 java 语言编写的类和接口组成;程序员通过使用 jdbc 可以方便地将 SQL 语句传送给几乎任何一种数据库......

程序猿追的博客 11万+

MYSQLJDBC的使用

JDBC 是Java 中的一组API,用于执行SQL 操作(例如CRUD 操作:增、删、改、关系),同时可以和各种类型的数据库类型进行连接(MySQL、Oracle、SQL Server 等)。在项目中,可以通过下载MySQL的Connector/J包并添加到项目的类路径中。时,避免了简单的字符串粘贴可能带来的代码差异性差、安全性低的问题(如SQL注入),提供了更安全和清晰的插值方式。

eternal__day的博客 1991

从入门到精通【MySQLJDBC

从入门到精通【MySQLJDBC

双吉堡工程专业的一名27届Javaer。 3834

MySQLJDBC连接

MySQLJDBC连接MySQLJDBC概念MySQLJDBCJDBC添加数据封装连接工具更新数据和事务删除数据查询数据 MySQLJDBC概念 JDBC 是 Java Database Connective的缩写,表示使用Java去连接数据库进行数据操作的过程 MySQLJDBC 创建动态项目-以eclipse为例,首先要创建动态项目 连接开发包(在www.mvnrepositor...

hcwdd的博客 2万+

MySQL系列】Java的JDBC编程

MySQL数据库 JDBC编程部分的内容~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

哎呀是小张啊 的博客 2025

MySQL JDBC

JDBC是Java平台的一部分,它提供了一套完整的API,用于执行SQL语句、管理数据库连接和处理结果集。JDBC使得Java程序能够以一种统一的方式访问各种数据库,而无需关心底层数据库的具体实现。MySQLJDBC的集成是Java开发中不可或缺的一部分。通过本文的介绍和代码示例,您应该能够掌握MySQL JDBC的基本用法和最佳实践。在实际项目中,根据需求选择合适的JDBC驱动、连接池和事务管理策略,以确保数据库操作的高效性和可靠性。

Alexanderkik的博客 1315

[MySQL]初始JDBC编程

JDBC即Java DataBase Connectivity , Java数据库连接 , 是一种用于执行SQL语句的Java API. 它是Java中数据库的连接规范.

Node_Hao的博客 4044

MySQL】Java的JDBC编程

Java的JDBC编程 1. 数据库编程的必备条件 2. Java的数据库编程:JDBC 3. JDBC工作原理 4. JDBC使用 配置 最基本的一个JDBC程序编写流程 JDBC查询 4.1 JDBC开发案例 4.2 JDBC使用步骤总结 5. JDBC常用接口和类 5.1 JDBC API 5.2 数据库连接Connection 5.3 Statement对象 5.4 ResultSet对象 6. 应用案例 7. 内容重点总结 面试问答: 8. 课后作业

2402_85428625的博客 2074

MySQLJDBC编程

是 Java 提供的一种,用于连接和操作关系型数据库JDBC 是 Java 语言和数据库之间沟通的桥梁,使得 Java 应用程序可以与各种数据库进行交互。

YQY18289570091的博客 1181

MySQL JDBC 编程

难道是针对⼀个数据库写⼀套调⽤的⽅法吗?因为驱动和 API 完全不同,所以不同的数据操作也是不同 的,要针对每种数据库写⼀套调⽤代码就太麻烦了,那要怎么办?。2.1 JDBC 定义JDBC,即 Java Database Connectivity,Java 数据库连接。是⼀种⽤于执行 SQL 语句的 Java API, 它是 Java 中的数据库连接规范。这个 API 由 java.sql.*,javax.sql.* 包中的⼀些类和接⼝组成,

2401_87167748的博客 1840

mysqljdbc

Java和JDBC七步走mysqljdbc数据库的基本讲解数据库的视图JDBC和Java mysqljdbc Java语言能干什么 MSI:停车场管理系统,图书馆管理系统,管家婆 OA:办公自动化系统 CRM:客户关系管理系统 ERP:大型企业级应用管理 APP或服务端:12306 微信小程序 以上这些统称为应用型软件 功能性软件:百度网盘,屏幕录像专家 C/S:客户端/服务端 例如:QQ,酷狗 B/S:浏览器/服务端 例如:淘宝网 可以通过专门的工具实现将java写的程序变为xx.ex

一个小小的码农 5146

MySQL JDBC编程

简单介绍了JDBC编程及对功能进行了封装。

Naion的博客 634

mysql jdbc驱动_安装 mysqlJDBC driver

You can install the Connector/J package using either the binary or source distribution. The binary distribution provides the easiest method for installation; the source distribution lets you customize...

weixin_39709178的博客 983

深入解析音频信号处理的核心算法——傅里叶变换、语音增强、回声消除与主动降噪

本文系统介绍了现代音频信号处理的核心技术。首先阐述傅里叶变换作为理论基础的重要性,它能将声音分解为频域成分。随后重点分析三大关键技术:语音增强利用谱减法、维纳滤波和深度学习从噪声中提取人声;回声消除采用自适应滤波器消除通话中的回声;主动降噪通过声波干涉原理抵消环境噪声。文章最后指出,这些技术在实际应用中协同工作,形成完整的音频处理链路,共同提升语音质量和听觉体验。随着算法进步和算力提升,音频处理技术正向着更智能、更高效的方向发展。

程序猿老樊的博客 1264

EtherCATET1100.rar_ET1100 datasheet_EtherCATET1100_EtherCATET110

EtherCAT芯片ET1100详细开发手册,开发EtherCAT必备资料

上一篇: JAVA-工作流-Activiti7入门demo
搬砖小菜鸡。
博客等级 码龄8年 0粉丝 · 2原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值