MySQL#4(JDBC常用API详解)

news2024/11/17 15:59:52

目录

一.简介

1.概念

2.本质

3.优点

4.步骤

二.API详解

1.DriverManager(驱动管理类)

2.Connection

3.Statement

4.ResultSet

5.PreparedStatement


一.简介

1.概念

JDBC就是使用Java语言操作关系型数据库的一套API(Java DataBase Connectivity)Java 数据库连接

2.本质

官方定义的一套操作所有关系型数据库的规则,即接口各个数据库厂商去实现这套接口,提供数据库驱动jar包
我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类

3.优点

(1)各数据库厂商使用相同的接口,Java代码不需要针对不同数据库分别开发
(2)可随时替换底层数据库,访问数据库的Java代码基本不变

4.步骤

1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
2.获取连接
Connection conn = DriverManager.getConnection(
url, username, password);(三个参数最好自己设置为变量, 方便修改)
3.定义SQL语句
String sql = "......";
获取执行SQL对象
Statement stmt = conn.createStatement();
5.执行SQL
stmt.executeUpdate(sql);
6.处理返回结果
7.释放资源

代码示范: 

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class JDBCDemo1 {
    public static void main(String[] args) throws Exception {
        //1.注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //2.获取连接
        String url = "jdbc:mysql://127.0.0.1:3306/db2";
        String username = "root";
        String  password = "1234";
        Connection conn = DriverManager.getConnection(url,username,password);
        //3.定义SQL语句
        String sql = "update account set money = 0 where name = '李四'";
        //4.获取SQL对象
        Statement sta = conn.createStatement();
        //5.执行SQL
        long long1 = sta.executeLargeUpdate(sql);
        //6.打印返回结果
        //long1是受影响的行数
        System.out.println(long1);
        //7.释放资源
        sta.close();
        conn.close();

    }

}

数据库中表的原本数据

修改后的数据

二.API详解

1.DriverManager(驱动管理类)

(1)作用

注册驱动
获取数据库连接

(2)获取连接
static Connection          getConnection(string url,string user, string password)
(3)参数

url: 连接路径
语法: jdbc:mysql://ip地址(域名):端口号/数据库名称
?参数键值对1&参数键值对2...
示例: idbc:mysgl://127.0.0.1:3306/db1

细节:
如果连接的是本机mysql服务器,并且mysql服务默认端口是3306,则ur可以简写为: jdbc:mysql:/数据库名称?参数键值对

配置 useSSL=false 参数,禁用安全连接方式,解决警告提示
user: 用户名
password: 密码

简化和修改后 

2.Connection

(1)作用

获取执行SQL的对象

管理事务

(2)获取执行SQL的对象
普通执行SQL对象
Statement createStatement( )
预编译SQL的执行SQL对象: 防止SQL注入
PreparedStatement prepareStatement (sql)
执行存储过程的对象
CallableStatement prepareCall (sql)

(3)事务管理

MySQL 事务管理
开启事务: BEGIN;/ START TRANSACTION;
提交事务:COMMIT;
回滚事务: ROLLBACK;
MySQL默认自动提交事务

JDBC 事务管理: Connection接口中定义了3个对应的方法
开启事务: setAutoCommit(boolean autoCommit): true为自动提交事务; false为手动提交事务,即为开启事务
提交事务: commit()
回滚事务: rollback()

代码示范:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCDemo2 {
    public static void main(String[] args) throws Exception {
        //1.注册驱动
        //Class.forName("com.mysql.jdbc.Driver");jar5以上才可以不用写这行
        //2.获取连接
        String url = "jdbc:mysql:///db2?useSSL=false";
        String username = "root";
        String  password = "1234";
        Connection conn = DriverManager.getConnection(url,username,password);
        Statement sta = conn.createStatement();
        try {
            conn.setAutoCommit(false);//开启事务
            //3.定义SQL语句
            String sql1 = "update account set money = 0 where name = '李四'";
            String sql2 = "update account set money = 999 where name = '张三'";
            //5.执行SQL
            long long1 = sta.executeLargeUpdate(sql1);
            long long2 = sta.executeLargeUpdate(sql2);
            //6.打印返回结果
            //long1是受影响的行数
            System.out.println(long1);
            System.out.println(long2);
            conn.commit();//提交事务
        } catch (Exception e) {
            conn.rollback();//回滚事务
            throw new RuntimeException(e);
        }
        //7.释放资源
        sta.close();
        conn.close();

    }

}

