如何通过JDBC获取数据库连接 , 实现对单表数据增、删、改 ,实现对单表数据查询以及根据别名查询处理结果集扩展

1、获取连接

能够通过JDBC获取数据库连接

讲解

API介绍

java.sql.DriverManager类中有如下方法获取数据库连接

static Connection getConnection(String url, String user, String password) 
连接到给定数据库 URL ,并返回连接。 
参数说明
  1. String url:连接数据库的URL,用于说明连接数据库的位置
  2. String user:数据库的账号
  3. String password:数据库的密码

连接数据库的URL地址格式:协议名:子协议://服务器名或IP地址:端口号/数据库名?参数=参数值
在这里插入图片描述

MySQL写法:jdbc:mysql://localhost:3306/day04_db
如果是本地服务器,端口号是默认的3306,则可以简写:jdbc:mysql:///day04_db

在这里插入图片描述

注意事项

如果数据出现乱码需要加上参数: ?useUnicode=true&characterEncoding=utf8,表示让数据库以UTF8编码来处理数据。
如: jdbc:mysql://localhost:3306/day04_db?useUnicode=true&characterEncoding=utf8

使用步骤

1.DriverManager.getConnection(url, user, password); 传入对应参数即可

案例代码
public class Demo01 {public static void main(String[] args) throws Exception {Class.forName("com.mysql.jdbc.Driver");/*1)使用DriverManager类中的静态方法获取和数据库的连接:static Connection getConnection(String url, String user, String password)参数:url:表示建立和数据库服务器连接的地址,书写格式几乎是固定的。jdbc:mysql://连接mysql服务器的ip地址:mysql服务器的端口号/连接的数据库名补充:如果连接的数据库软件在本地,那么url可以简写为:jdbc:mysql:///连接的数据库名user:连接mysql服务器的用户名,这里暂时书写rootpassword:接mysql服务器的密码返回值:Connection,属于java.sql 包下的一个接口,表示连接接口,和数据库的连接。*/// 连接到MySQL// url: 连接数据库的URL// user: 数据库的账号// password: 数据库的密码Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day04_db", "root", "1234");System.out.println(conn);}
}
案例效果

1.连接成功
在这里插入图片描述

2.连接失败
在这里插入图片描述

小结

  1. JDBC获取数据库连接使用哪个API?

    DriverManager.getConnection(数据库url, 账号, 密码)
    
  2. 通过JDBC连接mysql的URL写法?

    jdbc:mysql://服务器ip地址:3306/数据库
    

3.如果连接mysql服务器在本地,那么url可以简写:

jdbc:mysql:///数据库

2、JDBC实现对单表数据增、删、改

目标

通过JDBC实现对单表数据增、删、改、查

讲解

JDBC实现对单表数据增、删、改

我们要对数据库进行增、删、改、查,需要使用Statement对象来执行SQL语句。

API介绍

获取Statement对象

java.sql.Connection接口中有如下方法获取到Statement对象

Statement createStatement() 
创建一个 Statement 对象来将 SQL 语句发送到数据库

Statement的API介绍

  1. int executeUpdate(String sql)
    根据执行的DMLINSERTUPDATEDELETE)语句,返回受影响的行数
    
  2. ResultSet executeQuery(String sql)
    根据查询语句返回结果集,只能执行SELECT语句
    

    注意:在MySQL中,只要不是查询就是修改。
    executeUpdate:用于执行增删改
    executeQuery:用于执行查询

使用步骤
  1. 注册驱动
  2. 获取连接
  3. 获取Statement对象
  4. 使用Statement对象执行SQL语句
  5. 释放资源
