MySQL之JDBC(二)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: MySQL之JDBC(二)

MySQL之JDBC(一)+https://developer.aliyun.com/article/1413550

2.和数据库建立连接

代码

// 2.和数据库服务器建立连接  连接好了之后才能进行后序的  "请求--响应" 操作
        Connection connection = dataSource.getConnection();// 此处会报错  需要抛出异常 直接使用throws进行抛出

注意处理异常

此处要注意选择正确的Connection接口

3.构造sql

 构造sql就是将sql命令使用字符串的形式存储到一个字符串变量中,再进行预处理

// 3.构造sql  sql语句最后不需要再去添加;  命令行的时候添加;
        String sql = "insert into student values(3,'张三')";
        PreparedStatement statement = connection.prepareStatement(sql);

 为什么我们要进行sql语句预处理呢?其实也有办法直接让服务器去执行,但是服务器会对传入的字符串进行解析,校验,且传入的字符串可能出现语法错误

进行预处理相当于提前进行检查,会对传入字符串进行解析,校验,看有没有错误的地方,并将字符串解析为结构化数据,这样服务器就不需要再去解析,校验,增加了效率

4.发送给服务器,执行sql

 通过预处理过后的语句statement向数据库传递数据

代码

// 4. 将sql发送给服务器 执行sql
        int n = statement.executeUpdate();
        System.out.println(n);

这里的n是什么呢?在命令行中,如果我们执行插入的操作,最后会返回有几行受到影响,此处的n就是用于接收收到影响的行数

最常用的两种方法

代码

// 将id为3的人的名字设置为王五
        String sql2 = "update student set name = '王五' where id = 1";
        PreparedStatement statement2 = connection.prepareStatement(sql2);

5.释放资源

程序通过代码和数据库建立通信,是需要消耗软件/硬件资源的,,当你不再使用数据库时,要把利用的资源返还(好借好还么)

statement.close();
        connection.close();

四.利用jdbc进行数据库的查询操作

 数据库的查询操作和插入等略有不同,原因在于查询操作的返回值不是简单的数字,而是一个结果集,拿到结果集之后还要进行遍历,打印

public static void main(String[] args) throws SQLException {
        // 1.创建数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java109?characterEncoding+utf8&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("123456");
        // 2建立连接
        Connection connection = dataSource.getConnection();
        // 3.构造sql语句
        String sql = "select * from student";
        PreparedStatement statement = connection.prepareStatement(sql);
        // 4.执行sql  和update不同  此处应该使用executeQuery()方法
        ResultSet resultSet = statement.executeQuery();
        // 5.遍历打印结果集  resutlSet最开始指向的第0行 就是列名那一行  应该从她的下一行打印 也就是数据的第一行
        while(resultSet.next()) {
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            System.out.println("id = " + id + " ,name = " + name);
        }
        // 6.释放资源  注意释放顺序
        resultSet.close();
        statement.close();
        connection.close();
    }

运行结果

关于结果集的一些补充:

1.结果集ResultSet是executeQuery的返回值,它本质上是一个接口,但实际上返回的是由驱动程序提供的一个实现了ResultSet的类(接口不能直接实例化)

 具体提供的是哪一个具体的类呢? 对于MySQL JDBC驱动程序,在执行 executeQuery后,返回的是 com.mysql.cj.jdbc.result.ResultSetImpl 的实例,这是MySQL Connector/J 驱动中的一个具体类,用于实现 ResultSet 接口并提供了与MySQL数据库交互的功能。

ResultSet resultSet = statement.executeQuery();

 在执行完上述代码之后,变量resultSet中会存放 com.mysql.cj.jdbc.result.ResultSetImpl 的实例,允许你进行查询操作

2.遍历循环打印的逻辑是什么?

 逻辑可以想象成一个光标从上至下对表进行遍历

 

五.补充:

1."?"占位符

在插入语句里面我们把内容写死了,哪能不能让用户自己输入要插入的内容呢?答案是可以的

可以使用JDBC中的占位符 ?

2.详细解释为什么不能传递字符串类型的sql语句

 在jdbc编程中不能传递字符串类型的SQL语句主要出于安全和性能两方面进行考虑

安全上:传递字符串类型的SQL语句引发SQL注入,SQL注入是一种常见的SQL中的漏洞。用户可能传递恶意的代码(尤其是字符串拼接容易发生)来使数据库执行未经授权的操作,从而给数据库服务器带来危险

性能上:使用预编译语句能够提高性能。预编译是指将SQL语句进行预编译处理,并将其存储到数据库服务器之中,下次使用时只需传递参数即可,提高了执行的效率。通过预编译,可以减少数据库对SQL的检查和解析,提高了效率

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
12月前
|
Java 关系型数据库 MySQL
mysql5.7 jdbc驱动
遵循上述步骤,即可在Java项目中高效地集成MySQL 5.7 JDBC驱动,实现数据库的访问与管理。
2185 1
|
SQL druid Java
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
152 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
|
12月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
287 0
|
12月前
|
SQL 分布式计算 关系型数据库
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
139 0
|
12月前
|
SQL 分布式计算 关系型数据库
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
191 0
|
前端开发 关系型数据库 MySQL
com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver 的区别
这篇文章讨论了`com.mysql.jdbc.Driver`和`com.mysql.cj.jdbc.Driver`两个MySQL驱动类的区别,指出`com.mysql.jdbc.Driver`适用于MySQL 5的`mysql-connector-java`版本,而`com.mysql.cj.jdbc.Driver`适用于MySQL 6及以上版本的`mysql-connector-java`。文章还提到了在实际使用中如何根据MySQL版本选择合适的驱动类。
com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver 的区别
|
关系型数据库 MySQL Java
【Azure 应用服务】App Service 无法连接到Azure MySQL服务,报错:com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
【Azure 应用服务】App Service 无法连接到Azure MySQL服务,报错:com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
394 0
|
21天前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
57 3
|
27天前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
15天前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。

推荐镜像

更多