Java学习记录之JDBC
JDBC
JDBC 是 Java Database Connectivity 的缩写,是允许Java 程序访问并操作关系型数据库数据的一套 应用程序接口。本身就是一种规范,它提供的接口有一套完整的,可移植的访问底层数据库的程序。
JDBC 的架构
JDBC API支持两层和三层处理模型进行数据库访问,但在一般的JDBC体系结构由两层组成:
-
JDBC API: 提供了应用程序对JDBC的管理连接。
-
JDBC Driver API: 支持JDBC管理到驱动器连接。
JDBC API的使用驱动程序管理器和数据库特定的驱动程序提供透明的连接到异构数据库。JDBC驱动程序管理器可确保正确的驱动程序来访问每个数据源。
JDBC常用类和接口
类或接口 | 说明 |
---|---|
DriverManager | 这个类管理数据库驱动程序的列表。确定内容是否符合从Java应用程序使用的通信子协议正确的数据库驱动程序的连接请求。识别JDBC在一定子协议的第一个驱动器将被用来建立数据库连接 |
Driver | 此接口处理与数据库服务器通信。很少直接使用驱动程序(Driver)对象,一般使用DriverManager 中的对象,它用于管理此类型的对象。它也抽象与驱动程序对象工作相关的详细信息 |
Connection | 此接口与接触数据库的所有方法。连接对象表示通信上下文,即与数据库中的所有的通信是通过此唯一的连接对象 |
Statement / PreparedStatement | 创建的对象的SQL语句提交到数据库。一些派生的接口接受除执行存储过程的参数 |
ResultSet | 这些对象保存从数据库后,执行使用Statement 对象的SQL查询中检索数据。它作为一个迭代器,可以通过移动它来检索下一个数据 |
SQLException | 用于处理发生在数据库应用程序中的任何错误 |
常用的JDBC驱动程序名和连接URL
URL的写法为:
jdbc:数据库名称(如mysql)😕/数据库地址:3306/databaseName?参数名:参数值
常用数据库实例:
数据库 | 驱动名称 | URL格式 |
---|---|---|
MySQL 5.x | com.mysql.jdbc.Driver | jdbc:mysql://hostname/databaseName |
Oracle | oracle.jdbc.driver.OracleDriver | jdbc:oracle:thin:@hostname:portNumber:databaseName |
PostgreSQL | org.postgresql.Driver | jdbc:postgresql://hostname:port/dbname |
注意,mysql版本8以上的驱动名为:com.mysql.cj.jdbc.Driver
Connection
Jdbc程序中的Connection,它用于代表数据库的链接,Collection是数据库编程中最重要的一个对象,客户端与数据库所有交互都是通过connection对象完成的,创建方法为:
Connection conn = DriverManager.getConnection(url,username,password);
这个对象的常用方法:
方法 | 描述 |
---|---|
createStatement() | 创建向数据库发送sql的statement对象。 |
prepareStatement(sql) | 创建向数据库发送预编译sql的PrepareSatement对象。 |
prepareCall(sql) | 创建执行存储过程的callableStatement对象。 |
setAutoCommit(boolean autoCommit) | 设置事务是否自动提交。 |
commit() | 在链接上提交事务。 |
rollback() | 在此链接上回滚事务。 |
示例: |
public class DBUtil {private final static String DRIVERCLASS = "com.mysql.cj.jdbc.Driver";private final String userName = "root";private final String passwd = "152887";private final String url = "jdbc:mysql://127.0.0.1:3306/rbas?serverTimeZone=Asia/ShangHai";/*** 加载驱动*/static {try {Class.forName(DRIVERCLASS);} catch (ClassNotFoundException e) {throw new RuntimeException(e);}}public DBUtil() {}/*** 创建数据库连接* @return connection 链接*/Connection connection = null;try {connection = DriverManager.getConnection(url,userName,passwd);} catch (SQLException e) {throw new RuntimeException(e);}}
Statement 和 PreperedStatement
Statement
Jdbc程序中的Statement对象用于向数据库发送SQL语句,创建方法为:
Statement st = conn.createStatement();
Statement对象常用方法:
方法 | 含义 |
---|---|
executeQuery(String sql) | 用于向数据发送查询语句。 |
executeUpdate(String sql) | 用于向数据库发送insert、update或delete语句 |
execute(String sql) | 用于向数据库发送任意sql语句 |
addBatch(String sql) | 把多条sql语句放到一个批处理中。 |
executeBatch() | 向数据库发送一批sql语句执行。 |
示例:
Statement st = null;
//获取用于向数据库发送sql语句的statement
st = conn.createStatement();
//向数据库发sql
String sql = "select id,name,password,email,birthday from users";
st.executeQuery(sql);
PreperedStatement
PreperedStatement是Statement的子接口,它的实例对象可以通过调用:
PreperedStatement st = conn.preparedStatement();
实例:
PreparedStatement preparedStatement = null;
String sql = "select * from users where name=? and password=?";// 获取用于向数据库发送sql语句的Preperedstatement
preparedStatement = conn.preparedStatement(sql);//在此次传入,进行预编译
preparedStatement.setString(1, username);
preparedStatement.setString(2, password);
// 向数据库发sql
preparedStatement.executeQuery();//在这里不需要传入sql
ResultSet
ResultSet用于代表 SQL 语句的执行结果。Resultset 封装执行结果时,采用的类似于表格的方式,ResultSet 对象维护了一个指向表格数据行的游标,初始的时候,游标在第一行之前,调用 ResultSet.next() 方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。
获取行相关方法
ResultSet提供了对结果集进行滚动的方法:
- next():移动到下一行
- Previous():移动到前一行
- absolute(int row):移动到指定行
- beforeFirst():移动resultSet的最前面。
- afterLast() :移动到resultSet的最后面。
获取值相关方法
ResultSet既然用于封装执行结果的,所以该对象提供的都是用于获取数据的get方法:
-
获取任意类型的数据
- getObject(int index)
- getObject(string columnName)
-
获取指定类型的数据
- getString(int index)
- getString(String columnName)
常用数据类型转换对比表
SQL类型 | Jdbc对应方法 | 返回类型 |
---|---|---|
bit(1),bit(n) | getBoolean,getBytes() | Boolean,byte[] |
tinyint | getByte() | Byte |
smallint | getShort() | Short |
int | getInt | Int |
bigint | getLong() | Long |
char,varchar,longvarchar | getString | String |
text(clob) blob | getClob(),getblob() | Clob,blob |
date | getDate() | java.sql.Date |
time | getTime() | java.sql.Time |
timestamp | getTimestamp | java.sql.Timestamp |
释放资源
Jdbc程序运行完后,切记要释放程序在运行过程中,创建的那些与数据库进行交互的对象,这些对象通常是ResultSet, Statement和Connection对象。
注意:为确保资源释放代码能运行,资源释放代码也一定要放在finally语句中。
示例:
public void close(Connection connection , PreparedStatement preparedStatement , ResultSet resultSet){try {if (resultSet == null) {resultSet.close();}if (preparedStatement == null) {preparedStatement.close();}if (connection == null) {connection.close();}} catch (SQLException e) {throw new RuntimeException(e);}}//使用 懒 就不写在方法中了try {preparedStatement = connection.prepareStatement(sql);//填充占位符(sql语句的参数)int len = args.size();for (int i = 0; i < len; i++) {preparedStatement.setObject(i+1,args.get(i));}//执行SQL语句并返回影响的数据量count = preparedStatement.executeUpdate();} catch (SQLException e) {throw new RuntimeException(e);}finally {close(connection ,preparedStatement ,null);}
使用时需下载jdbc.jar包,完整程序示例(多表联合查询,SQL语句请自行复习)包括jar包放在资源文件中。
相关文章:
Java学习记录之JDBC
JDBC JDBC 是 Java Database Connectivity 的缩写,是允许Java 程序访问并操作关系型数据库数据的一套 应用程序接口。本身就是一种规范,它提供的接口有一套完整的,可移植的访问底层数据库的程序。 JDBC 的架构 JDBC API支持两层和三层处理…...
矩阵翻硬币
题目描述 小明先把硬币摆成了一个 n 行 m 列的矩阵。 随后,小明对每一个硬币分别进行一次 Q 操作。 对第 x 行第 y 列的硬币进行 Q 操作的定义:将所有第 ix 行,第 jy 列的硬币进行翻转。...
【C语言跬步】——指针数组和数组指针(指针进阶)
一.指针数组和数组指针的区别 1.指针数组是数组,是一种存放指针的数组; 例如: int* arr[10]; 2.数组指针是指针,是一种指向数组的指针,存放的是数组的地址; 例如: int arr[5]; int (p)[5]&a…...
第十四届蓝桥杯模拟赛第三期(Python)
写在前面 包含本次模拟赛的10道题题解能过样例,应该可以AC若有错误,欢迎评论区指出本次题目除了最后两题有些难度,其余题目较为简单,我只将代码和结果给出,如果不能理解欢迎私信我,我会解答滴。start 2022…...
css-盒模型
巧妙运用margin负值盒模型和怪异盒模型(border padding 包含在内)display: block 能让textarea input 水平尺寸自适应父容器? – 不能 * {box-sizing: border-box; // bs: bb }<textarea/> 是替换元素,尺寸由内部元素决定,不受display水平影响. 当然可以直接设置宽度10…...
Linux | 调试器GDB的详细教程【纯命令行调试】
文章目录一、前言二、调试版本与发布版本1、见见gdb2、程序员与测试人员3、为什么Release不能调试但DeBug可以调试❓三、使用gdb调试代码1、指令集汇总2、命令演示⌨ 行号显示⌨ 断点设置⌨ 查看断点信息⌨ 删除断点⌨ 开启 / 禁用断点⌨ 运行 / 调试⌨ 逐过程和逐语句⌨ 打印 …...
wifi芯片大市场和个人小生活
3.3 是日也,天朗气清,惠风和畅。仰观宇宙之大,俯察论文论坛,所以游目骋怀,足以极视听之娱,信可乐也。 夫人之相与,俯仰一世,或取诸怀抱,悟言一室之内;或因寄所…...
全国计算机技术与软件专业技术资格(水平)考试 上半年2023年3月13日开始,下半年2023年8月14日开始
根据2023年计算机技术与软件专业技术资格(水平)考试工作计划,可以得知,2023年软考报名时间——上半年2023年3月13日开始,下半年2023年8月14日开始。 点击查看:人力资源社会保障部办公厅关于2023年度专业技术人员职业资格考试工作计划及有关事项的通知 点击查看:2023年度…...
大数据框架之Hadoop:MapReduce(六)Hadoop企业优化
一、MapReduce 跑的慢的原因 MapReduce程序效率的瓶颈在于两点: 1、计算机性能 CPU、内存、磁盘、网络 2、IO操作优化 数据倾斜Map和Reduce数设置不合理Map运行时间太长,导致Reduce等待过久小文件过多大量的不可分块的超大文件Spill次数过多Merge次…...
Spring File Storage的详细文档
快速入门配置pom.xml引入依赖<dependencies><!-- spring-file-storage 必须要引入 --><dependency><groupId>cn.xuyanwu</groupId><artifactId>spring-file-storage</artifactId><version>0.7.0</version></dependen…...
Java软件开发好学吗?学完好找工作吗?
互联网高速发展的当下,Java语言无处不在:手机APP、Java游戏、电脑应用,都有它的身影。作为最热门的开发语言之一,Java在编程圈的地位不可撼动。可是,听名字就很专业的样子。Java语言到底好学吗?刚入坑编程圈…...
【独家C】华为OD机试提供C语言题解 - 优秀学员统计
最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 最近更新的博客使用说明优秀…...
数据仓库、数据中台、数据湖都是什么?
相信很多人都在最近的招聘市场上看到过招聘要求里提到了数据仓库、数据中台,甚至还有数据湖,这些层出不穷的概念让人困扰。今天我就来跟大家讲一讲数据仓库、数据中台以及数据湖的概念及区别。 数据库 在了解数据仓库、数据中台以及数据湖之前ÿ…...
0099 MySQL02
1.简单查询 查询一个字段 select 字段名 from 表名; 查询多个字段,使用“,”隔开 select 字段名,字段名 from 表名; 查询所有字段 1.把每个字段都写上 select 字段名,字段名,字段名.. from 表名; 2.使用*(效率低,可读性差) select *…...
应急响应-ubuntu系统cpu飙高
这里写目录标题一、排查过程二、处置过程三、溯源总结一、排查过程 1、查看CPU使用情况 top -c2、查看异常进程的具体参数 ps -aux3、通过微步查询域名信息 4、查看异常进程的监听端口 netstat -anlpt5、查找服务器内的异常文件 ls cat run.sh cat mservice.sh6、查看脚本…...
MDK软件使用技巧
本文主要汇总MDK软件使用技巧 一、字体大小及颜色修改 第一步点击工具栏的这个小扳手图标 进去后显示如下,先设置 Encoding 为:Chinese GB2312(Simplified),然后设置 Tab size 为:4 以更好的支持简体中文,否则&…...
3 333333
全部 答对 答错 单选题 1. 一个项目来取代目前公司的文件存储系统已经获批。外部供应商提供硬件,内部团队开发软件。这个团队是自组织的,由一般的专家组成。团队建议迭代地与供应商合作,但供应商表示拒绝。因此,只有软件将被迭代…...
1528. 重新排列字符串
1528. 重新排列字符串https://leetcode.cn/problems/shuffle-string/ 难度简单52收藏分享切换为英文接收动态反馈 给你一个字符串 s 和一个 长度相同 的整数数组 indices 。 请你重新排列字符串 s ,其中第 i 个字符需要移动到 indices[i] 指示的位置。 返回重新…...
【8】【用户操作日志】操作日志SpringBootStarter
操作日志 此版本操作日志主要就是通过AOP拦截器实现的,整体主要分为AOP拦截器、自定义函数、日志上下文、扩展接口;组件提供了6个扩展点,自定义函数、日志上下文、用户信息获取,日志保存,自定义异常获取,入…...
【游戏逆向】寻路函数隐藏检测点分析
案例: 某游戏出现调用寻路函数失败异常崩溃。 基本情况分析: 在刚登陆游戏的时候直接调用寻路函数崩溃。 手动寻路以后再调用寻路不崩溃。(排除了函数编写错误的可能) 猜测可能检测方法: 有某一个标志位(全局类型)在游戏刚登陆的时候没…...
【Zabbix实战之运维篇】Zabbix监控Docker容器配置方法
【Zabbix实战之运维篇】Zabbix监控Docker容器配置方法 一、检查Zabbix监控平台状态1.检查Zabbix各组件容器状态2.奸诈Zabbix-server状态二、下载监控模板1.进入Zabbix官网下载页面2.查看下载模板三、创建一个测试容器1.创建一个测试容器2.检查测试容器状态3.访问测试web服务四、…...
这款 Python 工具进行数据分析及数据可视化真的很棒啊
前言 大家好,今天我们以全国各地区衣食住行消费数据为例,来分析2022年中国统计年鉴数据,统计全国各地人民的消费地图,看看: 哪个省份的人最能花钱 哪个省份的人最舍得花钱 哪个省份的人最抠门 全国各地区人民在吃、穿…...
visual Studio Code常用快捷键
1、向上/向下移动代码行 alt 下箭头/上箭头 2、向上/向下复制一行代码 shiftalt 下箭头/上箭头 3、选定多个相同的单词 ctrl d 4、全局替换 ctrl h 5、快速定位到某一行 ctrl g 6、放大缩小整个编辑器界面 ctrl / - 7、添加多个光标 Ctrl Alt 上箭头/下箭头…...
基础(一)十六进制转八进制
试题 基础练习 十六进制转八进制 资源限制 内存限制:512.0MB C/C时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 问题描述 给定n个十六进制正整数,输出它们对应的八进制数。输入格式 输入的第…...
梯度提升算法决策过程的逐步可视化
梯度提升算法是最常用的集成机器学习技术之一,该模型使用弱决策树序列来构建强学习器。这也是XGBoost和LightGBM模型的理论基础,所以在这篇文章中,我们将从头开始构建一个梯度增强模型并将其可视化。 梯度提升算法介绍 梯度提升算法&#x…...
Linux系统调用之文件属性操作函数
前言 如果,想要深入的学习Linux系统调用中access,chmod,chown,truncate这些有关于文件属性的操作函数,还是需要去自己阅读Linux系统中的帮助文档。 具体输入命令: man 2 access/chmod/chown/truncate 即可…...
VMware 安装 银河麒麟高级服务器操作系统 V10 + QT 开发环境搭建
下载并安装vmware 下载银河麒麟操作烯烃服务器版v10的镜像文件从官网下载,因为是x86的电脑芯片,选择AMD64版,即vmare 安装麒麟操作系统注意事项:安装位置选择自动分区网络和主机名设置打开网络,ip4就不用再设置了创建一…...
2023年疫情开放,国内程序员薪资涨了还是跌了?大数据告诉你答案
自从疫情开放,国内各个行业都开始有复苏的迹象,尤其是旅游行业更是空前暴涨,那么互联网行业如何? 有人说今年好找工作多了,有人说依然是内卷得一塌糊涂,那么今年开春以来,各个岗位的程序员工资…...
太赫兹频段耦合器设计相关经验总结
1拿到耦合器的频段后,确定中心频率和波导的宽度和高度 此处贴一张不同频段对应的波导尺寸图 需要注意的是1英寸 2.54厘米,需注意换算 具体网址:矩形波导尺寸 | 扩维 (qualwave.com) 仅列举我比较常用的太赫兹频段部分 2.以220~320GHz频段&a…...
反弹shell数据不回显带外查询pikaqiu靶场搭建
P1 文件上传下载(解决无图形化和解决数据传输) 解决无图形化: 当我们想下载一个文件时,通常是通过浏览器的一个链接直接访问网站点击下载的,但是在实际的安全测试中,我们获取的权限只是一个执行命令的窗口…...
俄华网站建设/10000个免费货源网站
<table border"1" id"river"><thead><tr><td>序号</td><td>河道名称</td><td>实时水位(m)</td><td>警戒水位(m)</td><td>较警戒水位变幅(m)</td>&l…...
上海市政府网站建设与对策分析/比较好的网络优化公司
前言 从刚接触前端开发起,跨域这个词就一直以很高的频率在身边重复出现,一直到现在,已经调试过N个跨域相关的问题了,16年时也整理过一篇相关文章,但是感觉还是差了点什么,于是现在重新梳理了一下。 个人见识…...
自己做网站一定要实名吗/seo免费推广
模型的属性与功能 上次学了 Sklearn 中的 data sets,今天来看 Model 的属性和功能。 这里以 LinearRegressor 为例,所以先导入包,数据,还有模型。 model.fit 和 model.predict 就属于 Model 的功能,用来训练模型&am…...
大连弗莱科技官方网站/windows优化大师有用吗
hihocoder-1603-提取用户名 #1603 : 提取用户名 时间限制:10000ms单点时限:1000ms内存限制:256MB描述 在现在的各种互联网应用中,在一段文字中使用字符来提起一名用户是流行的做法。 例如: "littleho submitted his code 30 times before he got …...
台州网站如何制作/国外搜索引擎大全
UVM中可以利用uvm_event_pool在整个ENV中获取event。 用法: uvm_event_pool test_pool; uvm_event event1; test_pooluvm_event_pool::get_global_pool(); event1test_pool.get("event1"); //如果event1还没有在test_pool中,get function会将其…...
广 做网站蓝光电影下载/免费发布软文广告推广平台
# qt5模式才有交互效果 %matplotlib qt5 import matplotlib.pyplot as plt import numpy as np # 解决汉字乱码 import matplotlib as mpl # 字体会按照列表依次从电脑中查找,直到找到 plt.rcParams[font.family] [Arial Unicode MS,Microsoft YaHei,SimHei,sans-serif] plt.r…...