预处理语句完成CRUD以及DbUtils详解

预处理语句完成CRUD

1、 插入

// 插入public static void insert() throws Exception {Class.forName("com.mysql.jdbc.Driver");Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/java2311?useSSL=false", "root", "123456");
​// 1 sqlString sql = "insert into tb_user values (?,?,?,?,?,?,?)";// 2 预处理PreparedStatement ps = conn.prepareStatement(sql);// 3 给?赋值ps.setInt(1,6);ps.setString(2,"JK");ps.setString(3,"123456");ps.setString(4,"5555");/*** setDate() 需要传入java.sql.Date包下的日期对象* java.sql.Date没有无参构造,只有一个有参构造,传入是毫秒值*/// 方案1: 获得当前时间毫秒值// java.util.Date date = new java.util.Date( );// 创建当前日期对象// long time = date.getTime( );// 获得当前毫秒值// java.sql.Date date2 = new java.sql.Date(time);// 方案2: 获得指定时间的毫秒值LocalDate localDate = LocalDate.of(2020, 10, 1);java.util.Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());long time = date.getTime();// java.sql.Date date2 = new java.sql.Date(time);// 方案3: 获得系统毫秒值//long time = System.currentTimeMillis( );// 获得当前毫秒值
​ps.setDate(5,new java.sql.Date(time));ps.setDouble(6,4800);ps.setInt(7,1);
​// 4 执行int i = ps.executeUpdate( );System.out.println(i > 0 ?"OK":"ERR" );
​ps.close();conn.close();}

10.2 更新

 public static void main(String[] args) throws Exception {LocalDate localDate = LocalDate.of(1999, 10, 1);java.util.Date date = java.util.Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());User user = new User(1,"mlxg","6666","1111",date,6300,1);update(user);}
​// 更新public static void update(User user) throws Exception {Class.forName("com.mysql.jdbc.Driver");Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/java2311?useSSL=false", "root", "123456");
​// 1 sqlString sql = "update tb_user set username = ?,password = ? ," +"phone = ?,create_time = ?,money = ?,sex = ? " +"where id = ?";// 2 预处理PreparedStatement ps = conn.prepareStatement(sql);// 3 给?赋值ps.setString(1,user.getUsername());ps.setString(2,user.getPassword());ps.setString(3,user.getPhone());ps.setDate(4,new java.sql.Date(user.getCreateTime().getTime()));ps.setDouble(5,user.getMoney());ps.setInt(6,user.getSex());ps.setInt(7,user.getId());
​// 4 执行int i = ps.executeUpdate( );System.out.println(i > 0 ?"OK":"ERR" );
​ps.close();conn.close();}

10.3 删除

// 删除public static void delete() throws Exception {Class.forName("com.mysql.jdbc.Driver");Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/java2311?useSSL=false", "root", "123456");
​// 1 先写sqlString sql = "delete from tb_user where id = ?";// 2 预处理PreparedStatement ps = conn.prepareStatement(sql);// 3 ?赋值ps.setInt(1,4);// 4 执行int i = ps.executeUpdate( );System.out.println(i > 0 ?"OK":"ERR" );
​ps.close();conn.close();}

10.4 查询

