通过JDBC连接MySQL实现表的插入和查看语句

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 通过JDBC连接MySQL实现表的插入和查看语句

1.插入语句

因为插入,删除,更新数据操作差不多,我们这里仅仅介绍插入的方法,我们将不使用dbdriver的方式操作,因为这个操作使用的是反射,我们不推荐,下面我们开始正式介绍插入的操作

1.导入库

在官网上搜索jdbc连接的jar包,下载后粘贴到项目路径下,然后选中右击加入库即可

2.创建数据源对象(描述服务源在哪)

服务源可能是本机,也可能是其他服务器

DataSource dataSource = new MysqlDataSource();

接着设置url,用户,和密码

((MysqlDataSource)dataSource).setURL("jdbc:mysql://localhost:13306/dbtest1?useSSL=false&allowPublicKeyRetrieval=true");
 ((MysqlDataSource)dataSource).setUser("root");
 ((MysqlDataSource)dataSource).setPassword("abc123");

为什么不直接new一个MySQlDataSourse呢?

因为加入我们将数据库换成了Oracle,就不用修改太多的代码,没啥影响,实现了低耦合

3.建立抽象连接

这样通信双方都能接收到对方的信息,便于后面的通信

Connection connection = dataSource.getConnection();

4.创建一个SQL语句

为什么使用PreparedStatement而不是Statement?

1.预编译

preparedStatement会将sql语句进行预编译,可以提高执行效率,当出现多次相同的查询语句时会更加高效,因为sql已经被编译过了,数据库会对其进行优化或缓存,效率会进一步提高

注:这里的缓存不是JIT的动态缓存,而是数据库在接受到这些预编译的指令,会生成一系列的查询计划进行缓存,后面在接收到相同的查询指令时,可以使用缓存过的查询计划

2.安全性

可以防止sql注入攻击

3.性能优化

PreparedStatement会减少客户端和服务器的网络通信,因为他可以使用参数替代的sql文本,降低了传输的开销.

String sql = "insert into student values(?,?)";
        //预处理语句(要执行的SQL,是需要进行语法解析的)
        //JDBC也有statement类但是没有预处理功能
        //控制台也是把sql发给服务器,服务器负责解析sql并执行
        //预处理这里就是解析好了,把解析后的结果交给发给服务器去执行
        //如果请求太多了,这样的开销对于服务器来说就不可忽视了
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setString(1,name);
        statement.setInt(2,age);

4.将构造好的语句发送给服务器执行

这里的n其实是返回了几条记录收到影响,我们便于查看是否插入成功

int n = statement.executeUpdate();
        System.out.println(n);

5.释放资源

这些连接和语句会占用一定的硬件资源,记得使用完释放,记得先释放语句再释放连接

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

举个例子,我们现在要向student表插入一条数据

"张三",30

下面我们运行这个代码

Scanner sc = new Scanner(System.in);
        System.out.println("请输入姓名");
        String name = sc.next();
        System.out.println("请输入年龄");
        int age = sc.nextInt();
        //1.创建数据源,描述数据源在哪
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://localhost:13306/dbtest1?useSSL=false&allowPublicKeyRetrieval=true");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("abc123");
        //2.和数据库服务器建立连接(抽象的连接)
        //可以理解为通信双方各自保存对方的信息,然后就可以进行后续的通信了
        Connection connection = dataSource.getConnection();
        //3.构造一个sql
        String sql = "insert into student values(?,?)";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setString(1,name);
        statement.setInt(2,age);
        //4.把构造好的SQL发送给服务器执行
        int n = statement.executeUpdate();
        System.out.println(n);
        //5.释放一些必要的资源
        statement.close();
        connection.close();

结果就是控制台输出一个1,意思是一行受到了影响,然后打开数据库查看表就会发现已经插入成功了.

注:这里的13306是安装时候设置的端口号,默认为3306,后面的dbtest1是使用的数据库名称

2.查询语句

前面的创建数据源,建立连接都相同,重要的是怎么读取临时表的数据

前面由于操作相同,不做过多赘述

只是我们在接受这个时候的结果集时,有所不同

ResultSet resultSet = statement.executeQuery();
        while(resultSet.next()){
            String name = resultSet.getString("name");
            int age = resultSet.getInt("age");
            System.out.print("name: "+name+"    ");
            System.out.print("age: "+age+"    ");
            System.out.println();
        }

我们使用一个ResultSet来接收结果集,分别get对应列的数据,最后以需要的格式打印在控制台中便于查看,我们举例查看一下刚刚的student结果集

DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://localhost:13306/dbtest1?useSSL=false&allowPublicKeyRetrieval=true");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("abc123");
        Connection connection = dataSource.getConnection();
        String sql = "select * from student";
        PreparedStatement statement = connection.prepareStatement(sql);
        ResultSet  resultSet = statement.executeQuery();
        while(resultSet.next()){
            String name = resultSet.getString("name");
            int age = resultSet.getInt("age");
            System.out.println(name +"   " + age);
        }
        resultSet.close();
        statement.close();
        connection.close();

输出结果如下

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4天前
|
关系型数据库 MySQL 数据安全/隐私保护
关于Navicat连接MySQL 报 Authentication plugin ‘caching_sha2_password‘ cannot be loaded
关于Navicat连接MySQL 报 Authentication plugin ‘caching_sha2_password‘ cannot be loaded
|
6天前
|
SQL Java 数据库连接
JDBC的连接参数的设置导致rowid自动添加到sql
JDBC的连接参数的设置导致rowid自动添加到sql
14 1
|
3天前
|
SQL Oracle 关系型数据库
实时计算 Flink版操作报错合集之连接器换成2.4.2之后,mysql作业一直报错如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
15 3
|
3天前
|
Java 数据处理 流计算
实时计算 Flink版产品使用合集之可以通过JDBC连接器来连接Greenplum数据库吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
14 1
|
4天前
|
关系型数据库 MySQL Java
实时计算 Flink版产品使用合集之mysql通过flink cdc同步数据,有没有办法所有表共用一个dump线程
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
8 0
|
4天前
|
SQL 缓存 Java
实时计算 Flink版产品使用合集之flink-connector-mysql-cdc 和 flink-connector-sqlserver-cdc 这两个CDC连接器只能选择其中一个使用吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
26 0
|
6天前
|
关系型数据库 MySQL 数据库
mysql 设置环境变量与未设置环境变量连接数据库的区别
设置与未设置MySQL环境变量在连接数据库时主要区别在于命令输入方式和系统便捷性。设置环境变量后,可直接使用`mysql -u 用户名 -p`命令连接,而无需指定完整路径,提升便利性和灵活性。未设置时,需输入完整路径如`C:\Program Files\MySQL\...`,操作繁琐且易错。为提高效率和减少错误,推荐安装后设置环境变量。[查看视频讲解](https://www.bilibili.com/video/BV1vH4y137HC/)。
91 3
mysql 设置环境变量与未设置环境变量连接数据库的区别
|
6天前
|
Oracle Java 关系型数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
17 6
|
6天前
|
关系型数据库 MySQL 数据库
navicat过期了,直接用idea连接mysql
navicat过期了,直接用idea连接mysql
13 0
|
6天前
|
SQL Java 关系型数据库
【JAVA基础篇教学】第十六篇:Java连接和操作MySQL数据库
【JAVA基础篇教学】第十六篇:Java连接和操作MySQL数据库