案例代码
public class Demo03 {public static void main(String[] args) throws Exception {Class.forName("com.mysql.jdbc.Driver");Connection conn = DriverManager.getConnection("jdbc:mysql:///day04_db", "root", "1234");System.out.println(conn);/*1)获取发送sql语句对象使用Connection连接接口对象调用Connection接口的方法:Statement createStatement() 创建一个 Statement 对象来将 SQL 语句发送到数据库。PreparedStatement prepareStatement(String sql) 创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库。2)Statement和PreparedStatement都可以用来向数据库发送sql语句,Statement是PreparedStatement的父接口。3)PreparedStatement 是安全的,Statement不安全的。并且Statement效率低,PreparedStatement效率高4)Connection还可以手动控制mysql事务:开启事务  void setAutoCommit(boolean autoCommit) 将此连接的自动提交模式设置为给定状态。autoCommit - 为 true 表示启用自动提交模式;为 false 表示禁用自动提交模式1. conn.setAutoCommit(false);一切正常提交事务  void commit()2. conn.commit()出现异常,回滚事务  void rollback()3. conn.rollback()*/// 从连接中拿到一个Statement对象Statement stmt = conn.createStatement();/*Statement向数据库发送sql语句,使用Statement中的不同的方法可以向数据库发送不同的sql语句:1)DQL查询语句:  ResultSet executeQuery(String sql) 执行给定的 SQL 语句,该语句返回单个 ResultSet 对象。参数:sql - 要发送给数据库的 SQL 语句,通常为静态 SQL SELECT 语句返回值:ResultSet用来存放查询的结果,表示结果集2)DML增删改和DDL语句(创建表和数据库)使用的方法:int executeUpdate(String sql)执行给定 SQL 语句,该语句可能为 INSERT、UPDATE 或 DELETE 语句(DML),或者不返回任何内容的 SQL 语句(如 SQL DDL 语句)。返回值:1) 对于 SQL 数据操作语言 (DML) 语句,返回行记录数,影响的行数2) 对于什么都不返回的 SQL 语句,返回 0 ,执行DDL返回的是0 了解*/// 1.插入记录String sql = "insert into user values(null, 'zhaoliu', 'abc')";int i = stmt.executeUpdate(sql);System.out.println("影响的行数:" + i);// 2.修改记录sql = "update user set username='tianqi' where username='zhaoliu'";i = stmt.executeUpdate(sql);System.out.println("影响的行数:" + i);// 3.删除记录sql = "delete from user where id=4";i = stmt.executeUpdate(sql);System.out.println("影响的行数:" + i);// 释放资源stmt.close();conn.close();}
}

3、JDBC实现对单表数据查询

目标

能够掌握JDBC实现对单表数据查询

讲解

ResultSet用于保存执行查询SQL语句的结果。
我们不能一次性取出所有的数据,需要一行一行的取出。

ResultSet的原理
  1. ResultSet内部有一个指针,刚开始记录开始位置
  2. 调用next方法, ResultSet内部指针会移动到下一行数据
  3. 我们可以通过ResultSet得到一行数据 getXxx得到某列数据
    在这里插入图片描述
ResultSet获取数据的API

其实ResultSet获取数据的API是有规律的get后面加数据类型。我们统称getXXX()
在这里插入图片描述

​ 例如:

在这里插入图片描述

对于上图中的一行数据,我要获取username为zhangsan这列的值,有如下2种写法:

  1. rs.getString(“username”); 通过列名获取该列的值。

  2. rs.getString(2); 通过username列所在的第二个位置获取该列的值。

使用JDBC查询数据库中的数据的步骤
  1. 注册驱动
  2. 获取连接
  3. 获取到Statement
  4. 使用Statement执行SQL
  5. ResultSet处理结果
  6. 关闭资源
案例代码
public class Demo04 {public static void main(String[] args) throws Exception {Class.forName("com.mysql.jdbc.Driver");Connection conn = DriverManager.getConnection("jdbc:mysql:///day04_db", "root", "1234");Statement stmt = conn.createStatement();String sql = "select * from user";ResultSet rs = stmt.executeQuery(sql);// 内部有一个指针,只能取指针指向的那条记录while(rs.next()){// 指针移动一行,有数据才返回trueint id = rs.getInt("id");String name = rs.getString(2);String pwd= rs.getString(3);System.out.println(id+"+++"+name+"++++"+pwd);}// 关闭资源rs.close();stmt.close();conn.close();}
}

小结

其实我们使用JDBC操作数据库的步骤都是固定的。不同的地方是在编写SQL语句

  1. 注册驱动
  2. 获取连接
  3. 获取到Statement
  4. 使用Statement执行SQL
  5. ResultSet处理结果
  6. 关闭资源

ResultSet如何获取数据?

