首页 > 数据库 >JDBC防止SQL注入

JDBC防止SQL注入

时间:2023-01-28 15:12:32浏览次数:53  
标签:JDBC String SQL System sql import 注入

JDBC防止SQL注入

1.PreparedStatement的应用

作用:1.预编译sql语句,效率高

2.安全,防止sql注入

3.可以动态的填充数据,执行多个同构的SQL语句

 

package com.qf.JDBC;
​
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Scanner;
​
public class JDBC防注入 {
    public static void main(String[] args) throws Exception {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入用户名:");
        String username = scanner.nextLine();//next遇到空格结束,nextline能读取空格
        System.out.println("请输入钱数:");
        String money = scanner.nextLine();
        //注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //获得数据库连接
        String url = "jdbc:mysql://localhost:3306/jdbc?serverTimezone=UTC";
        String name ="root";
        String password = "123456";
        Connection connection = DriverManager.getConnection(url,name,password);
​
        //执行sql语句
        //获得PreparedStatement对象,预编译Sql语句
        PreparedStatement preparedStatement = connection.prepareStatement("select * from accounts where name =? and money=?;");
        //每一个参数都有一个占位符?,在执行SQL语句之前,要给占位符赋值,占位符顺序从一开始
        preparedStatement.setString(1,username);
        preparedStatement.setString(2,money);
        //执行sql语句,并接收结果
        ResultSet resultSet = preparedStatement.executeQuery();
        if(resultSet.next()){
            System.out.println("登录成功!");
        }else{
            System.out.println("登录失败!");
        }
    }
​
​
}

运行结果:

请输入用户名:
A
请输入钱数:
1000
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
登录成功!

 

标签:JDBC,String,SQL,System,sql,import,注入
From: https://www.cnblogs.com/zhangtiedangg/p/17070332.html

相关文章

  • centos7 安装mysql8 亲测有效
    1、清理历史安装的mysql【初次安装可以跳过】查看mysql安装了哪些东西rpm-qa|grep-imysql开始卸载yumremove[上述命令查看到的包]查看是否卸载完成rpm-qa......
  • 为什么大表会导致MySQL变慢
    虽然技术已经发展成熟,但仍有一些人认为MySQL仅适用于小型项目,或者它不能很好地处理大型表。一些初创公司在早期就采用了MySQL,如Facebook、Uber、Pinterest等,这些公司现在......
  • JdbcTemplate的使用
    配置文件注入<beanid="jdbcTemplateIeCenter"class="org.springframework.jdbc.core.JdbcTemplate"> <propertyname="dataSource"ref="XXDataSource"></property> <......
  • 理解MySQL的THREAD_ID和PROCESSLIST_ID
    每个线程至少有两个唯一标识符,一个是操作系统线程ID,另一个是MySQL内部线程ID,MySQL内部线程ID在大多数performance_schema表中以thread_id命名。每个前台线程都有一个指定的p......
  • EAS查询分析器通过SQL分页查询数据
    --通过分页查询不在费用报销单中的商务卡流水数据select*from(selectt.*,row_number()over(orderbyt.CFSerialNumber)rownofrom(--这里查询出来的是不在费......
  • JDBC之Sql注入问题
    JDBC之Sql注入问题用户输入的数据包括sql关键字或者语法,导致sql查询时where后面的条件固定为truesql注入的语法1.用户名+‘+or1=1;#案例packagecom.qf.JDBC;​impo......
  • MySQL索引底层探究
    一、什么是索引?索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。索引是一种数据结构。数据库索引,是数据库......
  • Springboot + Vue ElementUI 实现MySQL可视化
    一、功能展示:效果如图: DB连接配置维护:  Schema功能:集成Screw生成文档,导出库的表结构,导出表结构和数据  表对象操作:翻页查询,查看创建SQL,生成代码可以单个代......
  • Oracle根据符号分隔字段内字符串后SQL查询数据方法
    --从WITH函数子查询中获取需要的数据SELECTCOUNT(*)FROMCT_BC_BUSINESSCARDFLOWt1WHEREt1.CFSerialNumberNOTIN(--利用WITH函数实现子查询(当做内联视图或者临......
  • MySql分库分表
    MySql分库分表分库分表策略当数据量达到一定程度时,我们出于性能考虑就需要将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面,以达到分散单台设备负载的效果......