首页 > 其他分享 >基于preparedStatement对数据的增删改查,以及全自动遍历

基于preparedStatement对数据的增删改查,以及全自动遍历

时间:2024-03-05 22:12:31浏览次数:20  
标签:遍历 resultSet mysql 改查 connection preparedStatement sql jdbc

  1 package com.atsyc.api.preparedstatement;
  2 
  3 /*
  4  * 使用preparedStatement进行t_user表的增删改查动作
  5  */
  6 
  7 import com.mysql.cj.xdevapi.PreparableStatement;
  8 import org.junit.Test;
  9 
 10 import java.sql.*;
 11 import java.util.*;
 12 
 13 public class PSCURDPart {
 14     //测试方法:需要导入junit的测试包
 15     @Test
 16     public void testInsert() throws ClassNotFoundException, SQLException {
 17         /*
 18          * t_user插入一条数据
 19          *      account  test
 20          *      password  test
 21          *      nickname  测试员
 22          */
 23         //1.注册驱动
 24         Class.forName("com.mysql.cj.jdbc.Driver");
 25         //2.获取连接
 26         Connection connection = DriverManager.getConnection("jdbc:mysql:///atsyc","root","Yican030615");
 27         //3.编写SQL语句结果,动态值的部分使用?代替
 28         String sql = "INSERT into t_user(account,password,nickname) value(?,?,?);";
 29         //4.创建preparedStatement,并且传入SQL语句结果
 30         PreparedStatement preparableStatement = connection.prepareStatement(sql);
 31         //5.占位符赋值
 32         preparableStatement.setObject(1,"test");
 33         preparableStatement.setObject(2,"test");
 34         preparableStatement.setObject(3,"测试员");
 35         //6.发送SQL语句
 36             //DML类型
 37         int rows = preparableStatement.executeUpdate();
 38         //7.输出结果
 39         if(rows > 0){
 40             System.out.println("数据插入成功!");
 41         }else{
 42             System.out.println("数据插入失败!");
 43         }
 44         //8.关闭资源
 45         preparableStatement.close();
 46         connection.close();
 47     }
 48 
 49     @Test
 50     public void testUpdate() throws ClassNotFoundException, SQLException {
 51         Class.forName("com.mysql.cj.jdbc.Driver");
 52         Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/atsyc","root","Yican030615");
 53         String sql = "UPDATE t_user SET nickname=? WHERE id=?;";
 54         PreparedStatement preparedStatement = connection.prepareStatement(sql);
 55         preparedStatement.setObject(1,"测试员cc");
 56         preparedStatement.setObject(2,3);
 57         int rows = preparedStatement.executeUpdate();
 58         if(rows > 0){
 59             System.out.println("数据修改成功!");
 60         }else{
 61             System.out.println("数据修改失败!");
 62         }
 63         preparedStatement.close();
 64         connection.close();
 65 
 66     }
 67 
 68     @Test
 69     public void testDelete() throws ClassNotFoundException, SQLException {
 70         Class.forName("com.mysql.cj.jdbc.Driver");
 71         Connection connection = DriverManager.getConnection("jdbc:mysql///atsyc","root","Yican030615");
 72         String sql = "DELETE from t_user WHERE id = ?;";
 73         PreparedStatement preparedStatement = connection.prepareStatement(sql);
 74         preparedStatement.setObject(1,3);
 75         int rows = preparedStatement.executeUpdate();
 76         if(rows > 0){
 77             System.out.println("数据删除成功!");
 78         }else{
 79             System.out.println("数据删除失败!");
 80         }
 81         preparedStatement.close();
 82         connection.close();
 83 
 84     }
 85 
 86     @Test
 87     public void testSelect() throws ClassNotFoundException, SQLException {
 88         /*
 89          * 目标:查询所有用户数据,并且封装到一个List<Map> list集合中
 90          *
 91          * 解释:
 92          *      行    id  account  password  nickname
 93          *
 94          * 数据库 -> resultSet -> java -> 一行 - map(key=lieming,value=列的内容) -> List<Map> list
 95          *
 96          * 实现思路:
 97          *      遍历行数据,一行对应一个map  获取一行的列名和对应的列的属性,装配即可
 98          *
 99          * 难点:
100          *      如何获取列的名称
101          *
102          */
103         Class.forName("com.mysql.cj.jdbc.Driver");
104         Connection connection = DriverManager.getConnection("jdbc:mysql:///atsyc?user=root&password=Yican030615");
105         String sql = "SELECT id,account,password,nickname FROM t_user;";
106         PreparedStatement preparedStatement = connection.prepareStatement(sql);
107         ResultSet resultSet = preparedStatement.executeQuery();
108 
109         //结果集解析
110         List<Map> list = new ArrayList<>();
111         //获取列的信息对象
112             //TODO:metaData 装的当前结果集列的信息对象(可以获取列的名称根据下角标,可以获取列的数量)
113         ResultSetMetaData metaData = resultSet.getMetaData();
114             //写了下面这句可以获取列数,水平遍历列
115         int columnCount = metaData.getColumnCount();
116         while (resultSet.next()){
117             Map map = new HashMap();
118             //一行数据对应一个map
119             /*  纯手动取值,不推荐
120                 map.put("id",resultSet.getInt("id"));
121                 map.put("account",resultSet.getString("account"));
122                 map.put("password",resultSet.getString("password"));
123                 map.put("nickname",resultSet.getString("nickname"));
124              */
125             //TODO:自动遍历列要从 1 开始,并且小于等于总列数
126             for(int i = 1 ; i <= columnCount ; i++){
127                 //获取指定列下角标的值  获取值相关用resultSet对象
128                 Object value = resultSet.getObject(i);
129                 //获取指定列下角标的名称  获取名相关用metaData对象
130                 // select * [列名] | xxx_xxx_xx_syc as name
131                 //要用getColumnLabel:会获取别名,如果没有写别名才是列的名称  不要用getColumnName:只会获取列的名称
132                 String columnLabel = metaData.getColumnLabel(i);
133                 map.put(columnLabel,value);
134             }
135             //一行数据的所有列全存到了map中,将map存储到集合中
136             list.add(map);
137         }
138         System.out.println("list = " + list);
139         resultSet.close();
140         preparedStatement.close();
141         connection.close();
142     }
143 
144 }

 

