数据库JDBC编程

news2025/2/22 18:37:11

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();
    }

在这里插入图片描述

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

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

相关文章

Arduino程序设计(十三)触摸按键实验(TTP223)

触摸按键实验 前言一、TTP223触摸按键模块二、触摸按键控制LED二、触摸按键状态检测 前言 本文介绍触摸按键控制LED的原理及实验,主要内容有:1、介绍TTP223触摸按键模块;2、触摸按键控制LED;3、触摸按键状态检测。 一、TTP223触摸…

竞赛选题 基于深度学习的植物识别算法 - cnn opencv python

文章目录 0 前言1 课题背景2 具体实现3 数据收集和处理3 MobileNetV2网络4 损失函数softmax 交叉熵4.1 softmax函数4.2 交叉熵损失函数 5 优化器SGD6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习的植物识别算法 ** …

腾讯云cvm云硬盘扩容

过去一直记得腾讯云的系统盘扩容,关于系统盘的扩容直接点资源调整-云硬盘扩容 系统盘扩容后就可以直接使用的? 但是现在操作了发现vda 200G 但是现在vda1不能自动扩容了? 腾讯云cvm云硬盘扩容 先看一眼官方文档吧:在线扩展系统盘分区及文…

全套办公软件Office 2019 mac专业版功能

Microsoft office 2019 Beta for Mac 是一款办公软件套装,它包含常用的办公应用程序,如 Word、Excel、PowerPoint 和 Outlook 等。office 2019 Beta 版本是一个测试版本,旨在让用户提前体验下一个版本的 office 套件,以便用户可以…

能进大厂?阿里云ACE认证到底有多香!

中国云计算火爆的当下,阿里云一枝独秀,市场占有率比排名后5名的总和还要多。在全球的云计算市场上,阿里云也是排名第三,超过谷歌云。这足以说明了市场对于阿里云产品解决方案的需求之大。 而阿里云云计算架构师ACE认证是针对云架构…

记录一次DLL分析实战

记录一次DLL分析实战 1.VT查看分析报告2.判断文件是否加壳3.查看导入函数4.查看是否有任何其他文件或基于主机的迹象5.使用工具IDA Pro进行字符串分析 1.VT查看分析报告 virustotal 全绿,没有报毒: 可以看到这个dll是32位的: 下面可以看它调…

如何在SOLIDWORKS PDM中快速导出BOM表

在SOLIDWORKS PDM中,选择装配体后,下方就可以直接看到该装配体的材料明细表,并直接导出CSV文件,在材料明细表里我们可以去定义我们要输出哪些属性信息,但是不能定义BOM表格的表头样式,所以导出材料明细表之…

Java中this关键字的常见用法

一、this 使用方法 总结下来就是,在Java中,this是一个关键字,用于引用当前对象的引用,可以用于引用对象的实例变量和方法。主要用于以下几个方面: 1、在构造函数中使用this关键字来调用同一个类中的其他构造函数。这种…

【c语言】贪吃蛇

当我们不想学习新知识的时候,并且特别无聊,就会突然先看看别人怎么写游戏的,今天给大家分享的是贪吃蛇,所需要的知识有结构体,枚举,以及easy-x图形库的一些基本函数就完全够用了,本来我想插入游…

7.1 实现进程内存块枚举

在Windows操作系统中,每个进程的虚拟地址空间都被划分为若干内存块,每个内存块都具有一些属性,如内存大小、保护模式、类型等。这些属性可以通过VirtualQueryEx函数查询得到。 该函数可用于查询进程虚拟地址空间中的内存信息的函数。它的作用…

【C++】STL之适配器---用deque实现栈和队列

目录 前言 一、deque 1、deque 的原理介绍 2、deque 的底层结构 3、deque 的迭代器 4、deque 的优缺点 4.1、优点 4.2、缺点 二、stack 的介绍和使用 1、stack 的介绍 2、stack 的使用 3、stack 的模拟实现 三、queue 的介绍和使用 1、queue 的介绍 2、queue 的使用 3、qu…

​专业图像处理软件 Photoshop 2023 mac版本更新(ps2023中文)

​Photoshop 2023 mac是一款图像编辑和图形设计软件,广泛应用于专业人士和爱好者。它提供了许多工具和功能,用于创建、编辑和增强数字图像,包括图层、蒙版、滤镜和各种选择工具。Photoshop还支持多种文件格式,包括psD、JPEG、PNG和…

APP开发者如何运用积分墙广告,提升APP应用下载和用户留存?

“积分墙”移动广告通过在应用内展示各种积分任务,鼓励用户完成任务以获得积分奖励,从而增加应用的曝光度和下载量。 一、什么是积分墙? 积分墙是一种第三方移动广告平台。开发者可以在这类平台上发布任务(如下载安装 App、注册…

JavaScript - canvas - 放大镜

效果 示例 项目结构&#xff1a; 源码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>放大镜</title><style type"text/css">div {width: 200px;height: 200px;display: inline-bl…

Java集成支付宝沙箱支付,详细教程(SpringBoot完整版)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、开发前准备&#xff1f;二、使用步骤1、引入库2、配置在 application.yml 里面进行配置&#xff1a;3、alipay的java配置&#xff1a;AplipayConfig.java4、支付…

不要再滥用可选链运算符(?.)啦!

可选链运算符(?.)&#xff0c;大家都很熟悉了&#xff0c;直接看个例子&#xff1a; const result obj?.a?.b?.c?.d 很简单例子&#xff0c;上面代码?前面的属性如果是空值&#xff08;null或undefined&#xff09;&#xff0c;则result值是undefined&#xff0c;反之…

企业架构LNMP学习笔记58

开始学习Tomcat&#xff1a; 学习目标和内容&#xff1a; 1&#xff09;能够描述Tomcat的使用场景&#xff1b; 2&#xff09;能够简单描述Tomcat的工作原理&#xff1b; 3&#xff09;能够实现部署安装Tomcat&#xff1b; 4&#xff09;能够实现和配置Tomcat的Server服务…

如何判断自己的服务器是不是中了勒索病毒,勒索病毒解密数据恢复

勒索病毒日益横行&#xff0c;给企业的生产经营和个人数据造成了极大的影响。但是对单一的企业和个人而言&#xff0c;遭受勒索病毒攻击毕竟是低频率事件&#xff0c;这也导致很多人中招之后&#xff0c;无法判断出具体的问题&#xff0c;进而没有及时采取应对措施&#xff0c;…

【谢希尔 计算机网络】第3章 数据链路层

数据链路层 数据链路层的地位 网络中的主机、路由器等都必须实现数据链路层局域网中的主机、交换机等都必须实现数据链路层不同链路层可能采用不同的数据链路层协议 数据链路层信道类型 点对点信道 使用一对一的点对点通信方式广播通信 必须使用专用的共享系电脑协议来协调这些…

【Java 基础篇】Java多线程实现文件上传详解

文件上传是Web应用程序中常见的功能之一&#xff0c;用户可以通过网页将文件从本地计算机上传到服务器。在处理大文件或多用户并发上传的情况下&#xff0c;为了提高性能和用户体验&#xff0c;常常使用多线程来实现文件上传功能。本文将详细介绍如何使用Java多线程实现文件上传…