Java的JDBC编程

 

目录

 一、概念

二、Java代码操作MySQL

1、创建一个项目

 2、引入MySQL的驱动包,作为项目的依赖

3、把 jar包 导入到项目中

4、创建一个数据源

5、建立网络上的连接

6、构造SQL语句

7、执行 sql 语句

8、释放必要的资源.关闭连接


一、概念

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

一个成熟的数据库,一般都会提供一些API,供程序员使用 

API : Application programming Interface 应用程序编程接口(广义的概念),可以理解为,你写好了一个程序,这个程序要给别人提供哪些功能,这些功能往往是通过一些 函数 / 类 这样的方式来提供的

interface 也是接口,但是特指 Java 语法中的一种特殊的语法格式(狭义的概念),Java中的interface 也是一种提供API的方式

成熟的数据库,会提供一些成熟的API 让程序员使用(API 就是一些 类 / 方法),不同的数据库,提供的API之间的差异也很大

JDBC 就是 Java 这边提出的一套操作数据库的API,让所有的数据库都能够按照一样的方式来进行操作使用,从此之后,Java程序员只需要掌握一套API,就可以操作各种数据库


二、Java代码操作MySQL

1、创建一个项目


 2、引入MySQL的驱动包,作为项目的依赖

 把驱动包下载下来,导入到项目中

可以通过下面几种方法下载:

(1) 去 oracle 官方网站

(2) 去 github

(3) 中央仓库

这里,我选择的是在中央仓库下载:https://mvnrepository.com/

在打开网页后,在搜索栏中输入MySQL进行查找

进去之后,可以看到很多版本,此处数据库驱动包的版本要和数据库服务器的版本一致(小版本不要求,大版本得一致)

然后找到自己所需要下载的版本,这里我选择的是5.1.49的版本

 选择好版本之后,点击图中圈起来的地方就可以触发下载

 下载好后,就能在文件中看到一个jar 包

.jar 是类似于 .rar 这样的压缩包,是Java定义的一种压缩格式, .jar 中主要是包含了很多的 .class文件,jar包是Java发布程序的一种典型方式


3、把 jar包 导入到项目中

首先在项目中创建一个目录

(1) 复制 jar 包到项目的目录中,这个目录手动创建一个即可

 (2)右键这个jar 包的目录

点了这里之后,idea 就知道了,这个目录里是库文件(jar 包),一般来说,点击 ok 就成功了

此时,准备工作完成了,接下来就可以编写代码了


数据源 指的是数据库服务器在哪里

4、创建一个数据源

这个代码也是一个非常常见的向上转型的操作 此时,向下转型又转回来了,目的是为了使用这个 setUrl 方法,这个方法是子类才有的

当然直接这样写也是可以的:

但是,按照上述转型的写法,本意是希望,让" MysqlDataSourse" 这个类,不要扩散到代码的其它部分(目的是想降低MySQL驱动包,和咱们项目代码之间的耦合关系,避免后续更换数据库的时候有更大的成本)

但是,实际上,我们目前的代码比较简单,也不太涉及到耦合的事情,此时转型或者直接写都是可以的

那么什么是 URL 呢?

URL 唯一资源定位符. 通常使用 URL 来描述网络上一个资源的位置

而 MySQL 的本体是服务器,也就相当于网络上的资源,因此我们使用URL是 OK 的

这里的URL具体是怎么写的不需要背,用到的时候复制粘贴即可 

设置了URL之后,还需要设置用户名和密码

 ((MysqlDataSource) dataSource).setUser("root");((MysqlDataSource) dataSource).setPassword("123456");

用户名,大家都是 root,密码是安装数据库的时候设置的密码

到这里,我们只是描述了一下数据库服务器所在的地址,还没有真正链接数据库服务器

//1、创建一个"数据源"DataSource dataSource = new MysqlDataSource();((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java_code?characterEncoding=utf8&useSSL=false");((MysqlDataSource) dataSource).setUser("root");((MysqlDataSource) dataSource).setPassword("123456");

