【MySQL】JDBC编程

news2024/12/30 20:01:13

摄影分享

目录

数据库编程的必备条件

Java的数据库编程:JDBC

JDBC的使用步骤

1. 创建数据源DataSourece

2.连接数据库

 3.构造并执行sql语句

4.遍历结果集合

5.释放资源


数据库编程的必备条件

  • 编程语言,如Java,C、C++、Python等
  • 数据库,如Oracle,MySQL,SQL Server等
  • 数据库驱动包:不同的数据库,对应不同的编程语言提供了不同的数据库驱动包,如:MySQL提供了Java的驱动包mysql-connector-java,需要基于Java操作MySQL即需要该驱动包。同样的,要基于Java操作Oracle数据库则需要Oracle的数据库驱动包ojdbc。

在实际开发中,SQL很少是手动输入的,绝大多数SQL都是通过代码,自动执行的。就需要让其他编程语言来操作数据库服务器。

MySQL中提供了很多API(Application Programming Interface)(提供的功能/服务)。

Java的标准库,就会给我们提供一些API。这个API中有一些随机数,scanner,集合类。数据库(MySQL)也会提供一组API,通过这组API就可以操作数据库,完成各种增删改查的操作。

Java的数据库编程:JDBC

JDBC,即Java Database Connectivity,java数据库连接。是一种用于执行SQL语句的Java API,它是Java中的数据库连接规范。这个API由 java.sql.*,javax.sql.* 包中的一些类和接口组成,它为Java开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问。

JDBC的使用步骤

1. 创建数据源DataSourece

第一步,创建DataSource对象,用来描述数据库位置。

 DataSource dataSource = new MysqlDataSource();

其中DataSource为标准库中java.sql里面的一个jdbc接口,MysqlDataSource是来源于我们所下载驱动包中的一个实现DataSource接口的类。

第二步设置数据库的位置“URL”,登录数据库的用户名和密码

