数据库JDBC编程

2023-09-21 19:03:19

JDBC

JDBC是干啥的呢?
简单来说就是用java代码操作数据库
各种数据库,在开发的时候,就会提供一组编程接口(API)
API:Application Program Interface
简单来说就是有个软件,这个软件给你一些功能,你基于这些功能能对这个软件干啥
API往往是以 函数,类 的形式来提供的,说白了就是这个API在这个程序里面就是一组函数,只不过这组函数不是你自己实现的,而是人家那个程序提供给你的,你基于这些API,可以对这个程序进行各种操作
各种数据库一开始提供的api是不一样的,但是程序员学习多种api又很费劲,这就需要一个很有地位的大佬来调节,就是Java,java跟这些数据库开发者说你们底层的api不用动,然后你们共同封装一下你们自己的api,然后对接到我的api上,java提供的这一套api就叫JDBC
在这里插入图片描述
因此,java程序员要想进行数据库开发,就需要在你的项目中导入对应的数据库的驱动包,才能编写代码,数据库的驱动是能让JDBC认识数据库的api

怎么引入数据库驱动包呢?

这里是用的maven的中央仓库,点下面
maven中央仓库
进入之后搜索mysql
选这个
在这里插入图片描述
进去之后,有很多版本,注意这个 版本要跟你的mysql版本一致,我的是5.xx的,所以也要选5.xx的,小版本随意,大版本一致就好
如果你不知道你的mysql版本,输入select version();查看就好
在这里插入图片描述
我用的5.1.49
进去之后,点
在这里插入图片描述
什么是jar呢?
java通过.java源文件编译成.class文件,jvm来解释执行.class
每个.java都对应一个.class文件,如果代码里.java非常多,就可以把一大堆的.class文件给打包成压缩包,这个压缩包的后缀就是.jar,把jar拷贝给对方,对方就可以直接使用jvm来运行了,此处mysql驱动包的这个jar不是单独运行的jar,可以把它导入到咱们的项目,然后就可以调用其中的方法和类来进行编程了
怎么导入jar包呢?
第一步
在这里插入图片描述
创建好一个Directory之后,把你下载好的包复制粘贴到这里就好了,此处我的这个Directory就叫jar
在这里插入图片描述
注意不用你自己解压,jvm会自己识别
第二步把这个jar包标记成一个库
在这里插入图片描述
成功之后见下图
在这里插入图片描述

弄好之后,idea就能识别这个目录里的jar包,从而就可以调用里面的类来写代码了

编写JDBC代码

JDBC看起来麻烦,实际上非常简单,这里的代码刚开始接触会觉得很麻烦,设计很多新的类,新的方法马,新的概念,新的参数啥的,但是多写几次就会发现,这里的代码就是固定套路
JDBC的创建分为以下几个步骤:
1.创建并初始化一个数据源
(数据源就是描述数据库服务器在哪里,jdbc提供了一个叫DataSource的接口)
2.和数据库服务器建立连接
3.构造sql语句
4.执行sql语句
5.释放必要的资源

下面来一个插入数据库的代码块

插入

public class JDBCInsert {
    public static void main(String[] args) throws SQLException {
        //1.创建并初始化一个数据源
        //DataSource是一个接口,所以不能直接new一个DataSource
        DataSource dataSource=new MysqlDataSource();//向上转型
        //再转回来,setUrl这个方法是子类独有的,要想获取数据源,就必须用这个方法,要想获取这个方法,就要向下转型
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/xiaobai?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("021018");
        //2.和数据库建立连接
        Connection connection=dataSource.getConnection();
        //3.构造sql语句
        String sql="insert into student value(1,'张三')";
        PreparedStatement statement= connection.prepareStatement(sql);
        //4.执行sql语句
        int ret=statement.executeUpdate();
        System.out.println(ret);
        //5.释放必要资源
        statement.close();
        connection.close();
    }
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下面是进阶版

public class JDBCInsert
{
    public static void main(String[] args) throws SQLException
    {
        Scanner scanner = new Scanner(System.in);
        //1.创建并初始化一个数据源
        //DataSource是一个接口,所以不能直接new一个DataSource
        DataSource dataSource=new MysqlDataSource();//向上转型
        //再转回来,setUrl这个方法是子类独有的,要想获取数据源,就必须用这个方法,要想获取这个方法,就要向下转型
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/xiaobai?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("021018");
        //2.和数据库建立连接
        Connection connection=dataSource.getConnection();
        //3.从控制台读取用户输入的数据
        System.out.println("请输入学生姓名: ");
        String name = scanner.next();
        System.out.println("请输入学号: ");
        int id = scanner.nextInt();
        //4.构造sql语句
        String sql = "insert into student value(?, ?)";
        PreparedStatement statement= connection.prepareStatement(sql);
        statement.setInt(1, id);
        statement.setString(2, name);
        //可以把这个对象打印出来看一下效果,如果你执行这个代码出错了,你就可以把里面的这个对象打印出来,看看这里哪里有语法错误
        //System.out.println(statement);
        //5.执行sql语句
        int ret=statement.executeUpdate();
        System.out.println(ret);
        //6.释放必要资源
        statement.close();
        connection.close();
    }
}

查询

