MySQL数据库JDBC编程

news2024/11/22 11:05:27

目录

前言:

项目中导入驱动包

插入记录

创建数据源

连接数据库

构造sql语句

执行sql语句

释放资源

整体代码展示

查看数据

代码展示

小结:


前言:

    MySQL为Java提供了驱动包。通过Java程序实现的客户端,可以通过这个驱动包,把客户端和MySQL服务器进行网络通信。

项目中导入驱动包

    将驱动包下载好之后,直接复制到项目中的包中(我这里是lib包下)。然后点击下面的Add as Library导入到库中,之后就可以发现可以解析这个驱动包了,也就成功了。

插入记录

创建数据源

    首先需要创建数据源,它是描述数据库服务器在哪里,然后才可以经过客户端进行连接服务器。

DataSource dataSource = new MysqlDataSource();

    这里是构造了一个datasource对象。采取向上转型的方式。这样的好处是,如果使用不同的数据库,它所提供的驱动包也会不一致,那么我们只需要改动这一处代码就可以。

    JDBC支持两种方式的风格。DriverManager和DataSource。DriverManager会利用反射的机制,并且它不支持重复连接,它会直接关闭物理连接。DataSource内置了数据库连接池,其中可以创建一定数量的数据库连接,并且支持重复连接,它只是回收了对象。这里介绍DataSource方式的风格。

jdbc:mysql://127.0.0.1:3306/test9?characterEncoding=utf8&useSSL=false

  • jdbc:mysql这个是jdbc下的MySQL。
  • 127.0.0.1特殊的ip地址,用来指向本电脑的ip,称为环回ip。只要服务器和客户端在同一个主机上就可以使用这个ip。
  • 3306MySQL程序的端口号,默认是3306。
  • test9数据库名。
  • characterEncoding=utf8描述了请求的编码字符集,这里是utf8。
  • useSSL=false关闭加密方式。

设置URL,用户名及密码

DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test9?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("用户名");
((MysqlDataSource)dataSource).setPassword("密码");

    注意:这里需要向下转型。创建数据源需要确定数据库的具体位置,及一些信息。

连接数据库

Connection connection = dataSource.getConnection();

    注意:连接数据库是把这个客户端和服务器进行连接。这里要使用java.sql下的Connection。这里会抛异常,需要对异常进行处理。

构造sql语句

String sql = "insert into student values(1, 'aaa')";
String sql = "insert into student values(?,?)";//设置通配符
PreparedStatement statement = connection.prepareStatement(sql);//预处理
//替换通配符
statement.setInt(1, id);
statement.setString(2, name);

注意:

   有两种方式构造sql语句。第一种是直接写出来。第二种是设置通配符,通过接下来对sql进行预处理,返回的对象来设置通配符里面的值。第一个?位置是1,第二个?位置是2以此类推。

    这里使用PreparedStatement,优点是可以执行带或者不带参数的sql,sql语句会预编译在数据库系统,执行速度快于Statment对象。

执行sql语句

//执行sql语句,返回所影响的行数
int ret = statement.executeUpdate();

    注意:执行插入,修改,删除时使用executeUpdate,查看记录使用executeQuery。插入时会返回所影响的行数。

释放资源

//释放资源,断开连接
statement.close();
connection.close();

    注意:当进行资源的利用,就需要去释放相应的资源。不然就很有可能造成内存泄漏。释放资源时,需要释放其他资源最终断开连接。即释放资源和连接资源顺序是相反的。

整体代码展示

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

public class JDBCInsertDemo {
    public static void main(String[] args) throws SQLException {
        //先创建DateSource数据源,描述数据库服务器在哪
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test9?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("用户名");
        ((MysqlDataSource)dataSource).setPassword("密码");

        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入学号:");
        int id = scanner.nextInt();
        System.out.println("请输入姓名:");
        String name = scanner.next();

        //建立连接
        Connection connection = dataSource.getConnection();
        //构造sql语句

        //String sql = "insert into student values(" + id + " , '" + name + "')";
        String sql = "insert into student values(?,?)";//设置通配符
        //对sql语句进行预处理,jdbc 中还需要搭配一个特定的对象, 来描述这里的 sql 的情况
        PreparedStatement statement = connection.prepareStatement(sql);

        //替换通配符
        statement.setInt(1, id);
        statement.setString(2, name);

        //执行sql语句,返回所影响的行数
        int ret = statement.executeUpdate();
        System.out.println(ret);

        //释放资源,断开连接
        statement.close();
        connection.close();
    }
}

