数据库实践LAB大纲 05 JDBC 连接
概述
Java DataBase Connectivity,Java 数据库连接
执行SQL的Java API 为多种关系型数据提供统一访问
FUNCTION
- 建立与数据库的连接
- 向数据库发送 SQL 语句
- 处理从数据库返回的结果
四种常见JDBC驱动程序
- JDBC-ODBC Bridge driver
- native-API, partly Java driver
- JDBC-Net pure Java driver
- native protocol, pure Java driver
JDBC连接过程
底层API,不能直接访问数据库
依赖于相应数据库厂商提供的JDBC驱动程序 —— 驱动程序是连接JDBC API与具体数据库之间的桥梁
JDBC连接MySQL数据库步骤:
(1)加载JDBC驱动程序;
(2)创建数据库连接;
(3)创建Statement对象;
(4)执行SQL语句;
(5)处理执行SQL语句的返回结果;
(6)关闭连接。
- 加载JDBC驱动程序
// 加载驱动程序方法 用java.lang.Class类的静态方法Class.forName("com.mysql.cj.jdbc.Driver");
if 加载成功
then 系统将加载的驱动程序注册到DriverManager类中
else 抛出ClassNotFoundException异常
try {Class.forName ("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException ex) {System.out.println("加载数据库驱动时抛出异常!");ex.printStackTrace();
}
2. 创建数据库连接
Connection接口代表与数据库的连接,只有建立了连接,用户程序才能操作数据库
一个应用程序可与单个数据库有一个或多个连接,也可以与多个数据库有连接
调用DriverManager类的getConnection()方法
Connection conn = DriverManager.getConnection(String url, String userName, String password);// 接数据库的路径、用户名及密码
返回值类型为java.sql.Connection。
失败, 抛出 SQLException异常
连接BookStore数据库,则连接数据库路径的写法如下
jdbc:mysql://localhost:3306/bookstore
也可以采用带数据库数据编码格式的方式
jdbc:mysql://localhost:3306/bookstore?useUnicode=true&chara cterEncoding=gb2312
try {String url ="jdbc:mysql://localhost:3306/bookstore";String user="root"; //访问数据库的用户名String password="123456"; //访问数据库的密码Connection conn= DriverManager.getConnection(url,user,password); System.out.println("连接数据库成功!");
} catch (SQLException ex) {System.out.println("连接数据库失败!");ex.printStackTrace();
}
3. 创建Statement对象 执行SQL语句,必须创建一个Statement对象
Connection接口的createStatement()方法可以创建Statement对象,用来执行静态的SQL语句
prepareStatement(String
sql)方法可以创建PreparedStatement对象用来执行动态的SQL语句
Statement stmt=conn.createStatement();
String sql = "select * from users where u_id>? and u_sex=?";
PreparedStatement pstmt = conn.prepareStatement(sql);
4. 执行SQL语句
¨Statement对象的常用方法有executeQuery()、executeUpdate()等, 用这些方法执行SQL语句
ResultSet executeQuery(String sql)
方法:产生单个结果集,如select语句,返回一个ResultSet对象
int executeUpdate(String sql)
方法:该方法用于执行 INSERT、UPDATE 或 DELETE 语句以及SQL DDL语句 —— 返回一个整数表示受到影响的行数,如果是CREATE和DROP TABLE这种语句,返回 0
//经创建了Statement对象stmt,查询users表中的所有记录,并将查询结果保存到ResultSet对象rs中
String sql = "select * from users";
ResultSet rs= stmt.executeQuery(sql);// 删除users表中u_id为7的记录String sql = "delete from users where u_id=7";
int rows= stmt.executeUpdate(sql);
PreparedStatement对象也可以调用executeQuery()和executeUpdate()两个方法,但都不需要带参数
String sql = "delete from users where u_id=?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1,7);
int rows= pstmt.executeUpdate ();
5. 处理执行SQL语句的返回结果
针对 ResultSet对象
常用方法
-
boolean next():指向当前数据行的指针,指针最初指向第一行之前.移动到下一行。如果没有下一行时,则返回false
-
getXxx(列名或列索引):获取所在行指定的值,getString(“name”),表示获取当前行列名为“name”的列值。 如果用索引,索引值从1开始而不是0
String sql = "select * from users";
ResultSet rs=stmt. executeQuery(sql);
rs.next();
int u_id=rs.getInt(1);
//或int u_id=rs.getInt("u_id");
String u_name=rs.getString(2);
String u_sex=rs.getString("u_sex");
6.关闭连接
rs.close();
stmt.close();
conn.close();
JDBC数据库操作
1 增加数据- Statement对象提供的带参数的executeUpdate()方法
- PreparedStatement对象提供的无参数的executeUpdate()方法
使用UPDATE命令来实现更新操作
// State的SQL语句需要写好
Statement stmt = conn.createStatement();
String sql = "update users set u_pwd='654321' where
u_name='zhangping'";
int temp = stmt.executeUpdate(sql);// PS的SQL可以留空后续填
String sql = "update users set u_pwd=? where u_name=?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "654321");
pstmt.setString(2, "zhangping1");
int temp =pstmt.executeUpdate();
3 删除数据
Statement stmt = conn.createStatement();
String sql = "delete from users where u_name='zhangping'";
int temp = stmt.executeUpdate(sql);String sql = " delete from users where u_name=?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "zhangping1");
int temp =pstmt.executeUpdate();
4 查询数据 executeQuery()方法
5 批处理
步骤
- 使用addBatch(sql)方法,将需要执行的SQL命令添加到批处理中。
- 使用executeBatch()方法,执行批处理命令。
- 使用clearBatch()方法,清空批处理队列。
三种方法
- 批量执行静态的SQL;
- 批量执行动态的SQL;
- 批量执行混合模式的SQL。
- 静态:Statement对象的addBatch()方法
优点: 以向数据库发送多条不同的SQL语句、
缺点:没有预编译,执行效率较低 —— 数据库发送多条语句相同,但仅参数不同的SQL语句时,需重复使用多条相同的SQL语句
- 批量执行动态SQL:用PreparedStatement对象的addBatch()
优点:预编译后的SQL语句,执行效率高
缺点:只适用SQL语句相同,但参数不同的批处理
—— 理经常用于在同一个表中批量更新表中的
数据
- 批量执行混合模式的SQL PreparedStatement对象的addBatch()方
数据源
连接池:接建立一个“缓冲池”,预先在“缓冲池”中放入一定数量的连接。需要建立数据库连接时,只需从“缓冲池”中取出一个
数据源(Data Source):Web开发中获取数据库连接的首选方法。
- 首先创建一个数据源对象
- 数据源简历连接对象
- 连接池管理这些对象
JNDI(Java Naming and Directory Interface):名称于对象绑定技术
- 对象工厂创建对象 —— 和唯一名称绑定,通过名称获取某对象访问
- 应用程序可以通过名称来获得某个对象的访问
如何配置 Tomcat服务器
- 将MySQL数据库的JDBC驱动程序包复制到Tomcat安装路径下的lib文件夹中
- 配置数据源。配置Tomcat根目录下conf文件夹中的文件context.xml
- 在应用程序中使用数据源。配置数据源后,就可以使用javax.naming.Context接口的lookup()方法来查找JNDI数据源
InitialContext ctx = new InitialContext();
DataSource ds =
(DataSource)ctx.lookup("java:comp/env/jdbc/MySQLDB");
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
stmt.execute("SOME SQL QUERY");
分页查询的例子
知识点补充
如果需要在结果集中前后移动或显示结果集指定的一条记录的时候,就要用到游动查询,这时应使用**带参数的createStatement()**方法
创建语句对象,其语法格式如下
Statement stmt=conn.createStatement(int type,int concurrency);
type的取值 —— 滚动方式
- ResultSet.TYPE_FORWORD_ONLY:结果集的游标只能向下滚动。
- ResultSet.TYPE_SCROLL_INSENSITIVE:结果集的游标可以上下移动,当数据库变化时,当前结果集不变。
- ResultSet.TYPE_SCROLL_SENSITIVE:返回可滚动的结果集,当数据库变化时,当前结果集同步改变。
concurrency的取值决定是否可以用结果集更新数据库
- ResultSet.CONCUR_READ_ONLY:不能用结果集更新数据库中的表。
- ResultSet.CONCUR_UPDATETABLE:能用结果集更新数据库中的表。
相关文章:
![](https://img-blog.csdnimg.cn/19d996f006a1480eb9bcd22e00712aa2.png)
数据库实践LAB大纲 05 JDBC 连接
概述 Java DataBase Connectivity,Java 数据库连接 执行SQL的Java API 为多种关系型数据提供统一访问 FUNCTION 建立与数据库的连接向数据库发送 SQL 语句处理从数据库返回的结果 四种常见JDBC驱动程序 JDBC-ODBC Bridge drivernative-API, partly Java driver…...
![](https://www.ngui.cc/images/no-images.jpg)
Linux部署nuxt3
最近写了一个项目,需要打包部署,过程还是比较繁琐的,因为需要先配置运行环境。准备采用 pm2 管理项目运行,需要在服务器安装 pm2,而安装 pm2 的话用 npm 命令最方便,所以还要下载 node 环境。那么ÿ…...
![](https://img-blog.csdnimg.cn/img_convert/28b853239e01cb2b442f62bd168e0e5b.png)
鸟哥的Linux私房菜读书笔记:文件系统的简单操作
磁盘与目录的容量 现在我们知道磁盘的整体数据实在superblock区块中,但是每个个别文件的容量则在inode当中记载的. 那在命令行下面该如何显示处这几个数据呢? df:列出文件系统的整体磁盘书用量du:评估文件系统的磁盘使用量(常用在推估目录所占容量)df先来说明一下范例一所输…...
![](https://img-blog.csdnimg.cn/160c0a7394a04b2e8098a2719a9ea44f.gif)
论如何用python自动下载爱的妹子视频~嘿嘿嘿~
前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ 现在好看的妹子真的太多啦~ 如何一次性把这些好看的视频全保存下来捏? 开发环境: 版 本: python 3.8 编辑器: pycharm 2022.3.2 专业版 requests >>> pip install request…...
![](https://img-blog.csdnimg.cn/img_convert/cb088139caef4430a43d5e535f4f989a.png)
传奇GOM引擎配置PAK密码补丁教程
因为我很少接触GOM引擎,所有很晚才知道PAK密码的事情,以前经常在群里或者QQ上有人问站长,说补丁有PAK密码怎么办,我起初不在意,限制发现是一个大问题,好吧,今天借助这篇文章,分享一下…...
![](https://img-blog.csdnimg.cn/48c367bc2408476bb13a276afeb849f1.jpeg)
邀您参赛!DCIC 2023「科技金融欺诈风险识别」算法赛正在报名中
近年来,跨境赌博、电信网络诈骗、黑产等外部欺诈违法犯罪形势日益严峻,呈现线上化、产业化、团伙化等特征,国家、监管机构及银行自身都高度重视反欺诈治理工作,坚决守护人民群众的财产安全。 为进一步打击外部欺诈违法犯罪行为&am…...
![](https://img-blog.csdnimg.cn/a3b132c2aac444c7a74c60872a85756e.png)
ElasticSearch-学习笔记04【Java客户端操作索引库】
Java后端-学习路线-笔记汇总表【黑马程序员】ElasticSearch-学习笔记01【ElasticSearch基本介绍】【day01】ElasticSearch-学习笔记02【ElasticSearch索引库维护】ElasticSearch-学习笔记03【ElasticSearch集群】ElasticSearch-学习笔记04【Java客户端操作索引库】【day02】Ela…...
![](https://img-blog.csdnimg.cn/img_convert/e7ac4e7b84e4a24f778f5330d12225bb.webp?x-oss-process=image/format,png)
低代码开发平台|制造管理-工艺工序搭建指南
1、简介1.1、案例简介本文将介绍,如何搭建制造管理-工艺工序。1.2、应用场景先填充工序信息,再设置工艺路线对应的工序;工序信息及工艺路线列表报表展示的是所有工序、工艺路线信息,可进行新增对应数据的操作。2、设置方法2.1、表…...
![](https://img-blog.csdnimg.cn/e08d416670354c60bf2dd25e4449b411.png)
Window 安装 Docker
1.开启Hyper-v 2.确定后重启 3.双击安装包进行安装 4.安装完后系统重启 5.打开Docker软件提示:按下图操作后重启Docker 6.设置docker镜像仓库 { “experimental”: false, “features”: { “buildkit”: true }, “registry-mirrors”: [ “https://docker.mirr…...
![](https://img-blog.csdnimg.cn/img_convert/df2a26532c114d7058ab9767f4b8b0ad.png)
最近很火的一部电视(狂飙)像安欣和高启强这样类型的人,谁更合适做软件测试工程师
狂飙》央视收视率狂飙。央视发布《狂飙》收视成绩,全剧平均收视1.54%,平均收视份额6.99%,单集最高收视率2.20%,单集最高收视份额10.69%;晚间电视剧类节目第一。可以说还部剧为今年开了个好头,一开年就引爆收…...
LSTM已死,Transformer当立(LSTM is dead. Long Live Transformers! ):上
回想一下在Seq2seq模型中,如何使用Attention。这里简要回顾一下【1】介绍的方法2(并以此为基础展开对Transformer的讨论)。 下图中包含一个encoder(左)和一个decoder(右)。对于decoder来说,给定一个输入,得到输出,如何进一步得到context vector 呢? 我们需要根据和…...
![](https://img-blog.csdnimg.cn/img_convert/5fdbb48346c44e39b69ce4f60100d9d0.png)
今天面试招了个18K的人,从腾讯出来的果然都有两把刷子···
公司前段时间缺人,也面了不少测试,前面一开始瞄准的就是中级的水准,也没指望来大牛,提供的薪资在15-20k,面试的人很多,但平均水平很让人失望。看简历很多都是4年工作经验,但面试中,不…...
![](https://www.ngui.cc/images/no-images.jpg)
洛谷 P5764 [CQOI2005]新年好
P5764 [CQOI2005]新年好 题目描述 重庆城里有 nnn 个车站,mmm 条双向公路连接其中的某些车站。每两个车站最多用一条公路连接,从任何一个车站出发都可以经过一条或者多条公路到达其他车站,但不同的路径需要花费的时间可能不同。在一条路径上…...
![](https://img-blog.csdnimg.cn/40a4cb72f35a4f23a32d856c798b8683.png)
【自然语言处理】主题建模:BERTopic(实战篇)
主题建模:BERTopic(实战篇)BERTopic 是基于深度学习的一种主题建模方法。201820182018 年底,Devlinetal.Devlin\ et\ al.Devlin et al. 提出了 Bidirectional Encoder Representations from Transformers (BERT)[1]^{[1]}[1]。BER…...
![](https://img-blog.csdnimg.cn/c83fdf22f37343b5b8d5ecba67c4b1f3.png)
k8s学习笔记
目录 一、安装前准备 二、安装 1、安装kubelet、kubeadm、kubectl 2、使用kubeadm引导集群 1、下载各个机器需要的镜像 2、初始化主节点 3、加入node节点 3、部署dashboard 1、主节点安装 2、设置访问端口 3、创建访问账号 4、令牌访问获取token 三、实战 1、资源创…...
![](https://img-blog.csdnimg.cn/1880665414f0403393bd88d4a30de8ac.png#pic_center)
web自动化测试入门篇05——元素定位的配置管理
😏作者简介:博主是一位测试管理者,同时也是一名对外企业兼职讲师。 📡主页地址:【Austin_zhai】 🙆目的与景愿:旨在于能帮助更多的测试行业人员提升软硬技能,分享行业相关最新信息。…...
![](https://img-blog.csdnimg.cn/32c26a6302024a0ca040a7f6e7cc3429.png)
C语言预处理
文章目录 目录 文章目录 前言 一、程序编译的过程 二、编译阶段 1.预处理(*.i) 2.编译(*.s) 3.汇编(*.o) 4.链接 总结 前言 提示:使用vs code(gcc编译器)与vs2022来演示c语言的预处理 提示:以下是本篇文章正文内容,下面…...
![](https://img-blog.csdnimg.cn/e0cdabcbac734378ae32ffe15c1c3a03.png)
git报错大全,你将要踩的坑我都帮你踩了系列
使用git push -u origin master报下面的错: 使用git push -u origin master报下面的错: Updates were rejected because the remote contains work that you do not have locally,This is usually caused by another repository pushing to …...
![](https://img-blog.csdnimg.cn/img_convert/60f1c5a3464bd02322e16d6c720d9e55.png)
LabVIEW中使用.NET方法时出现错误1316
LabVIEW中使用.NET方法时出现错误1316为什么不能调用带有泛型参数的方法?LabVIEW不支持哪些.NET功能?为什么会收到以下错误:发生此错误的原因是正在调用LabVIEW中不支持的.NET功能。有关解决方法,请参阅“其他信息”部分。可以在下…...
![](https://www.ngui.cc/images/no-images.jpg)
HTTP2.0 相比 HTTP1.0、HTTP1.1 有哪些重大改进?值得升级更换吗?
目录 HTTP1.0 HTTP1.1 HTTP2.0 主要特性对比 HTTP发展历史 HTTP2解决的问题 HTTP1.0 HTTP1.1 HTTP2.0...
![](https://img-blog.csdnimg.cn/ae971910a34441a9a5f1f127b51e322a.png)
九、Linux文件 - fopen函数和fclose函数讲解
目录 1.fopen函数 2.fclose函数 3.fopen函数和fclose实战 1.fopen函数 fopen fwrite fread fclose ...属于标准C库 include <stdio.h> standard io lib open close write read 属于Linux系统调用 可移植型:fopen > open(open函数只在嵌入…...
![](https://img-blog.csdnimg.cn/ec45496d2e7040238b0e4e84e4b5885c.png#pic_center)
轨迹预测算法vectorNet调研报告
前言 传统的行为预测方法是规则的,基于道路结构的约束生成多个行为假设。最近,很多基于学习的预测方法被提出。他们提出了对于不同行为假设的进行概率解释的好处,但是需要重构一个新的表示来编码地图和轨迹信息。有趣的是,虽然高精…...
![](https://img-blog.csdnimg.cn/img_convert/80b23950259597e2c6715ab83ead2f25.jpeg)
基于STM32设计的避障寻迹小车
一、前言 1.1 项目背景 根据美国玩具协会在一项研究中,过去几年全球玩具销售增长与GDP的世界平均水平大致相同。但全球玩具市场的内部结构已经占据了巨大的位置变化:传统玩具的市场份额正在下降,高科技电子玩具正在蓬勃发展。全球玩具市场的…...
![](https://www.ngui.cc/images/no-images.jpg)
【视觉检测】使用opencv编写一个图片缺陷检测流程
1. 导入必要的库,如OpenCV,NumPy等。 2. 使用OpenCV读取图像,并将其转换为灰度图像。 3. 使用OpenCV的Canny边缘检测算法检测图像中的边缘。 4. 使用OpenCV的Hough变换算法检测图像中的线条。 5. 使用OpenCV的模板匹配算法检测图像中的缺…...
![](https://www.ngui.cc/images/no-images.jpg)
3.Dockerfile 定制镜像
3. Dockerfile 定制镜像 从上一节的docker commit的学习中,我们可以了解到,镜像的定制实际上就是定制每一层所添加的配置、文件等信息,但是命令毕竟只是命令,每次定制都得去重复执行这个命令,而且还不够直观ÿ…...
![](https://www.ngui.cc/images/no-images.jpg)
Web基础与HTTP协议
Web基础与HTTP协议一、Web基础与HTTP概述1、域名概念二、域名服务与域名注册1、域名定义2、域名服务三、网页访问(http、https)1、网页概述2、网页的基本标签四、Web1、Web概述2、Web1.0 Web2.0五、HTTP协议概述1、HTTP协议简介2、HTTP协议请求总结一、W…...
![](https://img-blog.csdnimg.cn/img_convert/a9bfe783465d89a354c2f8b71a32513b.jpeg)
【化学试剂】endo-BCN-PEG4-Pomalidomide,(1R,8S,9S)-双环[6.1.0]壬-四聚乙二醇-泊马度胺纯度95%+
一、基础产品数据(Basic Product Data):CAS号:N/A中文名:(1R,8S,9S)-双环[6.1.0]壬-四聚乙二醇-泊马度胺英文名:endo-BCN-PEG4-Pomalidomide二、详细产品数据(Detailed Product Data)…...
![](https://img-blog.csdnimg.cn/img_convert/5a1d0fcba1cec7d3b2a77379fc3814cb.jpeg)
全板电镀与图形电镀,到底有什么区别?
衔接上文,继续为朋友们分享普通单双面板的生产工艺流程。 如图,第四道主流程为电镀。 电镀的目的为: 适当地加厚孔内与板面的铜厚,使孔金属化,从而实现层间互连。 至于其子流程,可以说是非常简单&#x…...
![](https://img-blog.csdnimg.cn/66c87da787ee4b6f8f5ce1702370bf03.png)
Zabbix 构建监控告警平台(二)--
Apache监控示例(图形监控)模板TemplateZabbix Items 1.Apache监控示例(图形监控) 1.1创建主机组 在“配置”->“主机群组”->“创建主机群组” 填入组名“webserver_test” 创建完成之后可以在“配置”->"主机群组&…...
![](https://img-blog.csdnimg.cn/img_convert/f949f8bdd89946f88498453b44110642.png)
开学季,关于校园防诈骗宣传,如何组织一场微信线上答题考试
开学季,关于校园防诈骗宣传,如何组织一场微信线上答题考试如何组织一场微信线上答题考试在线考试是一种非常节约成本的考试方式,考生通过微信扫码即可参加培训考试,不受时间、空间的限制,近几年越来越受企事业单位以及…...
![](https://img-blog.csdnimg.cn/img_convert/789b3d72f1d84466e58c8ffae2340876.png)
带数据库网站模板/百度站长平台注册
方式一String[] array {"111","222","333"};List list Arrays.asList(array);// list.add("444");list.remove(0);如上图所示,不可进行新增或删除元素的操作。Arrays.asList(array),返回的List是具有固定长度…...
![](/images/no-images.jpg)
如何建立政府网站/学it什么培训机构好
前言全球不同的地方有不同的时区划分,所有了以全球标准时间(UTC)和本地时间(localtime)区别。一般我们都设置成本地时间,方便操作与统计。机器里有两个时钟,硬件时钟从根本上讲是CMOS时钟,而系统时钟是由内核维护的。时区修改第一…...
![](https://www.oschina.net/img/hot3.png)
教务系统网站怎么做/网站创建公司
为什么80%的码农都做不了架构师?>>> 转自<http://blog.csdn.net/leeyu35/article/details/7680927> 安装在ubuntu10.10 系统下,开发环境需要,有时会需要安装JDK5和JDK6,怎么实现这两者之间的切换呢?…...
![](/images/no-images.jpg)
阿里云中文域名建设网站/无锡百度正规推广
小编典典对于无状态Lambda或有状态Lambda ,必须区分相同调用站点的频繁执行和对同一方法的方法引用的频繁使用(由不同的调用站点)之间的区别。看下面的例子:Runnable r1null;for(int i0; i<2; i) {Runnable r2System::gc;if(r1null) r1r2;else System…...
![](https://img-blog.csdnimg.cn/img_convert/49bb8f77ad70eb96a0618d9ea0f2a165.png)
wordpress附件详情/深圳做网站公司
一、选择排序1、工作原理选择排序,一趟排序记录最小(大)的数,放在第一个位置。再从排序记录列表的无序区选择最小(或最大)的数,然后放到已排序的序列的末尾。以此类推,直到全部待排序…...
![](https://img-blog.csdnimg.cn/20201230213949707.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTc1MDE0Mg==,size_16,color_FFFFFF,t_70)
建设网站网址/网站建设解决方案
文章目录一、GeoHash1、基本使用2、注意事项二、Scan1、keys 指令2、scan 基本使用3、字典的结构4、Scan 遍历顺序(1)字典扩容(2)对比扩容缩容前后的遍历顺序(3)渐进式 rehash(4)更多…...