java ftp测试连接程序_「酒窝说:」java程序员,预编译执行计划连接DB防止sql注入...

c597f8aedcafcd39b7be6a56446f4210.png

PreparedStatement:用来执行带参数的预编译执行计划

执行计划:

1.任何sql执行过程都是先编译“执行计划” 再执行“执行计划”

2.数据库为了优化性能,在sql相同时,会重用计划 ,因为执行计划编译较慢,所以重用执行计划可以提高数据库性能

3.数据库只在sql语句完全一样是时才会重用相同的执行计划,

如果sql语句中有一个字符不同,都会重新执行不同的执行计划;

PreparedStatement对象的作用:

1.可以重复使用执行计划,提供数据库效率

2.可以防止sql注入

Mysql数据库(table):

4912375d3bd8e356dfebbcfe9ab89ddf.png
代码实现:package JDBC;import java.sql.ResultSet;import java.sql.SQLException;import java.util.Scanner;import com.mysql.jdbc.Connection;import com.mysql.jdbc.PreparedStatement;import com.mysql.jdbc.Statement;public class PreparedDemo2 { public static void main(String[] args) { Connection conn = null; try { Scanner sc = new Scanner(System.in);  conn = DBtools.getConnection();// Statement st= (Statement) conn.createStatement(); System.out.println("输入查询的名字:"); String n = sc.nextLine(); // String sql = "UPDATE demo SET name=? where id=?";// String sql = "INSERT INTO demo(id,name) values(?,?)";// String sql = "DELETE from demo where id=?"; //用户输入含有sql成分的参数,参数在拼接sql的时候sql语句的语义转变 /** * 如何避免 * 1.拦截用户输入的sql成分 * 2.固定执行计划,避免改变执行逻辑 */// String sql ="select * from demo where name = '"+n+"' "; String sql ="select * from demo where name = ?"; java.sql.PreparedStatement ps = conn.prepareStatement(sql); ps.setString(1, n); ResultSet rs = ps.executeQuery(); while(rs.next()) { int id =rs.getInt("id"); String name = rs.getString("name"); System.out.println(id+
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值