查看数据

    这里和插入记录的差别是在执行sql时使用的方法不同,返回的结果不同。插入记录使用的是executeUpdate返回的结果是所影响的行数,查看记录使用的是executeQuery返回查看结果集合。然后只需要遍历这个集合就可以看见所查询的记录。

    注意:集合遍历时,是以行为单位进行遍历的。其中的参数填对应列的列名,方法就使用相对应的类型。

代码展示

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JDBCSelectDemo {
    public static void main(String[] args) throws SQLException {
        //创建数据源,描述数据库服务器位置
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test9?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("用户名");
        ((MysqlDataSource)dataSource).setPassword("密码");

        //建立连接
        Connection connection = dataSource.getConnection();

        //构造sql,预处理
        String sql = "select * from student";
        PreparedStatement statement = connection.prepareStatement(sql);

        //执行sql,返回结果集合
        ResultSet resultSet = statement.executeQuery();
        //遍历集合,打印数据
        while(resultSet.next()) {
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            System.out.println(id + " " + name);
        }

        //释放资源
        resultSet.close();
        statement.close();
        connection.close();
    }
}

小结:

    JDBC编程为我们操作数据库带来了很大的遍历,需要我们掌握和使用它。

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

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

相关文章

JavaWeb以Maven整合Mybatis报错java.lang.NoClassDefFoundError(Web项目未能完全加载Maven下的依赖)

问题描述 为完成学校课程一个javaweb的demo,想着对数据库的访问能够更加简洁,所以用了Mybatis。因为之前有过Springboot整合Mybatis经验,所以本以为事情会简单。在Junit的测试类中是能够正常对数据库进行CRUD。在Javaweb的Servlet类中调用数据…

应用层协议之DNS、DHCP

运输层为应用进程提供了端对端的通信服务,但不同的网络应用的应用进程之间,还需要有不同的通信规则。因此在运输层协议之上,还需要有应用层协议。 应用层中有这些常见的协议 域名系统:DNS动态主机配置:DHCP超文本传输…

数据结构之栈

文章目录前言一、栈二、栈应该如何实现1.顺序表or链表2.静态or动态三、栈的实现1.栈的定义2.接口(声明)3.接口的实现初始化栈销毁栈获取栈顶元素获取栈中有效元素个数入栈出栈检测栈是否为空4.主函数(测试)总结前言 今天这篇文章…

云原生系列 二【轻松入门容器基础操作】

✅作者简介: CSDN内容合伙人,全栈领域新星创作者,阿里云专家博主,华为云云 享专家博主,掘金后端评审团成员 💕前言: 最近云原生领域热火朝天,那么云原生是什么?何为云原生…

excel的frequency函数的用法和实例

目录 1.语法和用法 (1)语法:frequency(data_array,bins_array) (2)用法:用于统计指定分组区间的频率,以已裂垂直数组返回一组数据的频率分布。 2.实例 (1)分组统计各…

【WxPusher消息推送平台】js版对接发送消息教程实战案例,JavaScript版调用axios发送消息实例。保姆级教程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、WxPusher消息推送平台是什么1、注册自己的WxPusher2、扫码关注应用,获得你的UID二、使用步骤1.封装axios方法2.编写发送消息方法总结前言 WxPus…

Thymeleaf th:insert、th:replace、th:include的使用

参考资料 八、模板布局(Template Layout)Thymeleaf中th:include、th:replace、th:insert、th:fragment用法及区别Thymeleaf参考手册(八):模板布局 目录一. 前期准备二. th:insert三. th:include四. th:replace一. 前期…

【云原生-Docker】常用的 Docker Compose 配置项