// 根据id从数据库查询出用户信息public static User getUserById(int id) throws Exception {// 1 注册驱动Class.forName("com.mysql.Driver");// 2 获得连接String url = "jdbc:mysql://localhost:3306/java2301?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false";String username = "root";String password = "123456";Connection conn = DriverManager.getConnection(url, username, password);User user = null;// 3 预处理// 3.1 写sql,参数用?占位String sql = "select  * from tb_user where id = ?";// 3.2 预处理?号PreparedStatement ps = conn.prepareStatement(sql);// 3.3 给?赋值ps.setInt(1,id);
​// 4 执行sqlResultSet rs = ps.executeQuery( );
​if(rs.next()) {// 取出数据String username1 = rs.getString("username");String password1 = rs.getString("password");String phone = rs.getString("phone");Date createTime = rs.getDate("createTime");double money = rs.getDouble("money");int sex = rs.getInt("sex");
​// 封装数据user = new User();user.setId(id);user.setUsername(username1);user.setPassword(password1);user.setPhone(phone);user.setCreateTime(createTime);user.setMoney(money);user.setSex(sex);}
​return user;}// 设计方法,查询全部数据,返回值是List集合,集合中是全部用户数据public static List<User> findAll() throws Exception{// 1 注册驱动Class.forName("com.mysql.Driver");// 2 获得连接String url = "jdbc:mysql://localhost:3306/java2301?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false";String username = "root";String password = "123456";Connection conn = DriverManager.getConnection(url, username, password);ArrayList<User> list = new ArrayList<>( );User user = null;// 3.1 写sqlString sql = "select * from tb_user";// 3.2 处理sqlPreparedStatement ps = conn.prepareStatement(sql);
​// 4 执行ResultSet rs = ps.executeQuery( );
​
​while(rs.next()) {// 取出数据int id = rs.getInt("id");String username1 = rs.getString("username");String password1 = rs.getString("password");String phone = rs.getString("phone");Date createTime = rs.getDate("createTime");double money = rs.getDouble("money");int sex = rs.getInt("sex");
​// 封装数据user = new User();user.setId(id);user.setUsername(username1);user.setPassword(password1);user.setPhone(phone);user.setCreateTime(createTime);user.setMoney(money);user.setSex(sex);
​// 【重点】 将对象存储入集合list.add(user);}
​return list;}

十一、DbUtils【重点,理解,会用】

11.1 介绍

Apache DBUtils是一个流行的数据库工具库,它提供了一组简单、轻量级的工具和接口,用于简化与关系型数据库进行交互的过程。


  • ResultSetHandler接口:转换类型接口

    • BeanHandler类:实现类,把一条记录转换成对象

    • BeanListHandler类:实现类,把多条记录转换成List集合。

    • ScalarHandler类:实现类,适合获取一行一列的数据。

  • QueryRunner:执行sql语句的类

    • 增、删、改:update();

    • 查询:query();

11.2 依赖

 <dependency><groupId>commons-dbutils</groupId><artifactId>commons-dbutils</artifactId><version>1.7</version></dependency>

11.3 使用