5、建立网络上的连接

注意,这里只能使用方框中的Connection!!! 

 这时,会出现一个红色的波浪线

这个是 jdbc 中提供的受查异常

这个操作时非常容易出异常的,进行链接的时候有很多很多的原因,会导致链接不上

此时,只需要 throws 一下即可

那么这里的Connection 是什么意思呢?

一个Java程序,可以连多个数据库服务器,和每个数据库服务器进行同学都得有一个独立的连接,类似于微信里的多个通话 

//2.和数据库服务器建立连接
Connection connection = dataSource.getConnection();

6、构造SQL语句

本身我们的 SQL 语句,是String类型的

JDBC提供了 Statement 对象,让我们把String 转换成 Statement 再发给服务器执行

但是,一般会使用PreparedStatement(预处理的语句)对象来代替Statement

Statement 是把 Sql 原封不动的直接发给数据库服务器,数据库服务器自己负责解析SQL

preparedStatement 会先在客户端这边初步解析一下SQL(验证语法格式是否符合要求之类的) 

//3、构造 SQL 语句
String sql = "insert into student values(1,'张三')";
PreparedStatement statement = connection.prepareStatement(sql);

7、执行 sql 语句

executeQuery适用于查询(本质是 “读” 操作)

executeUpdate适用于插入、修改、删除(本质都是 “写” 操作)

 返回值就是这次的操作,影响到了几行

 //4、执行Sql语句
int n = statement.executeUpdate();
System.out.println("n = " + n);

8、释放必要的资源.关闭连接

创建的语句对象和连接对象,都会有一些计算机的 硬件 / 软件 上的资源

这些资源不用了就应该要及时释放

Java中,虽然有“垃圾回收”机制,自动释放资源,但是计算机的资源不仅仅是内存资源,其它的资源就需要手动释放

一般是会提供 close 方法,专门释放资源的方法

//5、释放必要的资源.关闭连接
statement.close();
connection.close();

 释放资源的时候,要注意关闭顺序

先创建的对象后关闭,后创建的对象先关闭

此时,就完成了数据库的插入数据

但是还有一个问题,当前我们插入的数据内容,是写死的

我们更希望插入的数据能够在运行时动态的变化

 这种写法,虽然也可以达成效果,但是并不建议这么些,因为:

1、这个写法看起来比较混乱

2、这种拼接字符串的方式并不安全

PreparedStatement 就给我们提供了 基于占位符 的写法,更优雅、更安全的解决上述问题

这里的 ? 是一个占位符,占据一个位置,后续PreparedStatement 会把变量的数值,带入到 ? 中

这里的 数字,代表第几个问号

当前要设置的数据类型是啥,使用的方法名字就是啥

这样的写法,代码上更加简单明了,执行过程中,setXXX 内部也会进行严格的校验,避免出现SQL注入攻击的情况

此时,也能插入成功 

删除操作和修改操作,与上面的操作,几乎完全一样,只不过构造的SQL不一样

插入、删除、修改,返回值都是一个简单的整数

但是对于查询来说,返回值是一个“临时表”

想象表格中有一个“光标” 

这个光标初始情况下,指向第一行记录的前一个位置

每次调用 next ,就会让光标往下走一行

如果光标往下走成功了,就会返回 true ,进入循环

在循环体中,就可以取出这一行的每一列

取完这一行后,下次又要调用next

