PreparedStatement解决SQL注入、SQL语句批量执行以及如何获取自增主键的值

本文介绍了PreparedStatement在处理SQL注入、批量执行SQL及获取自增主键方面的优势。使用PreparedStatement能预编译SQL,避免SQL注入,提高代码安全性和执行效率。同时,文章还提及了批量执行SQL的方法及其效率提升,以及如何获取执行插入操作后生成的自增主键值。
摘要由CSDN通过智能技术生成

PreparedStatement的使用

什么是SQL注入?

  • 即本来应该是值的位置,添加进去了SQL语句
    例:——注入的内容:or ‘1’=’1’
    在这里插入图片描述

如何处理?

  • 使用PreparedStatement,将编译期改为预编译
  • 好处:由于创建对象时已经将SQL语句逻辑部分编译完成,所以不会被用户的输入内容所影响
    ,从而解决SQL注入的问题

与statement相比的优势?

——编译时将SQL语句的逻辑锁死
好处:代码结构整洁,不易出错,可以避免SQL注入

什么时候使用?

当SQL语句中有变量时使用PreparedStatement,反之使用Statement
————————————————————————————————————————

package DBCP;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;

import org.junit.Test;

public class 模拟登录 {
   
	@Test
	public void create() {
   
		try(Connection connection = DBUtils.getConnection()){
   
			Scanner scanner = new Scanner(System.in);
			System.out.println("输入账号");
			String username = scanner.nextLine();
			System.out.println("输入密码");
			String password = scanner.nextLine();
			/*
			Statement statement = connection.createStatement();
			String sql = "select count(*) from jduser where username='"+username+"' and password='"+password+"' or '1'='1'";
			ResultSet rs = statement.executeQuery(sql);
			*/
			String sql = "select count(*) from jduser where username=? and password=?";
			//预编译的SQL执行对象,创建对象时对SQL语句进行了编译
			/**
			 * 由于创建对象时已经将SQL语句逻辑部分编译完成
			 * 后期不会被用户输入的内容所影响
			 * 从而解决了SQL注入的问题
			 */
			PreparedStatement ps = connection.prepareStatement(sql);
			//setString方法替换掉sql中的?,1代表第一个问号,username代表替换进去的值
			ps.setString(1, username);
			ps.setString(2, password);
			//此时exe
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值