开启事务前

开启事务后:

3.Statement

作用: 执行SQL语句
int executeUpdate(sql):
执行DML、DDL语句
返回值: (1) DML语影响的行数  (2) DDL语执行后,执行成功也可能返回 0
ResultSet executeQuery(sql):
执行DQL 语句

返回值:ResultSet 结果集对象

4.ResultSet

作用: 封装了DQL查询语句的结果
ResultSet
stmt.executeQuery(sql): 执行DQL 语句,返回 ResultSet 对象
获取查询结果

boolean next(): (1)将光标从当前位置向前移动一行 (2)判断当前行是否为有效行返回值:
true: 有效行,当前行有数据
false: 无效行,当前行没有数据

getXxx(参数): 获取数据XXXxxx: 数据类型;

如: int getlnt(参数);String getString(参数)

参数:
可以是列的编号, 
从1开始; 也可以是列的名称

代码示范: 

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class Test1 {
    public static void main(String[] args) throws Exception {
        //注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //获取连接
        String url = "jdbc:mysql:///db2?useSSL=false";
        String username = "root";
        String password = "1234";
        Connection conn = DriverManager.getConnection(url,username,password);
        //定义sql
        String sql = "select * from account";
        //获取statement对象
        Statement sta = conn.createStatement();
        //执行sql
        ResultSet result1 = sta.executeQuery(sql);
        while(result1.next()){
            int id = result1.getInt(1);
            //也可以写成int id = result1.getInt("id");
            String name = result1.getString(2);
            //String name = result1.getString("name");
            double money = result1.getDouble(3);
            //double money = result1.getDouble("money");
            System.out.println(id);
            System.out.println(name);
            System.out.println(money);
            System.out.println("=============");
        }
        //释放资源
        conn.close();
        result1.close();
        sta.close();
    }
}

结果展示: 

将查询到的数据收藏到集合中(重点)

代码示范:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;

public class Test1 {
    public static void main(String[] args) throws Exception {
        //注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //获取连接
        String url = "jdbc:mysql:///db2?useSSL=false";
        String username = "root";
        String password = "1234";
        Connection conn = DriverManager.getConnection(url,username,password);
        //定义sql
        String sql = "select * from account";
        //获取statement对象
        Statement sta = conn.createStatement();
        //执行sql
        ArrayList<Account> list = new ArrayList<>();//创建一个集合来存储数据
        ResultSet result1 = sta.executeQuery(sql);
        while(result1.next()){
            Account acc = new Account();//创建一个对象
            int id = result1.getInt(1);
            //也可以写成int id = result1.getInt("id");
            String name = result1.getString(2);
            //String name = result1.getString("name");
            double money = result1.getDouble(3);
            //double money = result1.getDouble("money");

            acc.setId(id);
            acc.setName(name);
            acc.setMoney(money);
            list.add(acc);//将数据存到集合中
        }
        System.out.println(list);
        //释放资源
        conn.close();
        result1.close();
        sta.close();
    }
}

结果展示: 

5.PreparedStatement

作用:
(1)预编译SQL,性能更高(
预编译功能开启: useServerPrepStmts=true)并执行SQL语句

(2)可以防止SQL注入
(3)获取 PreparedStatement 对象
SQL语句中的参数值,使用? 占位符替代

String sql = "select * from user where username = ? and password = ?";
通过Connection对象获取,并传入对应的sql语句

PreparedStatement pstmt = conn.prepareStatement(sql);
(4)设置参数值
PreparedStatement对象: setXxx(参数1,参数2): 给 ? 赋值

Xxx: 数据类型 ;如 setlnt(参数1,参数2)参数:
参数1:
?的位置编号,从1 开始
参数2: ?的值
(5)执行SQL
executeUpdate();   executeQuery(); : 不需要再传递sql

预编译功能的开启:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/111547.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