当光标取完了最后一行,再次指向 next ,此时就会返回 false,循环结束

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 JDBCDemo2 {public static void main(String[] args) throws SQLException {DataSource dataSource = new MysqlDataSource();((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java?characterEncoding=utf8&useSSL=false");((MysqlDataSource) dataSource).setUser("root");((MysqlDataSource) dataSource).setPassword("123456");Connection connection = dataSource.getConnection();String sql = "select *from student";PreparedStatement statement = connection.prepareStatement(sql);//执行查询结果,要使用 executeQuery.返回值是一个ResultSet类型的对象,表示了一个"表格"ResultSet resultSet = statement.executeQuery();//遍历结果集合while(resultSet.next()){//获取到这一行的学号列int id = resultSet.getInt("id");//获取这一行的姓名列String name = resultSet.getString("name");System.out.println("id: "+ id + ",name: " + name);}//释放资源resultSet.close();statement.close();connection.close();}
}

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

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

相关文章

【Jquery大事件时间线】jquery实现大事件时间线(时间轴)的滚动切换效果『附完整源码』

文章目录 写在前面涉及知识点页面效果1、搭建框架1.1 模块搭建1.2 内容填充1.3 时间线的切换 2、完整代码2.1 html源码2.2 CSS源码2.3 js源码 3、完整源码包下载3.1百度网盘3.2 123云盘3.3邮箱留言 总结 写在前面 其实这种大事件记录的web页面也是我们常见的,尤其是…

Go语言性能优化建议与pprof性能调优详解——结合博客项目实战

文章目录 性能优化建议Benchmark的使用slice优化预分配内存大内存未释放 map优化字符串处理优化结构体优化atomic包小结 pprof性能调优采集性能数据服务型应用go tool pprof命令项目调优分析修改main.go安装go-wrk命令行交互界面图形化火焰图 性能优化建议 简介: …

使用redis-cli操作redis

redis-cli是原生redis自带的命令行工具,可以帮助我们通过简单的命令连接redis服务,并进行数据管理,即redis键(key)和redis数据结构的管理。 关于如何进入redis-cli命令行客户端,请查看文章:Redi…

CMake:为Eigen库使能向量化

CMake:为Eigen库使能向量化 导言构建Eigen项目结构CMakeLists.txt相关源码 导言 本篇开始将涉及检测外部库相关的内容,期间会穿插着一些其他的内容。为了能够使得系统在系统中运行Eigen库,我们首先需要在系统中配置好Eigen库。然后介绍与Eigen库相关的C…

【Android】APP启动优化学习笔记

启动优化目的 用户体验: 应用的启动速度直接影响用户体验。用户希望应用能够快速启动并迅速响应他们的操作。如果应用启动较慢,用户可能会感到不满,并且有可能选择卸载或切换到竞争对手的应用。通过启动优化,可以提高应用的启动…

132个心理性格趣味测试ACCESS\EXCEL数据库

今天又遇到了一个心理测试的数据库,这个数据库在表结构的设置上很直观,属于那种好的数据库结构,共分三个表,一个是测试项目描述表、一个是测试题选项得分表、一个是根据得分区间解析表,表与表之间通过“question_id”字…

【Python】pyqt6入门到入土系列,非常详细...

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 一、什么是PyQt6? 简单介绍一下PyQt6 1、基础简介 PyQt6 Digia 公司的 Qt 程序的 Python 中间件。Qt库是最强大的GUI库之一。 PyQt6的官网:www.riverbankcomputing.co.uk/news。 PyQt6是由Riverbank Co…

MTK system_server 卡死导致手机重启案例分析

和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一、MTK AEE Log分析工具二、AEE Log分析流程三、system_server 卡死案例分析及解决 本文主要针对 Exception Type: system_server_watchdog , system_…

力扣SQL之路:窗口函数应用

文章目录 1.引言2.力扣SQL题目3. 解题策略4.代码实现5.总结 1.引言 窗口函数是 SQL 中一种强大的分析函数,它可以在结果集中创建一个窗口,并对窗口内的数据进行计算和分析。在力扣(LeetCode)的 SQL 题目中,窗口函数经…

Linux进程概念(一)

文章目录 Linux进程概念查看进程杀死进程进程标识符 手动创建进程的方式fork函数创建进程 进程状态运行态阻塞态和挂起 Linux进程概念 前文我们了解了,进程的基本概念,在课本上被描述为,正在执行的程序,在linux内核上&#xff0c…

如何在 Ubuntu 22.04 下编译 StoneDB for MySQL 8.0 | StoneDB 使用教程 #1

作者:双飞(花名:小鱼) 杭州电子科技大学在读硕士 StoneDB 内核研发实习生 ❝ 大家好,我是 StoneDB 的实习生小鱼,目前正在做 StoneDB 8.0 内核升级相关的一些事情。刚开始接触数据库开发没多久&#xff0c…

解码“平台工程”,VMware 有备而来

随着全球数字化进程加快,企业使用前沿技术加快商业创新,以提高竞争力。其中如何加快开发效率,为客户创造更多价值成为新的关注焦点。 继DevOps后,“平台工程”(Platform Engineering) 一词引发热议。平台工…

MyBatis的使用方法

文章目录 一、MyBatis的创建准备工作 二、MyBatis的使用1.项目分层2.业务代码1&#xff09;使用XML的方法2&#xff09;直接使用注解 总结 一、MyBatis的创建 准备工作 1.添加依赖 旧项目 方法一&#xff1a;在pom.xml中添加MyBatis和MySQL Diver依赖 <!-- 添加 MyBati…

信息技术会考操作题excel,信息技术会考操作题目

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;信息技术会考操作题python计算题&#xff0c;信息技术会考操作题没有保存&#xff0c;今天让我们一起来看看吧&#xff01; 1. 数据分析题&#xff08;17分&#xff09;&#xff1a; 流行病学通常关注单日治愈患者例数增…

网络知识介绍

一、TCP 传输控制协议&#xff0c;Transmission Control Protocol。 面向广域网的通信协议&#xff0c;跨域多个网络通信时&#xff0c;为两个通信端点之间提供一条具有如下特点的通信方式&#xff1a; 基于流、面向连接、可靠通信方式、网络状况不佳时尽量降低系统由于重传带…

初识Linux

今天简单了解了关于操作系统的发展史&#xff0c;学习了在Linux中如何远程连接云服务器的指令&#xff0c;以及在Linux中创建多个用户的指令。 1. ssh root 服务器远程地址 作用是用来连接XShell与云服务器&#xff0c;输入该指令后会自动生成输入密码的窗口&#xff0c;如…

【产品经理】高阶产品如何处理需求?(3方法论+2案例+1清单)

不管你是萌新小白&#xff0c;还是工作了几年的“老油条”&#xff0c;需求一直是产品经理工作的重点。只不过&#xff0c;不同年限的产品经理需要面对的需求大有不同&#xff0c;对能力的要求更高。 不知你是否遇过以下问题&#xff1f; 你接手一个项目后&#xff0c;不知从何…

DID以及社交网络中的ZKP

1. 引言 本文关键术语为&#xff1a; Decentralized Identity (DID&#xff0c;去中心化身份) or self-sovereign identity (SSI&#xff0c;自治身份) &#xff1a;是一个基于开放标准的框架&#xff0c;使用自主、独立的标识符和可验证证书&#xff0c;实现可信的数据交换。…

虹科案例|如何分析设备故障时间和次数,打破生产瓶颈?

虹科设备绩效管理系统 保障生产设备的稳定性和可靠性 生产设备的稳定性和可靠性是保证企业正常生产的重要条件之一&#xff0c;设备故障的频发严重影响企业的正常生产&#xff0c;那么如何分析设备故障时间和次数&#xff0c;查找设备故障原因&#xff0c;协助企业打破生产瓶…

树莓派通过天线+gps获取经纬度并调用高德地图api在地图上标点

完整项目为《基于机器视觉的行人和路面缺陷检测及其边缘设备部署》 完整功能视频演示地址&#xff1a;本科最后的课设&#xff1a;“车载系统的辅助系统——基于机器视觉的行人和路面缺陷检测”完结撒花*罒▽罒*_哔哩哔哩_bilibili 该博客介绍的功能为&#xff1a; 1&#xff1…