数据库实践LAB大纲 05 JDBC 连接

news2024/11/28 9:34:55

概述

Java DataBase Connectivity,Java 数据库连接
执行SQL的Java API 为多种关系型数据提供统一访问

FUNCTION

  1. 建立与数据库的连接
  2. 向数据库发送 SQL 语句
  3. 处理从数据库返回的结果

四种常见JDBC驱动程序

  1. JDBC-ODBC Bridge driver
  2. native-API, partly Java driver
  3. JDBC-Net pure Java driver
  4. native protocol, pure Java driver

JDBC连接过程

底层API,不能直接访问数据库
依赖于相应数据库厂商提供的JDBC驱动程序 —— 驱动程序是连接JDBC API与具体数据库之间的桥梁



JDBC连接MySQL数据库步骤:
(1)加载JDBC驱动程序;
(2)创建数据库连接;
(3)创建Statement对象;
(4)执行SQL语句;
(5)处理执行SQL语句的返回结果;
(6)关闭连接。

  1. 加载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语句

  1. ResultSet executeQuery(String sql)方法:产生单个结果集,如select语句,返回一个 ResultSet对象
  2. 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()方法
2 修改数据

使用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 批处理

步骤

  1. 使用addBatch(sql)方法,将需要执行的SQL命令添加到批处理中。
  2. 使用executeBatch()方法,执行批处理命令。
  3. 使用clearBatch()方法,清空批处理队列。

三种方法

  • 批量执行静态的SQL;
  • 批量执行动态的SQL;
  • 批量执行混合模式的SQL。



  1. 静态:Statement对象的addBatch()方法

优点: 以向数据库发送多条不同的SQL语句、

缺点:没有预编译,执行效率较低 —— 数据库发送多条语句相同,但仅参数不同的SQL语句时,需重复使用多条相同的SQL语句


  1. 批量执行动态SQL:用PreparedStatement对象的addBatch()

优点:预编译后的SQL语句,执行效率高

缺点:只适用SQL语句相同,但参数不同的批处理
—— 理经常用于在同一个表中批量更新表中的
数据



  1. 批量执行混合模式的SQL PreparedStatement对象的addBatch()方

数据源

连接池:接建立一个“缓冲池”,预先在“缓冲池”中放入一定数量的连接。需要建立数据库连接时,只需从“缓冲池”中取出一个

数据源(Data Source):Web开发中获取数据库连接的首选方法。

  1. 首先创建一个数据源对象
  2. 数据源简历连接对象
  3. 连接池管理这些对象

JNDI(Java Naming and Directory Interface):名称于对象绑定技术

  1. 对象工厂创建对象 —— 和唯一名称绑定,通过名称获取某对象访问
  2. 应用程序可以通过名称来获得某个对象的访问

如何配置 Tomcat服务器

  1. 将MySQL数据库的JDBC驱动程序包复制到Tomcat安装路径下的lib文件夹中
  2. 配置数据源。配置Tomcat根目录下conf文件夹中的文件context.xml
  3. 在应用程序中使用数据源。配置数据源后,就可以使用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:能用结果集更新数据库中的表。

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

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

相关文章

LeetCode题目笔记——1.两数之和

文章目录题目描述题目难度——简单方法一:暴力代码/Python方法二:哈希表代码/Python代码/C总结题目描述 这道题可以说是力扣的入坑题了,很经典,好像还是面试的经典题。 给定一个整数数组 nums 和一个整数目标值 target&#xff0c…

Zookeeper技术认知

目录概念理解工作原理文件系统通知系统zookeeper在kakfa中的作用概念理解 Zookeeper是一个开源的分布式的,为分布式框架提供协调服务的Apache项目。 工作原理 Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题&…

Android IO 框架 Okio 的实现原理,到底哪里 OK?

本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问。 前言 大家好,我是小彭。 今天,我们来讨论一个 Square 开源的 I/O 框架 Okio,我们最开始接触到 Okio 框架还是源于 Square 家的 OkHttp 网络…

C4--Vivado添加列表中不存在的FLash器件2023-02-10

以华邦SPI FLASH W25Q128JVEIQ为例进行说明。(其他Flash添加步骤一致) 1.本地vivado安装目录D:\Softwares\xlinx_tools\Vivado\2020.2\data\xicom下,找到xicom_cfgmem_part_table.csv文件,这个表与vivado hardware manager中的器…

pixhawk2.4.8-APM固件-MP地面站配置过程记录

目录一、硬件准备二、APM固件、MP地面站下载三、地面站配置1 刷固件2 机架选择3 加速度计校准4 指南针校准5 遥控器校准6 飞行模式7 紧急断电&无头模式8 基础参数设置9 电流计校准10 电调校准11 起飞前检查(每一项都非常重要)12 飞行经验四、遇到的问…

同步线程

↵ 由于这节内容资料比较少,所以以下内容总结自Qt官方文献,在文章最后会给出相应链接。 线程的目的是允许并行运行,但有时线程必须停止等待其他线程。例如,如果两个线程尝试访问同一个变量,这样的话结果是未定义的。强…