年货节微信活动有哪些_分享微信小程序商城开发好处

新年临近&#xff0c;又是百姓们囤年货的日子。各行业的微商商城或者线下实体店的商家们&#xff0c;趁此机会别&#xff0c;做一波优惠促销活动&#xff0c;今年的业绩就靠它来个完美的收尾啦&#xff01; 1.类型&#xff1a;转盘拆福袋等抽奖活动 点击对应抽奖按钮&#xff0…

Doo Prime 提供高达 1000 倍杠杆,助您撬动无限机遇

2022 年 11 月 19 日&#xff0c;Doo Prime 正式将全部账户类型的可选杠杆从 1:500 上调至 1:1000 倍&#xff0c;提供更灵活的杠杆选择&#xff0c;让全球客户有机会以更少的资金撬动更高的潜在利润&#xff0c;进一步拓展投资机遇。 *备注&#xff1a;杠杆调整详情请参阅下文…

Sentinel系列——概述与安装1-1

Sentinel系列——概述与安装1-1概述服务雪崩解决方法基本概念资源规则Sentinel 是如何工作的安装Sentinel下载地址启动修改sentinel启动参数设置启动端口设置用户名密码概述 随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言…

面试官问 Redis 的数据结构的时候怎么答能加分?

一提到 Redis&#xff0c;我们的脑子里马上就会出现一个词&#xff1a;“快。”但是你有没有想过&#xff0c;Redis 的快&#xff0c;到底是快在哪里呢&#xff1f;实际上&#xff0c;这里有一个重要的表现&#xff1a;它接收到一个键值对操作后&#xff0c;能以微秒级别的速度…

【代码随想录】鱼与钰遇雨数据结构与算法刷题笔记

代码随想录 https://www.programmercarl.com/ 编程素养 代码风格 C代码风格参考google C style Guide 我使用的是驼峰命名法&#xff0c;其中空格留白的规则如下例&#xff1a; class Solution { public:void moveZeroes(vector<int>& nums) {int slowIndex 0…

化妆品商城小程序制作步骤_分享化妆品商城小程序开发好处

第一&#xff0c;用套餐做团购活动&#xff0c;主打节日套餐 随着疫情的反反复复&#xff0c;越来越多的用户都减少出门&#xff0c;那么就会减少到线下门店选购商品的机会&#xff0c;那么有一款化妆品商城小程序就可以直接在手机上下单&#xff0c;非常方便&#xff0c;那么我…

清华百度升级AIR白皮书2.0:发布车路协同重大突破

12月23日&#xff0c;全球首份车路协同自动驾驶技术创新白皮书《面向自动驾驶的车路协同关键技术与展望》升级发布2.0版(以下称“白皮书2.0”)&#xff0c;并向全行业公开征集意见。 该白皮书是全球车路协同技术研究领域最权威的报告之一&#xff0c;由张亚勤院士牵头&#xff…

DELMIA软件:机器人工作站中旋转台外围设备的运动仿真操作方法

目录 任务介绍 旋转台设备运动机构分析 旋转台设备模型导入与装配 旋转台设备示教编程 设备工艺添加与工艺序列设计 仿真运行 任务介绍 在DELMIA软件中制作旋转台设备运动机构&#xff0c;并实现机器人与旋转台设备联合运动虚拟仿真。仿真过程中&#xff0c;旋转台设备自…

机器学习肝炎预测模型machine learning for hepatitis prediction model

作者Toby&#xff0c;来自机器学习肝炎预测模型 肝炎是由细菌、病毒、寄生虫、酒精、药物、化学物质、自身免疫等多种致病因素引起的肝脏炎症的统称。儿童及成年人均可患病&#xff0c;病毒感染导致的病毒性肝炎较为常见。 由于过度饮酒、吸入有害气体、摄入受污染的食物、泡菜…

代码随想录刷题记录 day51 下一个更大元素II + 接雨水

代码随想录刷题记录 day51 下一个更大元素II 接雨水 503. 下一个更大元素 II 思想 和每日温度的思路是一样的&#xff0c;单调栈中存放的是元素的下标&#xff0c;需要学习的是如何模拟遍历两次数组。 for(int i1;i<nums.length*2;i){ ​ //这其中所有有关于i的 都用i …