//设置数据库所在地址
((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/student?characterEncoding=utf8&useSSL=false");
//设置登录数据库的用户名
((MysqlDataSource)dataSource).setUser("root");
//设置登录数据库的密码
((MysqlDataSource)dataSource).setPassword("0828");
jdbc:mysql://127.0.0.1:3306/student?characterEncoding=utf8&useSSL=false 是一个URL,也叫唯一资源地址符

具体含义为:URL类型声明://数据库的地址/数据库名?字符集编码&是否加密

上面的向上/向下转型是jdbc中比较常用的写法, 让后续的代码继续使用DataSoure类型的实例, 避免MysqlDataSource扩散到代码中的各个地方, 以此方便未来更换数据库, 更换时只需要修改一处代码即可.

User是用户名, root为数据库的默认用户名.

Password是登录数据库的密码, 即安装数据时, 我们自己所设的密码.

此时我们数据源创建的操作, 只是去描述了下服务器在那里, 访问哪个数据库, 编码方式是什么, 登陆账号密码是什么等等, 但还没有真正进行连接访问, 下面进行的连接操作, 是真正开始通过网络进行通信.

2.连接数据库

第三步,与数据库服务器建立连接,创建好数据源DataSource对象后,调用该对象的getConnection()方法,获取java.sql.Connection对象,此时就可以与数据库建立连接了。

Connection connection = dataSource.getConnection();

 3.构造并执行sql语句

String sql = "select * from student2";
//将sql字符串包装成一个语句对象,表示待执行的sql的对象
PreparedStatement statement = connection.prepareStatement(sql);
//执行sql
int ret = statement.executeQuery();//返回值为受影响行数

要注意如果待执行的sql语句操作是insert, update, delete, 使用executeUpdate方法执行即可,返回值为影响数据的行数;

而如果待执行的sql语句操作是select, 则使用executeQuery方法执行,返回值是一个ResultSet结果表对象, 其中储存了查询到的的结果, 我们可以通过遍历该结果表来获取查询到的数据.

4.遍历结果集合

把resultSet想象成一个表格,同时表格这里有个光标。初始情况下光标指向表最上面。每次调用next,光标往下一行走,当光标指向某一行的时候,就可以通过getXXX来获取到当前这行里的数据。

while(resultSet.next()){
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            System.out.println("id = "+ id +",name = "+ name);
        }

5.释放资源

第五步, 释放资源, 我们执行完毕sql语句后需要及时地将资源释放, 在JDBC编程中, 最常见需要释放的类或接口有三个, 分别是Connection, PreparedStatement, ResultSet, 要注意的是释放资源的顺序和开启资源的的顺序是相反的, 也就是先开启的要后释放。

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

下面是完整的jdbc查找代码:

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 JDBCInsertDemo {
    public static void main(String[] args) throws SQLException {
        //1.创建并初始化数据源
        DataSource dataSource = new MysqlDataSource();
        //设置数据库所在地址
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/student?characterEncoding=utf8&useSSL=false");
       //设置登录数据库的用户名
        ((MysqlDataSource)dataSource).setUser("root");
        //设置登录数据库的密码
        ((MysqlDataSource)dataSource).setPassword("0828");
        //2.建立连接
        Connection connection = dataSource.getConnection();
        //3.构造SQL
        String sql = "select * from student2";
        PreparedStatement statement = connection.prepareStatement(sql);
        //4.执行SQL
        ResultSet resultSet = statement.executeQuery();
        //5.遍历结果集合
        while(resultSet.next()){
            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/422067.html

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

相关文章

谁说35岁是程序员的中年危机?那是他还不知道这些新路子

文章目录一、年纪大能不能进大厂?二、为什么说35是危机?1.精力衰退2.脑力衰退3.知识/技术迭代三、年龄大的程序员有哪些出路?1.技术管理2.创业3.技术外包4.做老师5.做自媒体6.写书四、结语我自己今年已有44了,从2021年开始就已经不…

详解自动化测试之 Selenium 与 Junit

文章目录1. 什么是自动化2. 自动化测试的分类3. selenium(web 自动化测试工具)4. 一个简单的自动化例子5. selenium 常用方法5.1 查找页面元素 findElement ()5.2 元素的定位 By 类5.3 xpath 路径语言6. 常见的元素操作6.1 输入文本 sendKeys6.2 点击 cl…

什么是Android FrameWork,请你介绍一下?

Framework是什么 Framework的中文意思是“框架”,在软件开发中通常指开发框架,在一个系统中处于内核层之上,为顶层应用提供接口,被设计用来帮助开发者快速开发顶层应用,而不必关心系统内核运行机制,通常Fr…

zabbix报警配置

一、前言 这里用的是zabbix6.0LTS版本,这里记录自定义配置报警,因为邮件报警基本已经很少有人使用了,大部分是,短信、飞书、钉钉等等工具,所有需要定制化报警 二、定义脚本存放路径 cd /usr/local/zabbix/etc[rootn…

MODBUS 转 EtherNet/IP 网关连接希望森兰变频器案例

Modbus转Ethernet/Ip网关,用于将多个 MODBUS 从站设备接入 ETHERNET/IP 主站网络,实现 MODBUS 转 ETHERNET/IP 功能。配上 MODBUS 转 EtherNet 网关专用的 EDS 文件,实现 ETHERNET/IP 主 站对 MODBUS 从站设备的控制。 需要设备 .24v电源模块 罗克韦尔PL…

【城市污水处理过程中典型异常工况智能识别】(基于迁移学习,拓扑结构卷积神经网络的污水异常工况识别)

基于迁移学习拓扑结构卷积神经网络的污水异常工况识别 **摘 要:针对城市污水处理过程的异常工况识别问题,本文提出了基于图像纹理性分析的工况识别方法。首先总结了几种典型的异常工况的特点,并且分析了卷积神经网络特征提取异常工况的几种纹…

月薪20k的性能测试必备技能:发现性能瓶颈掌握性能调优

背景 当下云计算、大数据盛行的背景下,大并发和大吞吐量的需求已经是摆在企业面前的问题了,其中网络的性能要求尤为关键,除了软件本身需要考虑到性能方面的要求,一些硬件上面的优化也是必不可少的。 作为一名测试工作者&#xf…

ubuntu将主文件夹的文件夹中文名称改为英文

许多人在使用ubuntu时使用汉语的,但是主文件夹下的文件夹也随之变成了中文,导致命令行下输入文件夹名称非常的困难,那么怎么简单的把名字改成英文的呢?(也不知道哪个版本开始不出现下面这个图示提示了) 方法…

Vue2-黑马(十二)

目录: (1)vue2-登录-store-user.js (2)实战-登录-store-user.js (3)登录-实战--permission.js-获取角色 (1)vue2-登录-store-user.js 我们进入store中的actions查看它…

MySQL - 基于SSL安全连接的主从复制

目录 🍁主从复制的原理 🍁部署master 🍁部署slave 🍁测试SSL主从复制 🦐博客主页:大虾好吃吗的博客 🦐MySQL专栏:MySQL专栏地址 生产环境中一台mysql主机存在单点故障,所…

c/c++:二维数组,数组的行数和列数求法sizeof,数组初始化不同形式,5个学生,3门功课,求学生总成绩和功课总成绩

c/c:二维数组,数组的行数和列数求法sizeof,数组初始化不同形式,5个学生,3门功课,求学生总成绩和功课总成绩 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人&#x…

【从零开始学Skynet】实战篇《球球大作战》(十一):测试登录流程

终于可以测试work协议了。只要走得通,就代表完成了整套底层框架。 1、主服务修改 我们重新修改主服务,让它智能一些,根据配置文件自动开启服务,无须手动设置。如下代码所示: local skynet require "skynet"…

Linux应用编程(信号基础)

一、基本概念 信号是事件发生时对进程的通知机制,也可以把它称为软件中断。信号与硬件中断的相似之处在于能够打断程序当前执行的正常流程,其实是在软件层次上对中断机制的一种模拟。大多数情况下,是无法预测信号达到的准确时间,…

录屏剪辑软件哪个好 录屏后怎么剪辑视频

​ 现在很多人都会通过录屏的方式来传播分享内容,但是很多录屏软件的操作不太方便,给录制带来困难。再加上很多视频在录制后需要剪辑,加大了视频制作的工作量,所以找到一款好用的录屏剪辑软件很重要。今天就来分享一下录屏剪辑软件…

从0-1优化C++类对象创建资源消耗 (附源码)

C++常用功能源码系列 文章目录 C++常用功能源码系列前言一、C++几种常用的函数是什么?二、优化过程1.源代码2.源代码总结前言 本文是C/C++常用功能代码封装专栏的导航贴。部分来源于实战项目中的部分功能提炼,希望能够达到你在自己的项目中拿来就用的效果,这样更好的服务于…

Spring MVC 配置(10)

目录 简介: 传统方式: 纯注解方式 1. Tomcat加载Servlet 2. 参数分析 3. 调用onStartup方法 注解方法替换配置的 xml 文件 简介: Spring MVC是Spring的一个子模块,也是我分析的Spring源码的最后一个模块。下面看一下Spring …

2023年安全岗面试题及经验分享

如果你正在面试安全岗,那么恭喜你及时看到了这篇文章~ 写在前面 本篇为大家整理了上百道网络安全面试题,主要方向有 网络基础、渗透测试、安全工具 等,其中还包括 HVV面试、CISP备考 等,希望在求职期可以帮到大家​!…

WAF绕过信息收集

WAF绕过-信息收集之反爬虫延时代理池技术 思维导图 WAF拦截会出现在安全测试的各个层面,掌握各个层面的分析和绕过技术最为关键。 webpathbrute工具 一个Web目录扫描暴力探测工具 WebPathBrute-Web路径暴力探测工具下载:https://github.com/7kbstorm…

QN88封装国产FPGA

QN88GW1N-9管脚名GW2A-18管脚名AL3S10EG4S201VCCVCCIO_L1_1VCC_12VSSVSSIO_L2_1IO_L1_13IOL2AVCCO7IO_L3_1,MOSI,D1IO_L2_14IOL5A/JTAGSEL_N/LPLL_T_inIOL7A/LPLL1_T_inIO_L4_1IO_L1N_15IOL11A/TMSIOR25B/TMSIO_L5_1,SPICSNIO_L1P_16IOL11B/TCKIOR26A/TCKINITNGND7IOL12B/TDIIO…

爬虫日常练习-selenium登录12306

文章目录前言页面分析代码设计前言 hello,好兄弟们。经过前面几篇文章后,想必小伙伴们对于简单的网页文本爬取,图片爬取类的内容已经熟练掌握了。今天我们开始练习一个新的内容:selenium。有关这一块的基础知识网上太多了&#x…