MySQL三十三:PrepareStatement对象

PrepareStatement 可以防止SQL注入,并且效率高!

1、新增

package lesson03;import lesson02.utils.JdbcUtils;import java.sql.*;public class TestInsert {public static void main(String[] args) {Connection conn =null;PreparedStatement st=null;ResultSet rs=null;try {// Connection connection = JdbcUtils.getConnection();conn = JdbcUtils.getConnection();//PreparedStatement preparedStatement = conn.prepareStatement();//使用?占位符代替参数String sql="insert into users (id,`name`,`password`,`email`,`birthday`) values(?,?,?,?,?)";st = conn.prepareStatement(sql);  //预编译SQL,先写sql,然后不执行//手动给参数赋值st.setInt(1,4); //idst.setString(2,"xiaoliu");st.setString(3,"123456");st.setString(4,"30666864@qq.com");// 注意点  sql.Date 数据库    java.sql.Date()//        util.Date  JAVA   new Date().getTime()st.setDate(5,new java.sql.Date(new java.util.Date().getTime()));//执行int i = st.executeUpdate();if (i>0){System.out.println("插入成功!!!");}} catch (SQLException throwables) {throwables.printStackTrace();}finally {JdbcUtils.release(conn,st,rs);}}
}

2、删除

package lesson03;import lesson02.utils.JdbcUtils;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class TestDelete {public static void main(String[] args) {Connection conn =null;PreparedStatement st=null;ResultSet rs=null;try {// Connection connection = JdbcUtils.getConnection();conn = JdbcUtils.getConnection();//PreparedStatement preparedStatement = conn.prepareStatement();//使用?占位符代替参数String sql="DELETE FROM users WHERE id=?";st = conn.prepareStatement(sql);  //预编译SQL,先写sql,然后不执行//手动给参数赋值st.setInt(1,4);//执行int i = st.executeUpdate();if (i>0){System.out.println("删除成功!!!");}} catch (SQLException throwables) {throwables.printStackTrace();}finally {JdbcUtils.release(conn,st,rs);}}
}

3、更新

package lesson03;import lesson02.utils.JdbcUtils;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class TestUpdate {public static void main(String[] args) {Connection conn =null;PreparedStatement st=null;ResultSet rs=null;try {// Connection connection = JdbcUtils.getConnection();conn = JdbcUtils.getConnection();//PreparedStatement preparedStatement = conn.prepareStatement();//使用?占位符代替参数String sql="update users set `name`=? where id=?";st = conn.prepareStatement(sql);  //预编译SQL,先写sql,然后不执行//手动给参数赋值st.setString(1,"王五");st.setInt(2,2);//执行int i = st.executeUpdate();if (i>0){System.out.println("更新成功!!!");}} catch (SQLException throwables) {throwables.printStackTrace();}finally {JdbcUtils.release(conn,st,rs);}}
}

4、查询

package lesson03;import lesson02.utils.JdbcUtils;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class TestSelect {public static void main(String[] args) {Connection conn =null;PreparedStatement st=null;ResultSet rs=null;try {// Connection connection = JdbcUtils.getConnection();conn = JdbcUtils.getConnection();//PreparedStatement preparedStatement = conn.prepareStatement();//使用?占位符代替参数String sql="select  * from users where id=?";st = conn.prepareStatement(sql);  //预编译SQL,先写sql,然后不执行//手动给参数赋值st.setInt(1,1);rs=st.executeQuery(); //执行if (rs.next()){System.out.println(rs.getString("name"));}} catch (SQLException throwables) {throwables.printStackTrace();}finally {JdbcUtils.release(conn,st,rs);}}
}

5、防止SQL注入

package lesson02.utils;import java.sql.*;public class SQL注入 {public static void main(String[] args) {//login("xiaochen","123456");  //正常登陆 正常输出//login("'or'1=1 ","'or'1=1");  //不正常输出,结果是全部用户名和密码login("xiaochen","123456");}public static void login(String username,String password){Connection conn=null;PreparedStatement st=null;ResultSet rs=null;try {conn = JdbcUtils.getConnection();  //获取数据连接//prepareStatement 防止SQL 注入的本质  把传递进来的参数当作字符// 假设其中存在转义字符,直接忽略  如'' 会直接被转义掉String sql="select * from users where `name`=? and `password` =?";st=conn.prepareStatement(sql);st.setString(1,username);st.setString(1,password);rs=st.executeQuery();while(rs.next()){System.out.println(rs.getString("name"));System.out.println(rs.getString("password"));System.out.println("=======================");}} catch (SQLException throwables) {throwables.printStackTrace();}finally {JdbcUtils.release(conn,st,rs);}}
}

PrepareStatement对象(新增、删除、更新、查询、防止SQL注入)相关推荐

  1. mybaits的模糊查询_mybatis模糊查询防止SQL注入(很详细)

    SQL注入,大家都不陌生,是一种常见的攻击方式.攻击者在界面的表单信息或URL上输入一些奇怪的SQL片段(例如"or '1'='1'"这样的语句),有可能入侵参数检验不足的应用程序 ...

  2. 自己总结的hql新增、删除、查询与sql的新增、删除、查询区别

    一.当保存的是Hibernate 对象的时候: /*** @功能描述 保存或者修改收文记录* @param main void*/@SuppressWarnings("unchecked&q ...

  3. ORACLE 数据同步时,批量进行新增和更新操作的SQL写法

    场景模拟:比如自己项目的一张EMP员工信息表,数据来源需要从第三方系统获取,随时可手动同步更新,也可以定时自动同步.一般情况下,通过创建时间或者最后更新时间,获取自上次同步后的数据增量,全部插入本地的 ...

  4. ADO.NET笔记——带参数的查询防止SQL注入攻击

    相关知识: 把单引号替换成两个单引号,虽然能起到一定的防止SQL注入攻击的作用,但是更为有效的办法是把要拼接的内容做成"参数" SQLCommand支持带参数的查询,也就是说,可以 ...

  5. Android学习笔记----SQLiteDatabase 自带添加、删除、更新、查询的操作方法:实现添加,删除,更新,查询,和分页,统计

    7.除了前面给大家介绍的execSQL()和rawQuery()方法, SQLiteDatabase还专门提供了对应 于添加.删除.更新.查询的操作方法: insert().delete().upda ...

  6. SQL注入问题及预防方法

    SQL注入问题 sql存在漏洞,会被攻击导致数据泄露 SQL会被拼接 or package com.kuang.lesson02; import com.kuang.lesson02.utils.jd ...

  7. 更新sql语句 sql注入_SQL更新语句– SQL中的更新查询

    更新sql语句 sql注入 SQL Update Statement or Update Query in SQL is used to modify the column data in table ...

  8. B站小迪安全笔记第十六天-SQL注入之查询方式及报错盲注

    前言: 当进行 SQL 注入时,有很多注入会出现无回显的情况,其中不回显 的原因可能是 SQL 语句查询方式的问题导致,这个时候我们需要用到相 关的报错或盲注进行后续操作,同时作为手工注入时,同时作为 ...

  9. ACCESS在程序运行中实时更新查询列表的条件

    最近抽时间在帮其它部门处理数据,使用ACCESS处理数据,里面有个需求,需要在运行时动态的更改一个查询的条件(也就是更新SQL语句内容).之前简单的想法是像更改报表一样的更改查询条件. 报表的格式可以 ...

  10. mysql注入模糊_sql模糊查询,以及sql注入问题

    mysql 模糊查询 与 sql注入 一.根据姓名模糊查询员工信息 方式一 select id, emp_name as empName, sex,email,birthday,address fro ...

最新文章

  1. 活动目录在构建核心过程中的八个关键点(下)
  2. h264中profile和level的含义
  3. H.264 RTP payload 格式
  4. 第2章 一切都是对象
  5. HDU 2896 病毒侵袭【AC自动机】
  6. 来了解下计算机视觉的八大应用
  7. org.dom4j.DocumentFactory cannot be cast to org.dom4j.DocumentFactory
  8. Sybase常见问题
  9. 在TOC中添加右键查看属性信息菜单
  10. photoshop的页面制作练习2
  11. Java基础入门(八)之面向对象二
  12. 微信小程序开发之——WeUI快速上手
  13. 我的awk常用命令备忘 xargs备忘
  14. Linux系统编译安装GDAL库
  15. 麒麟系统云打印安装指导
  16. IIS配置php+soap
  17. ETL工程师的岗位详情岗位职责
  18. 六张图,看懂前瞻性数据分析,该如何做
  19. MyBatis之Base64加密数据源
  20. 国内疫情数据可视化平台

热门文章

  1. Coarse-Grained lock 粗粒度锁
  2. 关于中文乱码问题(总结)
  3. Java语言程序设计(一)选择题
  4. CentOS7中使用systemctl列出启动失败的服务
  5. linux扫描目标主机开放端口
  6. Linux 日志定时轮询流程详解
  7. 【Oracle】数据迁移工具(1):SQL Loader
  8. 解决codeforces访问慢的问题
  9. 解决git配置公钥仍然需要输入密码问题
  10. vue2强制刷新,解决页面不会重新渲染的问题