🍁博客主页:👉不会压弯的小飞侠 ✨欢迎关注:👉点赞👍收藏⭐留言✒ ✨系列专栏:👉Docker学习专栏 ✨学习社区:👉不会压弯的小飞侠 ✨知足上进,不负…

Animation Rigging 如何让你的Avatar人物更具灵活性

文章目录🎈 简介🎈 基本组件🎈 应用Aim ConstraintTwo Bone IK Constraint🎈 简介 Animation Rigging是Unity官方发布的可以对Avatar人物骨骼进行约束的工具,已经有稳定的经过验证的Vertified包体,可以将其…

认知无线电网络的服务质量——蜻蜓算法的应用(Matlab代码实现)

🍒🍒🍒欢迎关注🌈🌈🌈 📝个人主页:我爱Matlab 👍点赞➕评论➕收藏 养成习惯(一键三连)🌻🌻🌻 🍌希…

【深入浅出Spring6】第七期——使用JDBC模板与代理模式

一、JDBCTemplate JdbcTemplate 是Spring提供的一个JDBC模板类,是对JDBC的封装,简化JDBC代码Spring也继承了其他持久化的框架,比如 MyBatis 等本篇我们从简单的增删改查角度介绍如何使用Spring提供的这个模板类 $ 准备工作 创建一个新的模块…

livekit 简单上手教程

什么是livekit? livekit是一个开源的webrtc项目,基于pion实现了SFU架构的go程序。 它主要有以下几个特性: 可以水平扩展的sfu架构。有完整的sdk程序接口供开发人员使用。基于JWT进行身份验证,可与大部分系统进行权限集成。内置Tur…

SpringCloud学习笔记 - 分布式配置中心 - config

1. 简介 Spring Cloud Config是用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持的。 它由服务端和客户端构成: 其中,服务端也称为分布式配置中心,是一个独立的微服务应用,用来连接配置仓库、为客户端提供支持…

32.nacos配置文件中心,使用实例(springcloud)

1.为什么使用Nacos 配置文件中心1.如果在生产情况下,修改了配置文件,项目需要下架,重新打包,重新发布。这在单机模式下影响不会太大,但如果过在一个集群项目中就会照成很大的影响,需要停掉多个项目。因此&a…

字节研发之道

前言 字节的迅速崛起缔造了一个互联网的神话,堪称火箭般的蹿升。当阿里来到第十八个年头时,员工人数还不足6万。老牌互联网腾讯现在也不过11万左右人数。但字节发展到七个年头时,人数就突破了10万。曾经入职阿里是一票难求,但现在…

基于51单片机的音乐盒播放器proteus仿真

资料编号:092 下面是相关功能视频演示: 92-基于51单片机的音乐盒播放器proteus仿真(源码仿真全套资料)功能介绍:使用51单片机,采用蜂鸣器进行音乐播放,提供了音乐代码生成器软件,可…

JavaWeb运行环境安装教程以及各个安装包

文章目录安装包下载安装教程一、JDK安装1、下载2、安装3、配置环境4、验证环境配置二、IDEA安装下载链接三、MySQL安装1、下载2、安装四、Navicat安装五、Tomcat安装1、下载2、环境配置3、修改编码4、启动六、Maven安装1、下载2、环境配置3、新建本地仓库4、修改镜像5、添加IDE…

Design Compiler工具学习笔记(1)

本人做过FPGA设计的项目,后面想转 IC 设计方向。现在从 DC 工具的使用开始学起,DC 是新思科技的EDA软件,具体的安装见下面的文章: Synopsys EDA Tools 安装问题记录https://blog.csdn.net/qq_43045275/article/details/127630241…

5G无线技术基础自学系列 | CloudRAN架构

素材来源:《5G无线网络规划与优化》 一边学习一边整理内容,并与大家分享,侵权即删,谢谢支持! 附上汇总贴:5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 5G在核心网实现云化之后,更…

2.旋转的骰子(1)

1.动画——旋转的骰子 我们想用纯html 和CSS, 做一个旋转的筛子,骰子要有立体感,每个面上要有圆点,表示点数,并且骰子可以原地旋转。 2.分析需求——庖丁解牛