使用的数据库 MariaDB 10.5.4版本   端口1054     数据库为jt_db,表 为user

数据库的建表和插入相关数据代码:

create table user(
id int primary key auto_increment,
username varchar(50),
password varchar(50)
); insert into user values(null,"张三","123");
insert into user values(null,"李四","234");

其中使用到的JdbcUtil 类参见:https://www.cnblogs.com/lxsfve/p/13232402.html

package day02;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Scanner; /**
* @author 小小的梦想丶
* @create 2020-07-03 19:13:01
* @desc 练习 prepareStatement 防止sql 注入
*/
public class loginByPreparedSatementTest {
public static void main(String[] args) throws Exception {
// 根据用户名和密码查询用户信息
// 提示用户输入 账号 密码
Scanner sc = new Scanner(System.in);
System.out.println("请登录!!");
System.out.println("请输入账号>>>");
String user = sc.nextLine();
System.out.println("请输入密码>>>");
String pwd = sc.nextLine(); // 执行login 方法
login(user, pwd);
} private static void login(String user, String pwd) throws Exception {
// 通过 jdbcutil 获取数据库连接
Connection conn = JdbcUtil.getConn();
// 获取 传输器 执行sql 语句
String sql = "select * from user where username=? and password=?";
PreparedStatement ps = conn.prepareStatement(sql);
// 设置参数
ps.setString(1, user);
ps.setString(2, pwd);
// 执行sql 语句 这里不需要传sql 语句 返回结果
ResultSet rs = ps.executeQuery(); // 处理结果
// 如果 账号密码正确 则能在数据库中查询到相应得结果 也就是 rs里面有值
if (rs.next()) {
System.out.println("登录成功!!!");
} else {
System.out.println("账号密码错误,请重新输入!!!");
}
}
}

  

PreparedStatement 防止sql注入 练习的更多相关文章

  1. PreparedStatement解决sql注入问题

    总结 PreparedStatement解决sql注入问题 :sql中使用?做占位符 2.得到PreparedStatement对象 PreparedStatement pst=conn.prepar ...

  2. 回头探索JDBC及PreparedStatement防SQL注入原理

    概述 JDBC在我们学习J2EE的时候已经接触到了,但是仅是照搬步骤书写,其中的PreparedStatement防sql注入原理也是一知半解,然后就想回头查资料及敲测试代码探索一下.再有就是我们在项 ...

  3. JDBC及PreparedStatement防SQL注入

    概述 JDBC在我们学习J2EE的时候已经接触到了,但是仅是照搬步骤书写,其中的PreparedStatement防sql注入原理也是一知半解,然后就想回头查资料及敲测试代码探索一下.再有就是我们在项 ...

  4. 利用PreparedStatement预防SQL注入

    1.什么是sql注入 SQL 注入是用户利用某些系统没有对输入数据进行充分的检查,从而进行恶意破坏的行为. 例如登录用户名采用  ' or 1=1 or username=‘,后台数据查询语句就变成 ...

  5. 【Hibernate实战】源码解析Hibernate参数绑定及PreparedStatement防SQL注入原理

        本文采用mysql驱动是5.1.38版本. 本篇文章涉及内容比较多,单就Hibernate来讲就很大,再加上数据库驱动和数据库相关,非一篇文章或一篇专题就能说得完.本文从使用入手在[Spr ...

  6. jdbc PreparedStatement 防止sql注入的关键代码片段

    mysql-connector-java-5.1.38.jar PreparedStatement 的 setString(int parameterIndex, String x) 方法 for ( ...

  7. jdbc java数据库连接 8)防止sql注入

    回顾下之前jdbc的开发步骤: 1:建项目,引入数据库驱动包 2:加载驱动 Class.forName(..); 3:获取连接对象 4:创建执行sql语句的stmt对象;  写sql 5:执行sql ...

  8. Java学习之路- SQL注入

    用户名: __________ 密码:——————— 假如没有使用预处理的Statement 对象 拼接字符串查数据库的话,易收到sql注入攻击: 例如说 : mysql 中   #代表的是单行注释 ...

  9. Web安全篇之SQL注入攻击

    在网上找了一篇关于sql注入的解释文章,还有很多技术,走马观花吧 文章来源:http://www.2cto.com/article/201310/250877.html ps:直接copy,格式有点问 ...

随机推荐

  1. Python API自动化测试实操

    废话不多说,直接上代码截图: 我们首先来看看整个工程的目录结构,这样以便于了解项目的调用关系:config   #这里是配置包 -- base_url.py 具体配置了被测系统的url and pat ...

  2. Spring事务的传播属性

    前言 Spring在TransactionDefinition接口中规定了7种类型的事务传播行为.事务传播行为是Spring框架独有的事务增强特性,他不属于的事务实际提供方数据库行为.这是Spring ...

  3. Nginx跨域及Https配置

    一.跨域 1. 什么是跨域? 跨域:指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制(指一个域下的文档或脚本试图去请求另一个域下的资源,这 ...

  4. iOS-NSString常见方法

    </pre><pre name="code" class="html">#import <Foundation/Foundatio ...

  5. 【1】Vim 进阶操作

    一.标签 :tabnew one.c 新建标签[♥] 常用 :tabc 关闭文件   :tabp 切换前一个页面   :tabn 切换下一个页面   gt 普通模式下操作 常用 二.窗口 :sp 水平 ...

  6. Flask简单http接口实现

    # flask demo from flask import Flask, request app = Flask(__name__) # http://127.0.0.1:8080 @app.rou ...

  7. Android官方新推的DI库 Hilt

    Android官方新推的DI库 Hilt Hilt是Google Android官方新推荐的依赖注入工具. 已加入到官方文档: Dependency injection with Hilt. 目前是a ...

  8. 使用Bundle在Activity中交换数据

    大概过程 编写demo activity_main.xml <?xml version="1.0" encoding="utf-8"?> <R ...

  9. JVM面试题总结

    1.介绍下 Java 内存区域(运行时数据区) Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域. JDK 1.8之前主要分为:堆.方法区.虚拟机栈.本地方法栈 ...

  10. cb27a_c++_STL_算法_最小值和最大值

    cb27a_c++_STL_算法_最小值和最大值min_element(b,e) b--begin(), e--end()min_element(b,e,op). op:函数,函数对象,一元谓词.ma ...