不学PPMT,做自己,FARMER BOB的“高山之道”和破局之路

1999年&#xff0c;有着“潮流玩具教父”之称的中国香港艺术家Michael Lau&#xff08;刘建文&#xff09;&#xff0c;率先开创一种艺术玩具&#xff0c;将艺术、设计、潮流、绘画、雕塑等多元素理念融入玩具载体。 后来&#xff0c;大家都把这种玩具称为“潮玩”&#xff0c…

从车辆工程转行程序员两年,我是这样走过来的

毕业已经两年&#xff0c;这意味着从车辆工程转行做程序员已经两年。 这两年来&#xff0c;我从一个C语言都用不熟悉的菜鸟&#xff0c;一步步到现在负责软件多个模块的开发和维护。我走过很多弯路&#xff0c;也踩过很多坑&#xff0c;当然也从中不停地学习和成长。 这篇文章把…

【Vant相关知识】

目录 1 什么是Vant 2 Vant的优势 3 Vant特性 4 第一个Vant程序 4.1 创建Vue项目 4.2 安装Vant支持 4.3 添加Vant引用 5 按钮组件 6 表单页面 7 area省市区选择 8 商品列表 1 什么是Vant Vant是一个轻量&#xff0c;可靠的移动端组件库&#xff0c;2017开源 目前 Va…

〖产品思维训练白宝书 - 产品思维认知篇④〗- 产品思维的核心要素

大家好&#xff0c;我是 哈士奇 &#xff0c;一位工作了十年的"技术混子"&#xff0c; 致力于为开发者赋能的UP主, 目前正在运营着 TFS_CLUB社区。 &#x1f4ac; 人生格言&#xff1a;优于别人,并不高贵,真正的高贵应该是优于过去的自己。&#x1f4ac; &#x1f4e…

Word控件Spire.Doc 【评论】教程(1):在 C#、VB.NET 中插入 Word 注释

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

Web入门开发【二】- 网站设计

欢迎来到霍大侠的小院&#xff0c;我们来学习Web入门开发的系列课程。 首先我们来了解下这个课程能学到什么&#xff1f; 1、你将可以掌握Web网站的开发全过程。 2、了解基础的HTML&#xff0c;CSS&#xff0c;JavaScript语言。 3、开发自己的第一个网站。 4、认识很多对编…

06---SpringBoot整合MybatisPlus 实现增删改查和分页

1、Mybatis-plus简介 为什么要用MP&#xff1f; MyBatisPlus可以节省我们大量工作时间&#xff0c;所有的CRUD代码都可以自动化完成偷懒用的~如果是对sql语言不太熟练的建议先用mybatis&#xff0c;熟练后再用mybatis-plus 简述 官网https://baomidou.com/为简化开发而生My…

【并发】深入理解JMM并发三大特性(一)

【并发】深入理解JMM&并发三大特性&#xff08;一&#xff09; 今天是2022.11.16&#xff0c;在此之前我已经学习完了图灵课堂MySQL的课程&#xff0c;也是想这篇文章一样用CSDN博客的形式来记录这些知识点。 在并发中&#xff0c;JMM在大多数人眼中&#xff0c;它是整个…

Zookeeper 2 Zookeeper 安装与配置 2.1 Zookeeper 安装与配置

Zookeeper 【黑马程序员Zookeeper视频教程&#xff0c;快速入门zookeeper技术】 文章目录Zookeeper2 Zookeeper 安装与配置2.1 Zookeeper 安装与配置2.1.1 Zookeeper 下载安装2 Zookeeper 安装与配置 2.1 Zookeeper 安装与配置 2.1.1 Zookeeper 下载安装 【其实这块内容 学…

搜狗趁势而来,输入法江湖风云再起

在2022腾讯数字生态大会上&#xff0c;搜狗输入法正式推出面向B端的开放平台&#xff0c;这是自去年9月完成退市、并入腾讯以来&#xff0c;这家输入法C端王者第一个大动作&#xff0c;宣告着其进军B端的野心。几乎与此同时&#xff0c;如今已是自家兄弟的微信&#xff0c;悄然…