通过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.构造一个sqlString 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();

输出结果如下

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

碳化硅MOS/超结MOS在直流充电桩上的应用-REASUNOS瑞森半导体

一、前言 直流充电桩是新能源汽车直流充电桩的简称,一般也被叫做“快充”。直流充电桩一般与交流电网连接,可作为非车载电动汽车的动力补充,是一种直流工作电源的电源控制装置,可以提供充足的电量,输出电压和电流可以…

python+pytest接口自动化:token关联登录这样做,阿里p8都直呼牛逼!!!

在PC端登录公司的后台管理系统或在手机上登录某个APP时,经常会发现登录成功后,返回参数中会包含token,它的值为一段较长的字符串,而后续去请求的请求头中都需要带上这个token作为参数,否则就提示需要先登录。 这其实就…

TikTok历史探秘:短视频中的时间之旅

在数字时代的浪潮中,TikTok崭露头角,成为社交媒体领域的一颗耀眼新星。这款短视频应用以其独特的创意、时尚和娱乐性质,吸引了全球数以亿计的用户。 然而,TikTok并非一夜之间的奇迹,它背后蕴藏着丰富而有趣的历史故事…

labview 安捷伦 34970A 采集温度等

本文详细描述了怎么用安捷伦34970A采集温度,并列出了labview的下载链接,具有一定的参考价值。 1.必要条件: RS-232电缆一根 IO Libraries Suite 软件 BenchLink Data Logger 软件 软件可以在http://www.keysight.com.cn下载 检查RS-232…

E-R图与关系模式

1. E-R模型 英文全称:Entity-relationship model,即实体关系模型 把现实世界的 实体模型通过建模转换为信息世界的概念模型,这个概念模型就是E-R模型 2. 数据库设计流程 一般设计数据库分为三个步骤 把现实世界的实体模型,通…

vue中怎么根据选择的名称 生成印章图片

项目中需要根据选择的印章名称&#xff0c;动态生成印章 &#xff0c;印章下方显示当前的日期 代码如下 <template><div><label for"name">选择名称&#xff1a;</label><select id"name" v-model"selectedName">…

技术面时,一定要掌握这3个关键点

前言 现在有这么多优秀的测试工程师&#xff0c;大家都知道技术面试是不可避免的一个环节&#xff0c;一般技术面试官都会通过自己的方式去考察你的技术功底与基础理论知识。 如果你参加过一些大厂面试&#xff0c;肯定会遇到一些这样的问题&#xff1a; 1、看你项目都用到了…

【论文】Bao:一种用于现代多核嵌入式系统的轻型静态分区管理程序

Bao&#xff1a;一种用于现代多核嵌入式系统的轻型静态分区管理程序 个人学习过程中 Bao Hypervisor 论文翻译&#xff08;借助翻译工具个人校对&#xff09;&#xff0c;仅供学习使用&#xff0c;由于个人对一些技术专有名词不够熟悉&#xff0c;翻译不当的地方欢迎指出 论文地…

类初始化,类加载,类加载器

类初始化&#xff0c;类加载&#xff0c;类加载器 1. 类加载1.1. 类的加载1.2. 类的链接1.2.1. 验证1.2.2. 准备1.2.3. 解析 2. 类加载器2.1. 类加载器分为四种&#xff1a;前三种为虚拟机自带的加载器。2.2. 类加载有三种方式&#xff1a;2.3. **JVM类加载机制**2.4. 双亲委派…

vue项目使用easyplayer播放m3u8直播推流

官网 青犀视频 代码库 / 示例 / demo EasyPlayer 示例效果&#xff1a; 项目背景如图 后端给了m3u8的直播地址 协议是 hls / flv 市面上很多第三方热门播放库都可以完成该多屏播放方式 如Video.js 问题在于 分多屏时 会存在性能问题 并且关闭播放器后 即便删除Dom或调用停…

【LeetCode二叉树进阶题目】606. 根据二叉树创建字符串,102. 二叉树的层序遍历,107. 二叉树的层序遍历 II

二叉树进阶题目 606. 根据二叉树创建字符串解题思路及实现 102. 二叉树的层序遍历解题思路及实现 107. 二叉树的层序遍历 II解题思路及实现 606. 根据二叉树创建字符串 描述 给你二叉树的根节点 root &#xff0c;请你采用前序遍历的方式&#xff0c;将二叉树转化为一个由括号…

[ChatGPT]ChatGPT免费,不用翻墙!?——你需要的装备

系列文章目录 【AIGC】服务于人类&#xff5c;一种新的人工智能技术-CSDN博客 文章目录 目录 系列文章目录 文章目录 前言 一、天意云网站 ​编辑 二、使用步骤 可以看到有云服务器、Rstudio以及我们的ChatGPT&#xff0c;我这次主要分享ChatGPT&#xff0c;其他的有机会我再给…