    public static void main(String[] args) throws SQLException {
        // 1. 创建并初始化数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("2222");
        // 2. 建立连接
        Connection connection = dataSource.getConnection();
        // 3. 构造 SQL
        String sql = "select * from student";
        PreparedStatement statement = connection.prepareStatement(sql);
        // 4. 执行 SQL
        ResultSet resultSet = statement.executeQuery();
        // 5. 遍历结果集合
        while (resultSet.next()) {
            // 把 resultSet 想象成一个表格. 同时表格这里有个光标, 初始情况下光标指向表最上面~~
            // 每次调用 next, 光标往下走一行~~
            // 当光标指向某一行的时候, 就可以通过 getXXX 来获取到当前这行里的数据
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            System.out.println("id = " + id + ", name = " + name);
        }
        // 6. 释放资源
        resultSet.close();
        statement.close();
        connection.close();
    }

在这里插入图片描述

更多推荐

PY32F003F18之ADC问题

普然单片机PY32F003F18的内部有一个LDO,其电压固定为1.2V。我在用官方程序测试时,若接上USB转串口的RX导线,向PC发送数据,读内部参考电压比较正确,但是,当接上USB转串口的TX导线时,发现读到内部电压变成了3.3V。见下图:断开USB转串口的TX导线,数据又恢复正常了。用万用表测试该导线电压,为5V

最新中国各地区新能源汽车产量及123个公司公共充电桩数量数据(2015-2023)

数据简介:2010年,《国务院关于加快培育和发展战略性新兴产业的决定》将新能源汽车产业列为战略性新兴产业之一。9月5日,在工信部召开的重点行业稳增长新闻发布会上,工信部装备工业一司司长王卫明表示,今年1—7月,我国新能源汽车产销超过450万辆,同比增长超过40%,其中出口63.6万辆,同比增长1.5倍,成为我国经济的一

go并发(进程、线程、协程)

背景go强大的多线程能力很强大,能并发处理大量的任务。详细案例分类主要介绍go中的进程、线程、协程这三个东西。它们的关系按照内存大小的关系依次是进程>线程>协程(一般一个协程2K)。进程进程基本上是一个正在执行的程序,它是操作系统中最小的资源分配单位。比如电脑上运行的一个软件就是一个进程。go开启进程的方式有三种,本质

MySQL(2) Explain

1、概念使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈2、使用在select语句之前增加explain关键字,MySQL会在查询上设置一个标记,执行查询会返回执行计划的信息,而不是执行这条SQL在explain语句后马上执行一条showwarnings语句,会展示mysql对上

Docker

前言:📕作者简介:热爱编程的小七,致力于C、Java、Python等多编程语言,热爱编程和长板的运动少年!📘相关专栏Java基础语法,JavaEE初阶,数据库,数据结构和算法系列等,大家有兴趣的可以看一看。😇😇😇有兴趣的话关注博主一起学习,一起进步吧!一、初识Docker1.1项目部署的问题大型项目组件较多,

Session,cookie,cache,memcache三者的详细讲解

1.SessionSession是一种在服务器端跟踪客户端状态的机制,主要用于在用户与服务器之间建立会话。当用户访问网站时,服务器会为该用户创建一个唯一的会话,并为其分配一个唯一的会话标识符(通常是一个长字符串),这个标识符存储在服务器上。之后,用户和服务器之间的所有交互都通过这个唯一的会话标识符进行标识,以保持状态的

基于时序分析及约束(1)-时序约束是什么?

首先回答标题的问题:时序约束是什么?简单来讲,时序约束就是你要告诉综合工具,你的标准是什么。综合工具应该如何根据你的标准来布线,以满足所以寄存器的时序要求。为什么要做时序约束?这里引用特权同学书中的话:“没有任何设计约束的工程,编译器工作的时候就如脱缰的野马,漫无目的且随意任性;但是,任何的设计过约束或者欠约束,都可能

打造本地紧密链接的开源社区——KCC@长沙开源读书会&openKylin爱好者沙龙圆满举办...

2023年9月9日,由开源社联合openKylin社区举办的KCC@长沙开源读书会&openKylin爱好者沙龙,在长沙圆满举办。这是KCC@长沙首次正式进入公众视野,开展开源交流活动,也是openKylin社区长沙首场线下沙龙。长沙地区及其周边的众多开源爱好者齐聚活动现场,聆听读书分享、参与开源话题讨论,实现1+1>

HAM高可用配置及故障切换

1.什么是MHAMHA(MasterHighAvailability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。MHA的出现就是解决MySQL单点的问题。MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。MHA能在故障切换的过程中最大程度上保证数据的一致性,以达到真正意义上的高可

RK3588修改eth0和eth1,对调这两个网卡设备的名称

1、以太网卡的名称一般是ethX(X可以是0,1,2,3…),一般我们的设备只有一个网卡,并且一般也不会改变它的网卡名称,所以不需要关注此问题,但是有一些设备有两三个网卡,有时候我们需要eth0是指定的硬件网卡设备,此时我们就需要人为干预一下,修改一下网卡的名称,使其满足我们的使用场景。2、在rk平台,假如你的两个网卡

蓝蓝设计提供地理信息系统GIS界面设计

北京蓝蓝设计(北京兰亭妙微科技有限公司)是一家专业的设计公司,致力于为客户打造卓越的用户体验和品牌价值。他们在地理信息系统(GIS)UI界面设计领域拥有丰富的经验和专业的设计团队。他们深入了解地理信息系统的特点和用户需求,通过用户研究和数据分析,精心设计出符合用户习惯和心理的GISUI界面。他们注重界面的布局和排版,确

热文推荐