  1. 调用next方法, ResultSet内部指针会移动到下一行数据
  2. 我们可以通过ResultSet得到一行数据 getXxx得到某列数据

在这里插入图片描述

4. 根据别名查询处理结果集扩展

package com.itheima.sh.a_jdbc_01;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;public class JDBC03Test {public static void main(String[] args) throws Exception {/*需求:查询数据表user2所有数据输出到控制台*///2.获取连接String url = "jdbc:mysql://localhost:3306/day03_heima138";//连接mysql服务器地址String username = "root";//连接mysql服务器用户名String password = "1234";//连接mysql服务器密码,这里输入你的密码Connection conn = DriverManager.getConnection(url, username, password);//3.定义sqlString sql = "select id,username,password pwd from user2";//4.获取发送sql语句对象Statement st = conn.createStatement();//5.发送sql语句/*1.ResultSet 表示结果集,用来存放查询的结果,因为查询有可能是多行数据,所以使用集合存储*/ResultSet rs = st.executeQuery(sql);//6.处理结果while(rs.next()){//获取数据int id = rs.getInt("id");String userName = rs.getString("username");/*对应处理结果集ResultSet中的getXxx(xxx 变量名):1)根据第几列来获取字段值:例如password属于第三列,那么这里获取password值是:rs.getString(3);2)根据字段名或者别名来获取字段值:如果sql语句某个字段有别名,那么只能书写别名,不能书写字段sql语句:select id,username,password pwd from user2获取密码值:rs.getString("pwd");*/String pwd = rs.getString("pwd");//输出System.out.println(id+"---"+userName+"---"+pwd);}//7.释放资源rs.close();st.close();conn.close();}
}

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

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

相关文章

使用深度相机D435i+YOLOv8实现物体三维坐标实时显示

一、获取相机内参 下列指令为获取相机内参指令,输入此指令前需要获得相机的深度帧和彩色帧数据。 如何使用vsCode打开intel D435i深度相机 # 获取相机内参 depth_intrinsics depth_frame.profile.as_video_stream_profile().intrinsics color_intrinsics color…

Tomcat多实例配置

目录 一. 复制程序文件 二. 启动tomcat多实例 三. Tomcat多实例负载均衡 多实例(多进程):同一个程序启动多次,分为两种情况: 第一种:一台机器跑多个站点; 第二种:一个机器跑一个站点多个实…

代码随想录训练营第十六天 513找树左下角的值 112路径总和I 113路径总和II 106从中序和后序遍历序列构造二叉树

第一题: 原题链接:513. 找树左下角的值 - 力扣(LeetCode) 思路:用回溯的思想: 这题就是求最大深度,当遍历到第一个最大深度的时候,记录下的节点值就是最左边的元素。 参数和返回…

提取图像主色调

依赖 Pillow 库。 提取图像主色调,直接上代码: from PIL import Imagedef extract_main_color(img_path: str, delta_h: float 0.3) -> str:"""获取图像主色调Args:img_path: 输入图像的路径delta_h: 像素色相和平均色相做减法的绝…

MIL图像处理那些事:定义感兴趣区域ROI的两种方法(示例项目C#源码)

文章目录 效果展示第一种方法:通过鼠标框选GetROIForm构造函数如何缩放--MdispZoom的使用Ctr+滚轮缩放放大两倍:如何平移--MdispPan的使用双击返回ROI第二种方法:直接编辑ROI框显示ROI示例项目C#源码(百度网盘)本示例提供两种方法定义感兴趣区域ROI 效果展示 第一种方法:通过鼠…

测试基础15:测试用例设计方法-场景设计(流程分析)

课程大纲 1、定义 系统多个功能串联形成业务流程,不仅需要验证正确的主流程,而且需要验证各个功能点各种异常情况。 2、应用场景 与因果图&判定表方法的相似之处:界面需手动填写的输入框少,基本只需选择有限的几个&#xff08…

Jenkins定时构建自动化(四):Python 的 argparse 模块

目录 一、主要功能和用途 二、核心类和方法 三、总结 四、argparse模块示例 Jenkins定时构建自动化(一):Jenkins下载安装配置-CSDN博客 Jenkins定时构建自动化(二):Jenkins的定时构建-CSDN博客 Jenkins定时构建自动化(三):手动定时构建…

[FreeRTOS 基础知识] 信号量 概念

文章目录 信号量定义信号量特性 信号量定义 信号量是一个抽象的数据类型,通常包含一个整数值以及一个等待该值变为正数的任务列表(也称为等待队列)。信号量的整数值代表了系统中某种资源的可用数量。 在操作系统中信号量用于控制对共享资源访…

提升办公效率的利器—OnlyOffice文档8.1深度体验

目录 1. 前言 2. 安装 3. 基本使用 3.1 文档编辑 3.2 表格处理 3.3 演示文稿 4. 个人评价 5. 总结 1. 前言 在当今信息化时代,办公软件已经成为我们日常工作中不可或缺的工具。无论是撰写文档、处理数据,还是制作演示文稿,办公软件的…

MySQL MVCC详解

目录 前言 MVCC实现原理 UndoLog版本链 ReadView MVCC是否可以解决不可重复读与幻读 隔离级别 READ UNCOMMITTED - 读未提交与脏读 READ COMMITTED - 读已提交与不可重复读 REPEATABLE READ - 可重复读与幻读 SERIALIZABLE - 串行化 小结 前言 为了提高数据库并发能力…

GNSS接收机的工作原理

GNSS接收机的工作原理如下: 信号接收:GNSS接收机通过天线接收来自卫星导航系统的信号,这些信号包含卫星的位置、时间和健康状态等信息。 信号处理:接收的信号首先经过前置放大器放大,然后经过滤波器滤除噪声。接收机会…

邂逅Three.js探秘图形世界之美

可能了解过three.js等大型的3D 图形库同学都知道啊,学习3D技术都需要有图形学、线性代数、webgl等基础知识,以前读书学的线性代数足够扎实的话听这节课也会更容易理解,这是shader课程,希望能帮助你理解着色器,也面向第…

图象去噪1-使用中值滤波与均值滤波

1、中值滤波 使用中值滤波去除图像的异常像素点,使用cv2.cv2.medianBlur(img, 3)表示再图像在中值滤波窗口3*3的范围内,从下到大排序,将当前值替换为排序中值(如下图所示)将56替换为(56,66,90,…

JeecgFlow并行网关概念及案例演示

概念讲解 并行网关能够在一个流程中用于进行并发建模处理,将单条线路拆分成多条路径并行执行,或者将多条路径合并处理。 在一个流程模型中引入并发最直接的网关就是并行网关,它基于进入和外出顺序流,有分支和合并两种行为&#xf…

想拥有一个独一无二的AI人物?Lora炼丹训练模型教程来啦

之前答应过大家放出来的Lora本地训练教程,终于写好啦。 会训练lora,代表着你可以生成属于你的独一无二的角色。 你可以让这个角色在各种不同背景的地方出现,可以让它摆出各种姿势,满足你的无限幻想。 还有的商家,用…

10分钟安装好torch的GPU版本(Windows)

pytorch-gpu 1. 确定cuda版本2. 确定Python版本3 开始下载-cu118-cp383.1 下载cuda3.2 下载torchvision 4.下载好了5.开始安装6. 开始验证 1. 确定cuda版本 nvcc -V 版本为11.8 , 一会下载的版本为cu118 2. 确定Python版本 确定python版本为为3.8,一会下载为cp38 3 …

Java包介绍

今天看jdk文档,顺便写一下java几个包的作用。 java.applet 主要用于创建java applet小应用程序,可以嵌入到网页中能够呈现出特殊的效果,现在基本已经被废弃,很少使用。 java.awt AWT 是Abstract Window ToolKit (抽象窗口工具包…

猫头虎分享已解决Bug: Illegal State Exception: java.lang.IllegalStateException

猫头虎分享已解决Bug: Illegal State Exception: java.lang.IllegalStateException 🐯 摘要 📄 大家好,我是猫头虎,一名专注于后端技术的博主。在日常开发中,我们经常会遇到各种各样的Bug,其中Illegal St…

Python基础教程(二十七):urllib模块

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝&#x1f49…

ssl证书90天过期?保姆级教程——使用acme.sh实现证书的自动续期

腾讯云相关文档相关参考-有的点不准确 前言 最近https到期了,想着手动更新一下https证书,结果发现证书现在的有效期只有90天,于是想找到一个自动更新证书的工具,发现了acme.sh,但是网上的文章质量参差不齐&#xff0…