当前位置: 首页 > news >正文

jdbc学习——SQL注入

SQL注入介绍

  • SQL注入是通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法。

用户登录的本质:执行下面的sql语句

select * from tb_user where username = 'zhangsan' and password = '123';

发生sql注入的本质 

 解决SQL注入的方法(PreparedStatement预编译SQL

PreparedStatement作用:  预编译SQL并执行SQL语句  
① 获取 PreparedStatement 对象  

// SQL语句中的参数值,使用?占位符替代  
String sql = "select * from user where username = ? and password = ?";  
// 通过Connection对象获得,并传入对应的sql语句  
PreparedStatement pstmt = conn.prepareStatement(sql);  

② 设置参数值  
PreparedStatement对象:setXxx(参数1, 参数2):给?赋值(如果是增删改语句也是通过?来赋值)  
Xxx:数据类型;如setInt(参数1, 参数2)  
参数:  

  •   参数1:?的位置编号,从1开始  
  •   参数2:?的值  

③ 执行SQL  

executeUpdate();

如果是INSERT、UPDATE或DELETE语句则executeQuery();它返回一个整数,表示执行的行数;不管是那种都不需要再传递sql 

        //1. 注册驱动Class.forName("com.mysql.jdbc.Driver");//2. 获取连接String url = "jdbc:mysql:///dqlsearch?useSSL=false";String username = "root";String password = "123456";Connection conn = DriverManager.getConnection(url, username, password);// 要查询的具体数据String math_score = "72";String chinese_score = "70";// 定义sqlString sql = "select * from studentscore where chinese_score = ? and math_score = ?";// 获取pstmt对象,同时进行预编译PreparedStatement pstmt = conn.prepareStatement(sql);// 设置?的值pstmt.setString(1, chinese_score);pstmt.setString(2, math_score);// 执行sqlResultSet rs = pstmt.executeQuery();if(rs.next()){System.out.println("找到了");}else{System.out.println("没找到");}// 释放资源rs.close();pstmt.close();conn.close();

数据库连接池简介

  • 数据库连接池是个容器,负责分配、管理数据库连接(Connection)
  • 它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个;
  • 释放空间时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接资源浪费

好处:

  • 资源重用
  • 提升系统响应速度
  • 避免数据库连接资源浪费

Driud使用步骤

  1. 导入jar包druid-1.1.12.jar
  2. 定义配置文件
  3. 加载配置文件
  4. 获取数据库连接池对象
  5. 获取连接

http://www.lryc.cn/news/490758.html

相关文章:

  • JavaEE-线程安全专题
  • Android 设备使用 Wireshark 工具进行网络抓包
  • 物联网无线局域网WiFi开发(一):WiFi智能家居解决方案
  • GMAN解读(论文+代码)
  • 速盾:ddos防御手段哪种比较好?高防cdn怎么样?
  • Spring:AOP切入点表达式
  • 《文件操作》
  • python特殊字符序列
  • 卷积神经网络(CNN)中的批量归一化层(Batch Normalization Layer)
  • LLaMA-Mesh: Unifying 3D Mesh Generation with Language Models 论文解读
  • 【ESP32CAM+Android+C#上位机】ESP32-CAM在STA或AP模式下基于UDP与手机APP或C#上位机进行视频流/图像传输
  • ESP-KeyBoard:基于 ESP32-S3 的三模客制化机械键盘
  • 28.UE5游戏框架,事件分发器,蓝图接口
  • Puppeteer 和 Cheerio 在 Node.js 中的应用
  • Unity2D 关于N方向俯视角 中 角色移动朝向的问题
  • pytorch 和tensorflow loss.item()` 只能用于只有一个元素的张量. 防止显存爆炸
  • 链表刷题|判断回文结构
  • 海盗王集成网关和商城服务端功能golang版
  • SCI 中科院分区中位于4区,JCR分区位于Q2 是什么水平?
  • 微知-Mellanox网卡的另外一种升级方式mlxup?(mlxup -d xxx -i xxx.bin)
  • 《Shader入门精要》透明效果
  • Linux之SELinux与防火墙
  • 深度学习使用LSTM实现时间序列预测
  • Vue第一篇:组件模板总结
  • 时钟使能、
  • 1. Autogen官网教程 (Introduction to AutoGen)
  • 开源账目和账单
  • vue2面试题10|[2024-11-24]
  • c语言与c++到底有什么区别?
  • 云计算-华为HCIA-学习笔记