【0基础学爬虫】爬虫基础之爬虫的基本介绍

大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章,为实现从易到难全方位覆盖,特设【0基础学…

Jmeter in Linux - 在Linux系统使用Jmeter的坑

Jmeter in Linux - 在Linux系统使用Jmeter的坑Jmeter in Linux系列目录:o.a.j.JMeter: Error in NonGUIDriver起因错误分析:解决方案:解析日志没有展示请求和响应信息起因解决方案:注意Jmeter in Linux系列目录: 【如…

ChatGPT 爆火!谷歌、微软、百度纷纷下场?

近日,智能聊天机器人ChatGPT的爆火引发了国内外网友的热烈讨论,上线两个月后,用户数量达到1亿。2月8日下午,巨大的访问量让系统一度崩溃。 服务重新开放后,我向ChatGPT询问了如何快速扩容,它显然是知道云端…

CSS从入门到精通专栏简介

先让我们来欣赏几个精美的网站: Matt Brett - Freelance Web Designer and WordPress Expert ‎2022 Year in Review • Letterboxd NIO蔚来汽车官方网站 小米官网 Silk – Interactive Generative Art 大屏数据可视化 你是否也有过这样的“烦恼”: * …

(C00034)基于Springboot+html前后端分离技术的宿舍管理系统-有文档

基于Springboothtml技术的宿舍管理系统-有文档项目简介项目获取开发环境项目技术运行截图项目简介 基于Springboothtml的前后端分离技术的宿舍管理系统项目为了方便对学生宿舍进行管理而设计,分为后勤、宿管、学生三种用户,后勤对整体宿舍进行管理、宿管…

第九层(16):STL终章——常用集合算法

文章目录前情回顾常用集合算法set_intersectionset_unionset_difference最后一座石碑倒下,爬塔结束一点废话🎉welcome🎉 ✒️博主介绍:一名大一的智能制造专业学生,在学习C/C的路上会越走越远,后面不定期更…

JY-7A/3DK/220 19-130V静态【电压继电器】

系列型号 JY-7A/1DK不带辅助电源电压继电器;JY-7B/1DK不带辅助电源电压继电器; JY-7/1DK/120不带辅助电源电压继电器;JY-7/1DK/120不带辅助电源电压继电器; JY-7A/1DKQ不带辅助电源电压继电器;JY-7B/1DKQ不带辅助电源…

Python入门之ChatGPT的API调用(Python版)

一、Python环境部署 参考Python 环境搭建 | 菜鸟教程 Python官网:Welcome to Python.org Python文档下载地址:Our Documentation | Python.org 二、Thonny的安装 安装包地址:Thonny, Python IDE for beginners 三、ChatGPT的Key申请 网…

虚拟机安装CentOS 7(带界面)

目录 一、虚拟机安装CentOS 7(带界面) 1、打开下好的VMware,点击创建虚拟机 2、下一步 3、点击下一步 4、选择Linux,ContOS7,点击下一步 5、修改虚拟机名称和路径 6、下一步 7、点击自定义硬件 8、设置虚拟机大…

《第一行代码》 第三章:UI布局开发

一&#xff0c;常用控件的使用方法 1&#xff0c;TextView <TextViewandroid:id"id/text_view"android:layout_width"match_parent"android:layout_height"wrap_content"android:gravity"center"android:textSize"24sp"…

iptables防火墙SNAT和DNAT

iptables防火墙SNAT和DNAT一、SNAT原理和应用1、SNAT原理2、SNAT应用环境3、SNAT转换前提条件二、SNAT案列1、实验需求2、实验环境3、实验目的三、DNAT原理和应用1、DNAT原理2、DNAT 应用环境3、DNAT转换的前提条件四、DNAT案列总结一、SNAT原理和应用 1、SNAT原理 SNAT原理:…

365天深度学习训练营 第P6周:好莱坞明星识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 内部限免文章&#xff08;版权归 K同学啊 所有&#xff09;&#x1f366; 参考文章地址&#xff1a; &#x1f517;第P6周&#xff1a;好莱坞明星识别 | 365天深度学习训练营&#x1f356; 作者&#xff1a;K同学啊 | 接…

扩散模型diffusion model用于图像恢复任务详细原理 (去雨,去雾等皆可),附实现代码

文章目录1. 去噪扩散概率模型2. 前向扩散3. 反向采样3. 图像条件扩散模型4. 可以考虑改进的点5. 实现代码1. 去噪扩散概率模型 扩散模型是一类生成模型, 和生成对抗网络GAN 、变分自动编码器VAE和标准化流模型NFM等生成网络不同的是, 扩散模型在前向扩散过程中对图像逐步施加噪…

如何为自己的应用选择数据库?有这些考虑因素

节选翻译自 Michal Toiba 的博客 微软前不久宣布推出分布式关系数据库 Azure Cosmos DB for PostgreSQL&#xff0c;使 Azure 成为第一个在单一数据库服务中同时支持关系和 NoSQL&#xff08;非关系&#xff09;数据的云平台。这意味着 Azure Cosmos DB 开发者在构建云原生应用…