public class Demo6 {public static void main(String[] args) throws Exception {// delete( );// insert();// selectOne();selectAll();}private static void delete() throws SQLException {// 加载驱动不再需要// 通过驱动管理器获得连接Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/java2313?useSSL=false", "root", "123456");// 创建sql执行器QueryRunner queryRunner = new QueryRunner( );/*** 参数1: 数据库连接对象* 参数2: sql语句字符串,也需要参数变?* 参数3: 给?赋值*/int i = queryRunner.update(conn, "delete from tb_user where id = ?", 6);System.out.println(i );DbUtils.closeQuietly(conn);}private static void insert() throws SQLException {Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/java2311?useSSL=false", "root", "123456");QueryRunner queryRunner = new QueryRunner( );Object[] params = {6,"zzz","123456","1111",new java.sql.Date(1),1000.0,1};/*** update()方法的第三个参数是不定长参数* 即可以传入任意个数的参数值* 不定长参数本质上其实是数组* -----------------------* 需要注意数组中的值的顺序需要和?的顺序一致*/int i = queryRunner.update(conn, "insert into tb_user values (?,?,?,?,?,?,?)", params);System.out.println(i );DbUtils.closeQuietly(conn);}// 查一个,封装private static void selectOne() throws SQLException {Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/java2311?useSSL=false", "root", "123456");// sql执行器QueryRunner queryRunner = new QueryRunner( );// 查询结果的对象处理器,作用是将查询结果直接封装成指定对象BeanHandler<User> handler = new BeanHandler<>(User.class);/*** 执行查询调用query方法* 参数1: 数据库连接* 参数2: sql语句,如果有参数用?* 参数3: 查询结果封装处理器* 参数4: 不定长参数,对?赋值*/User user = queryRunner.query(conn, "select * from tb_user where id = ?", handler, 1);System.out.println(user );DbUtils.closeQuietly(conn);}// 查询全部,使用集合存储对象private static void selectAll() throws SQLException {Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/java2311?useSSL=false", "root", "123456");// sql执行器QueryRunner queryRunner = new QueryRunner( );// 查询[多个结果]的对象处理器BeanListHandler<User> handler = new BeanListHandler<>(User.class);List<User> list = queryRunner.query(conn, "select * from tb_user", handler);list.forEach(s -> System.out.println(s ));DbUtils.closeQuietly(conn);}
}

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

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

相关文章

认识结构体

目录 一.结构体类型的声明 1.结构的声明 2.定义结构体变量 3.结构体变量初始化 4.结构体的特殊声明 二.结构体对齐(重点难点) 1.结构体对齐规则 2.结构体对齐练习 (一)简单结构体对齐 (二)嵌套结构体对齐 3.为什么存在内存对齐 4.修改默认对齐数 三.结构体传参 1…

Object类代码结构

Object Object是所有类的父类。 方法结构如下 一些不知道的方法 private static native void registerNatives(); * JNI机制 * 这里定义了一个 native 方法 registerNatives()&#xff0c;它没有方法体。 * native 关键字表示这个方法的实现是由本地代码 * &#xff08;通常…

【Pytorch】一文快速教你高效使用torch.no_grad()

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 博主简介 博主致力于嵌入式、Python、人工智能、C/C领域和各种前沿技术的优质博客分享&#xff0c;用最优质的内容带来最舒适的…

BERT的代码实现

目录 1.BERT的理论 2.代码实现 2.1构建输入数据格式 2.2定义BERT编码器的类 2.3BERT的两个任务 2.3.1任务一&#xff1a;Masked Language Modeling MLM掩蔽语言模型任务 2.3.2 任务二&#xff1a;next sentence prediction 3.整合代码 4.知识点个人理解 1.BERT的理论 B…

Linux 静态库与动态库的制作与使用

在Linux中&#xff0c;库library是一组函数和资源的集合&#xff0c;他们可以被不同的程序共享和使用&#xff0c;库的主要目的是代码重用&#xff0c;减少内存占用&#xff0c;并简化程序的维护。 Linux操作系统支持的函数库分为&#xff1a;静态库和动态库。 静态库&#xf…

【线程池】Tomcat线程池

版本&#xff1a;tomcat-embed-core-10.1.8.jar 前言 最近面试被问到 Tomcat 线程池&#xff0c;因为之前只看过 JDK 线程池&#xff0c;没啥头绪。在微服务横行的今天&#xff0c;确实还是有必要研究研究 Tomcat 的线程池 Tomcat 线程池和 JDK 线程池最大的不同就是它先把最…

二分+优先队列例题总结(icpc vp+牛客小白月赛)

题目 思路分析 要求输出最小的非负整数k&#xff0c;同时我们还要判断是否存在x让整个序列满足上述条件。 当k等于某个值时&#xff0c;我们可以得到x的一个取值区间&#xff0c;若所有元素得到的x的区间都有交集(重合)的话,那么说明存在x满足条件。因为b[i]的取值为1e9&…

Maven-一、分模块开发

Maven进阶 文章目录 Maven进阶前言创建新模块向新模块装入内容使用新模块把模块部署到本地仓库补充总结 前言 分模块开发可以把一个完整项目中的不同功能分为不同模块管理&#xff0c;然后模块间可以相互调用&#xff0c;该篇以一个SSM项目为目标展示如何使用maven分模块管理。…

没错,我给androidx修了一个bug!

不容易啊&#xff0c;必须先截图留恋&#x1f601; 这个bug是发生在xml中给AppcompatTextView设置textFontWeight&#xff0c;但是却无法生效。修复bug的代码也很简单&#xff0c;总共就几行代码&#xff0c;但是在找引起这个bug的原因和后面给androidx提pr却花了很久。 //App…

云手机的海外原生IP有什么用?

在全球数字化进程不断加快的背景下&#xff0c;企业对网络的依赖程度日益加深。云手机作为一项创新的工具&#xff0c;正逐步成为企业优化网络结构和全球业务拓展的必备。尤其是云手机所具备的海外原生IP功能&#xff0c;为企业进入国际市场提供了独特的竞争优势。 什么是海外原…

DNF Decouple and Feedback Network for Seeing in the Dark

DNF: Decouple and Feedback Network for Seeing in the Dark 在深度学习领域&#xff0c;尤其是在低光照图像增强的应用中&#xff0c;RAW数据的独特属性展现出了巨大的潜力。然而&#xff0c;现有架构在单阶段和多阶段方法中都存在性能瓶颈。单阶段方法由于域歧义&#xff0c…

如何使用 3 种简单的方法将手写内容转换为文本

手写比文本更具艺术性&#xff0c;这就是许多人追求手写字体的原因。有时&#xff0c;我们必须将手写内容转换为文本&#xff0c;以便于存储和阅读。本文将指导您如何轻松转换它。 此外&#xff0c;通常以扫描的手写内容编辑文本很困难&#xff0c;但使用奇客免费OCR&#xff…

视觉距离与轴距离的转换方法

1.找一个明显的参照物&#xff0c;用上方固定的相机拍一下。保存好图片 2.轴用定长距离如1mm移动一下。 3.再用上相机再取一张图。 4.最后用halcon 将两图叠加 显示 效果如下 从图上可以明显的看出有两个图&#xff0c;红色标识的地方。 这时可以用halcon的工具画一个长方形…

Cesium 绘制可编辑点

Cesium Point点 实现可编辑的pointEntity 实体 文章目录 Cesium Point点前言一、使用步骤二、使用方法二、具体实现1. 开始绘制2.绘制事件监听三、 完整代码前言 支持 鼠标按下 拖动修改点,释放修改完成。 一、使用步骤 1、点击 按钮 开始 绘制,单击地图 绘制完成 2、编辑…

误差评估,均方误差、均方根误差、标准差、方差

均方根误差 RMSE/RMS 定义 RMSE是观察值与真实值偏差的平方&#xff0c;对于一组观测值 y i y_i yi​ 和对应的真值 t i t_i ti​ R M S E 1 n ∑ i 1 n ( y i − t i ) &#xff0c;其中n是观测次数 RMSE\sqrt{\frac1n \sum_{i1}^n (y_i-t_i)} \text{&#xff0c;其中n是…

2.个人电脑部署MySQL,傻瓜式教程带你拥有个人金融数据库!

2.个人电脑部署MySQL&#xff0c;傻瓜式教程带你拥有个人金融数据库&#xff01; ‍ 前边我们提到&#xff0c;比较适合做量化投研的数据库是MySQL&#xff0c;开源免费。所以今天我就写一篇教程来教大家如何在自己的环境中部署MySQL。 在不同的设备或系统中安装MySQL的步骤…

局部凸空间及其在算子空间中的应用之四——归纳极限空间2

局部凸空间及其在算子空间中的应用之四——归纳极限空间2 前言一、归纳极限拓扑中极限的含义总结 数学的真理是绝对的&#xff0c;它超越了时间和空间。——约翰冯诺伊曼 前言 在上一篇文章中&#xff0c;我们讨论了归纳极限拓扑的概念和与连续线性算子有关的一个重要结论。认…

为什么编程很难?

之前有一个很紧急的项目&#xff0c;项目中有一个bug始终没有被解决&#xff0c;托了十几天之后&#xff0c;就让我过去协助解决这个bug。这个项目是使用C语言生成硬件code&#xff0c;是更底层的verilog&#xff0c;也叫做HLS开发。 项目中的这段代码并不复杂&#xff0c;代码…

postman控制变量和常用方法

1、添加环境&#xff1a; 2、环境添加变量&#xff1a; 3、配置不同的环境&#xff1a;local、dev、sit、uat、pro 4、 接口调用 5、清除cookie方法&#xff1a; 6、下载文件方法&#xff1a;

calibre-web报错:File type isn‘t allowed to be uploaded to this server

calibre-web报错&#xff1a;File type isnt allowed to be uploaded to this server 最新版的calibre-web在Upload时候会报错&#xff1a; File type isnt allowed to be uploaded to this server 解决方案&#xff1a; Admin - Basic Configuration - Security Settings 把…