使用PreperedStatement预编译对象防止sql注入简单代码
来源:互联网 发布:程序员图片 编辑:程序博客网 时间:2024/06/05 09:22
package com.fwd.login;import java.sql.Connection;import java.sql.PreparedStatement;//注意导包是sql下的包import java.sql.ResultSet;import com.fwd.utils.MyJDBCUtils;public class Login {/** * @author fwd * 2016年12月21日23:09:02 * 使用预编译对象防止sql注入 * 1,什么是sql注入,当执行sql语句时,把拼接的参数加入到sql语句中去执行, * 而不是作为整个参数去执行, * * (1)使用PreparedStatement预编译对象防止sql注入(2)创建PreparedStatement对象 prepareStatement(String sql) (3)PreparedStatement接口的父接口Statement(4)什么是预编译(5)步骤:第一步,加载驱动,创建数据库的连接第二步,编写sql第三步,需要对sql进行预编译第四步,向sql里面设置参数第五步,执行sql第六步,释放资源 * @throws Exception */public static void main(String[] args) throws Exception {login("lucy","123");}//简单模拟登陆操作public static void login(String username , String password) throws Exception{Connection conn = null; PreparedStatement psmt = null;ResultSet rs = null;try {//1,使用工具类得到数据库的连接conn = MyJDBCUtils.getConnection();//编写sql//这种方把用户名和密码当做字符串拼接到sql语句中就会穿绳sql注入//当我们向username中传入//String sql = "select * from user where name = '"+username+"',password = '"+password+"';";String sql = "select * from user where name =? and password = ?";//问号相当于一个占位符//对sql进行预编译 预编译之后才设置参数,这样就能把整个参数放到sql语句中并且不被当做一个sql语句执行psmt = conn.prepareStatement(sql);//设置参数psmt.setString(1, username);psmt.setString(2, password);//执行sql ,返回一个结果集rs = psmt.executeQuery();if (rs.next()) {System.out.println("success");}else {System.out.println("fail");}} catch (Exception e) {e.printStackTrace();}finally{//使用工具类释放资源MyJDBCUtils.clearConn(conn, psmt, rs);}}}
JDBC连接的工具类,通过读取配置文件的方式注册数据库驱动连接数据库的方式
package com.fwd.utils;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.ResourceBundle;/** * JDBC连接工具类 * 2016年12月22日00:06:43 * @author fwd * */public class MyJDBCUtils {public static String drivername;public static String username;public static String password;public static String url;// 在类加载的时候读取配置文件static {drivername = ResourceBundle.getBundle("db").getString("drivername");username = ResourceBundle.getBundle("db").getString("username");password = ResourceBundle.getBundle("db").getString("password");url = ResourceBundle.getBundle("db").getString("url");}/** * 获取数据库连接 * @return conn * @throws Exception */public static Connection getConnection() throws Exception{//用反射加载驱动Class.forName(drivername);//获取数据库的连接Connection conn = DriverManager.getConnection(url,username,password);return conn;}/** * 释放JDBC资源 * @param conn * @param stmt * @param rs */public static void clearConn(Connection conn,Statement stmt,ResultSet rs){if (conn!=null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}conn = null;//快速释放资源 这是sun公司官网推荐的写法}if (stmt!=null) {try {stmt.close();} catch (SQLException e) {e.printStackTrace();}stmt =null;}if (rs !=null) {try {rs.close();} catch (SQLException e) {e.printStackTrace();}rs = null;}}}配置文件的内容截图
mysql数据表
1 0
- 使用PreperedStatement预编译对象防止sql注入简单代码
- 数据库连接中使用PreparedStatement预编译防止SQL注入
- 预编译sql处理(防止sql注入)
- SQL中,like的SQL注入防止,使用预编译SQL(?)的写法
- PHP简单代码防止SQL注入
- PHP简单代码防止SQL注入
- mybatis 防止 sql 注入 和 mybatis 的预编译
- 简单防止sql注入
- 两段简单的JS代码防止SQL注入
- 两段简单的JS代码防止SQL注入
- sql预编译和注入
- php防止sql注入代码
- 防御SQL注入方法(1)-使用预编译语句
- 分享一个PHP PDO 的工具类,采用预编译有效防止SQL注入
- 使用过滤器防止简单的页面SQL注入
- php 使用PDO,防止sql注入 简单说明
- 使用PreparedStatement防止SQL注入
- 使用PreparedStatement防止SQL注入
- ubuntu vmware tools
- Android Studio 快捷键使用
- jar 命令打包生成的jar文件内部的目录结构
- MySQL的一个安装坑
- webservice的学习
- 使用PreperedStatement预编译对象防止sql注入简单代码
- linear-gradient用法
- Spring+SpringMVC+MyBatis整合实例
- 被风吹过的夏天,与往事和解。
- Atitit ABI FFI 的区别与联系 attilax总结
- Atitit ABI FFI 的区别与联系 attilax总结
- Android显示和隐藏密码的自定义EditView
- Main() 方法的参数
- Josephus ring