标签:遍历,resultSet,mysql,改查,connection,preparedStatement,sql,jdbc
From: https://www.cnblogs.com/IrVolcano/p/18055116

相关文章

  • 基于preparedStatement方式优化
    1packagecom.atsyc.api.preparedstatement;23/*4*使用预编译statement完成用户登录5*6*TODO:7*防止注入攻击,演示preparedstatement完成用户登录8*/910importjava.sql.*;11importjava.util.Scanner;1213publicclassPSUserLogi......
  • EQS——修改查询情境
    简介将检测员设为指定的AI(自定义检测员)步骤1.新建一个环境查询情境蓝图2.由于场景中可能有多个相同的AI,因此这里选择提供Actor集3.然后修改EQS中的生成器......
  • Axure中继器高阶玩法-列表的增删改查
    1.效果展示2.实现步骤设计原理:新增修改时,对新增或标记的内容,插入中继器中,列表再展示中继器内的内容2.1.前提步骤●页面及样式设计,如下。建立查询条件、查询框、按钮、新增/修改/删除弹窗(最好是用一个动态面板完成,这样弹窗位置固定且页面展示有条理不会显得臃肿)、列表名、列表......
  • 基于statement,明确jdbc流程,发现问题,引出preparedstatement
    packagecom.atsyc.api.statement;importcom.mysql.cj.jdbc.Driver;importjava.sql.*;importjava.util.Properties;importjava.util.Scanner;/**TODO:*1.明确jdbc的使用流程和详细讲解内部设计api方法*2.发现问题,引出preparedStatement......
  • 洛谷题单指南-搜索-P1443 马的遍历
    原题链接:https://www.luogu.com.cn/problem/P1443题意解读:无论是国际象棋还是中国象棋,马的活动范围都是一样的:只不过国际象棋棋子是在格子中,中国象棋棋子是在交点,坐标的变化方式是一样的,根据此活动范围,计算马到达每一个点的最短路径。解题思路:根据马的活动范围,在棋盘内进行B......
  • 关于HashMap遍历的四种方式,以及为什么要用entry
    1.问题如何遍历HashMap,以及其中一种遍历方式中,我们为何需要先转为Map.Entry后,再遍历Map呢?而且是比较推荐的方式?2.解决参考:关于HashMap遍历,为什么要用entryHashMap中推荐使用entrySet方式遍历Map类集合KV而不是keySet方式遍历2.1为何使用Map.Entry阅读《阿里巴巴Java开发手......
  • js 遍历替换
    constreplaceIterator=(content,pattern,replacement)=>{letindex=0;letarr=[];while(true){constres=content.match(pattern);if(res===null){if(content.length){arr.push(content);}......
  • ThinkPHP6实现增删改查接口
    ThinkPHP增删改查接口实现数据库连接配置当.env文件中存在数据库配置时,这些配置会覆盖config/database.php中的相应配置。在config/database.php中设置数据库连接的默认值或开发环境的值,并在.env文件中根据实际部署环境(如测试或生产环境)覆盖这些值。这样,你可以通过更改环境变量......
  • 买卖股票的最佳时机——差值的最值的遍历寻找
    题目描述:给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。(1)只能选择某一天买入这只股票,并选择在未来的某一个不同的日子卖出该股票。设计一个算法来计算所能获取的最大利润。返回可以从这笔交易中获取的最大利润。如果不能获取任何利润......
  • 94. 二叉树的中序遍历c
    /***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*//***Note:Thereturnedarraymustbemalloced,assumecallercallsfree().*/voidinorder(structTre......