1. 新建一个JDBCPrepareStatement工程, 使用我们之前的JDBCUtil.java和jdbc.properties属性文件

2. PreparedStatement对象相比较以前的Statement对象, 预先处理给定的sql语句, 对其执行语法检查。 在sql语句里面使用?占位符来替代后续要传递进来的变量。后面不管传递什么进来, 都把它看成是字符串, 不会产生任何的关键字。

3. 使用PreparedStatement对象编写程序

4. 输入任意用户名和密码, 并且sql注入, 登录失败

5. 使用正确的用户名和密码, 登录成功

6. 使用PreparedStatement对象进行插入操作

7. 使用PreparedStatement对象进行更新操作

8. 使用PreparedStatement对象进行删除操作

9. 使用PreparedStatement对象查找所有用户

10. UserDao.java接口代码

package com.lywgames.dao;public interface UserDao {/*** 用户登录方法* @param username* @param password*/public void login(String username, String password);/*** 注册新用户* @param username* @param password* @param registertime*/public void register(String username, String password, long registertime);/*** 修改密码* @param username* @param password*/public void modifyPassword(String username, String password);/*** 删除用户* @param username*/public void deleteUser(String username);/*** 查找所有用户*/public void findAll();
}

11. UserDaoImpl.java完整代码

package com.lywgames.dao.impl;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import com.lywgames.dao.UserDao;
import com.lywgames.util.JDBCUtil;public class UserDaoImpl implements UserDao {public void login(String username, String password) {Connection conn = null;
//      Statement st = null;PreparedStatement ps = null;ResultSet rs = null;try {// 1.获取连接对象conn = JDBCUtil.getConn(); /*** // 2.创建statement, 跟数据库打交道, 一定需要这个对象*    st = conn.createStatement();*  // 3.执行查询sql, 获取ResultSet结果集*   rs = st.executeQuery("select * from user where username='"+ username  +"' and password='"+ password +"'");**/// 2.PreparedStatement对象相比较以前的Statement对象, 预先处理给定的sql语句, 对其执行语法检查。 在sql语句里面使用?占位符来替代后续要传递进来的变量。// 后面不管传递什么进来, 都把它看成是字符串, 不会产生任何的关键字。ps = conn.prepareStatement("select * from user where username=?and password=?");// 给占位符赋值, 位置从1开始ps.setString(1, username);ps.setString(2, password);// 3.执行查询rs = ps.executeQuery();// 4.使用ResultSet结果集遍历if(rs.next()){System.out.println("登录成功");}else{System.out.println("登录失败");}} catch (SQLException e) {e.printStackTrace();} finally {// 5.释放资源JDBCUtil.release(conn, ps, rs);}}@Overridepublic void register(String username, String password, long registertime) {Connection conn = null; PreparedStatement ps = null;try {// 1.获取连接对象conn = JDBCUtil.getConn(); // 2.PreparedStatement对象相比较以前的Statement对象, 预先处理给定的sql语句, 对其执行语法检查。 在sql语句里面使用?占位符来替代后续要传递进来的变量。// 后面不管传递什么进来, 都把它看成是字符串, 不会产生任何的关键字。ps = conn.prepareStatement("insert into user (username,password,registertime) values (?,?,?)");// 给占位符赋值, 位置从1开始ps.setString(1, username);ps.setString(2, password);ps.setTimestamp(3, new Timestamp(registertime));// 3.执行更新ps.executeUpdate();} catch (SQLException e) {e.printStackTrace();} finally {// 4.释放资源JDBCUtil.release(conn, ps);}}@Overridepublic void modifyPassword(String username, String password) {Connection conn = null; PreparedStatement ps = null;try {// 1.获取连接对象conn = JDBCUtil.getConn(); // 2.PreparedStatement对象相比较以前的Statement对象, 预先处理给定的sql语句, 对其执行语法检查。 在sql语句里面使用?占位符来替代后续要传递进来的变量。// 后面不管传递什么进来, 都把它看成是字符串, 不会产生任何的关键字。ps = conn.prepareStatement("update user set password=? where username=?");// 给占位符赋值, 位置从1开始ps.setString(1, password);ps.setString(2, username);// 3.执行更新ps.executeUpdate();} catch (SQLException e) {e.printStackTrace();} finally {// 4.释放资源JDBCUtil.release(conn, ps);}}@Overridepublic void deleteUser(String username) {Connection conn = null; PreparedStatement ps = null;try {// 1.获取连接对象conn = JDBCUtil.getConn(); // 2.PreparedStatement对象相比较以前的Statement对象, 预先处理给定的sql语句, 对其执行语法检查。 在sql语句里面使用?占位符来替代后续要传递进来的变量。// 后面不管传递什么进来, 都把它看成是字符串, 不会产生任何的关键字。ps = conn.prepareStatement("delete from user where username=?");// 给占位符赋值, 位置从1开始ps.setString(1, username);// 3.执行更新ps.executeUpdate();} catch (SQLException e) {e.printStackTrace();} finally {// 4.释放资源JDBCUtil.release(conn, ps);}}@Overridepublic void findAll() {Connection conn = null; PreparedStatement ps = null;ResultSet rs = null;try {// 1.获取连接对象conn = JDBCUtil.getConn(); // 2.PreparedStatement对象相比较以前的Statement对象, 预先处理给定的sql语句, 对其执行语法检查。 在sql语句里面使用?占位符来替代后续要传递进来的变量。// 后面不管传递什么进来, 都把它看成是字符串, 不会产生任何的关键字。ps = conn.prepareStatement("select * from user");// 3.执行查询rs = ps.executeQuery();// 4.使用ResultSet结果集遍历while(rs.next()){System.out.println(rs.getInt(1) + " " + rs.getString(2) + " " + rs.getString(3) + " " + rs.getTimestamp(4));}} catch (SQLException e) {e.printStackTrace();} finally {// 5.释放资源JDBCUtil.release(conn, ps, rs);}}
}

026_jdbc-mysql-PrepareStatement解决sql注入相关推荐

  1. mysql注入实例获取答案_本文实例讲述了MySQL解决SQL注入的另类方法。分享给大家供大家参考,具体如下:问题解读我觉得,这个问题每年带来的成本可以高达数十亿美元了。本文就来谈谈,...

    本文实例讲述了MySQL解决SQL注入的另类方法.分享给大家供大家参考,具体如下: 问题解读 我觉得,这个问题每年带来的成本可以高达数十亿美元了.本文就来谈谈,假定我们有如下 SQL 模板语句: se ...

  2. mysql5无法注入_MySQL解决SQL注入的另类方法详解_MySQL

    本文实例讲述了MySQL解决SQL注入的另类方法.分享给大家供大家参考,具体如下: 问题解读 我觉得,这个问题每年带来的成本可以高达数十亿美元了.本文就来谈谈,假定我们有如下 SQL 模板语句: se ...

  3. 使用过滤器解决SQL注入和跨站点脚本编制

    1 SQL注入.盲注 1.1 SQL注入.盲注概述 Web 应用程序通常在后端使用数据库,以与企业数据仓库交互.查询数据库事实上的标准语言是 SQL(各大数据库供应商都有自己的不同版本).Web 应用 ...

  4. python防止sql注入的方法_python解决sql注入以及特殊字符

    python往数据库插入数据, 基础做法是: cur=db.cursor() sql = "INSERT INTO test2(cid, author, content) VALUES (1 ...

  5. pdo mysql防注入_Php中用PDO查询Mysql来避免SQL注入风险的方法

    当我们使用传统的 mysql_connect .mysql_query方法来连接查询数据库时,如果过滤不严,就有SQL注入风险,导致网站被攻击,失去控制.虽然可以用mysql_real_escape_ ...

  6. ibatis解决sql注入问题 .

    最近看看了SQL注入的问题,这篇文章解决了ibatis如何防sql注入攻击,值得参考,转自http://blog.csdn.net/scorpio3k/article/details/7610973 ...

  7. 解决SQL注入与XSS攻击

    最近接手之前同事的几个项目,公司利用扫描工具进行全项目扫描,发现了部分项目代码存在安全漏洞,所以需要进行项目代码修复以避免有人恶意攻击.这个任务自然而然的就落到我手上.在这里记录一下操作的过程. 扫描 ...

  8. mysql order by sql注入_mybatis中#{}和${}的区别及order by的sql注入问题

    前言略,直奔主题.. #{}相当于jdbc中的preparedstatement ${}是输出变量的值 简单的说就是#{}传过来的参数带单引号'',而${}传过来的参数不带单引号. 你可能说不明所以, ...

  9. mysql pdo 安全_使用PDO查询Mysql来避免SQL注入风险

    当 我们使用传统的 mysql_connect .mysql_query方法来连接查询数据库时,如果过滤不严,就有SQL注入风险,导致网站被攻击,失 去控制.虽然可以用mysql_real_escap ...

最新文章

  1. Android 串口通讯 获取卡号
  2. Entity Framework快速入门笔记第四篇—ModelFirst
  3. Ironic 裸金属管理服务的底层技术支撑
  4. 利用samba和mount命令 进行文件共享
  5. Spring Boot笔记-echarts的使用及数据的修改
  6. 训练日志 2018.12.16
  7. 高性能服务器设计——模块间通信(转载)
  8. 请求过程中,需要证书认证,这种情况下如何处理
  9. 【浙江大学PAT真题练习乙级】1004 成绩排名 (20分) 真题解析
  10. maven配置本地jar包
  11. 迅为IMX6ULL开发板点亮第一个led灯之led子系统的使用
  12. 为什么我卸载了微博?
  13. 北大计算机学霸,揭秘:2018北大在京录取的学霸们有何特长(组图)
  14. 计算机论文课题来源,浅析论文题目的来源和意义
  15. html 全场开场动画,HTML5 星际大战电影开场字幕动画
  16. 编程金融小白学 股票期权 lv.7 希腊字母 Theta
  17. 数据结构与算法一:稀疏数组 队列 链表
  18. 《人月神话》-人月神话
  19. JQuery选择器细节-遁地龙卷风
  20. C++的反思(知乎精华)

热门文章

  1. url的三个js编码函数escape(),encodeURI(),encodeURIComponent()简介【转】
  2. webpack入门+react环境配置
  3. [转]Java——Servlet的配置和测试
  4. [CLPR] 用于加速训练神经网络的二阶方法
  5. 数据仓库入门(实验7)部署分析服务数据库
  6. IIS 应用程序池设置
  7. datatablelistT
  8. 爬虫之Selenium
  9. 羡慕女设计师啊,天生色感好!
  10. BZOJ 3597 SCOI2014 方伯伯送椰子 网络流分析+SPFA