当前位置: 首页 > news >正文

汕头地区做网站的wordpress分页diam

汕头地区做网站的,wordpress分页diam,企业网站 三合一,商家建设网站的好处JDBC预处理对象prepareStatement概述 一、SQL注入问题 SQL注入#xff1a;用户输入的内容作为了SQL语句语法的一部分#xff0c;改变了原有SQL真正的意义。 假设有登录案例SQL语句如下: SELECT * FROM 用户表 WHERE NAME 用户输入的用户名 AND PASSWORD 用户输的密码; 此…JDBC预处理对象prepareStatement概述 一、SQL注入问题 SQL注入用户输入的内容作为了SQL语句语法的一部分改变了原有SQL真正的意义。 假设有登录案例SQL语句如下: SELECT * FROM 用户表 WHERE NAME 用户输入的用户名 AND PASSWORD 用户输的密码; 此时当用户输入正确的账号与密码后查询到了信息则让用户登录。但是当用户输入的账号为XXX 密码为XXX’ OR ‘a’’a时则真正执行的代码变为 SELECT * FROM 用户表 WHERE NAME ‘XXX’ AND PASSWORD ’ XXX’ OR ’a’’a’; 此时上述查询语句时永远可以查询出结果的。那么用户就直接登录成功了显然我们不希望看到这样的结果这便是SQL注入问题。 为此我们使用PreparedStatement来解决对应的问题。 二、代码演示SQL注入问题 1数据库准备 代码如下 #创建sql_into数据库 CREATE DATABASE sql_into; #使用sql_into数据库 USE sql_into; #创建sql_into用户表 CREATE TABLE users(uid INT PRIMARY KEY AUTO_INCREMENT,username VARCHAR(200),PASSWORD VARCHAR(200) ); #加入用户信息 INSERT INTO users(username,PASSWORD) VALUES(xiaoming,123),(xiaoliang,456); #查询用户信息 SELECT *FROM users;mysql代码演示 (2)创建用户登录界面 public class StatementMyCode {public static void main(String[] args) throws SQLException {Scanner scnew Scanner(System.in);System.out.println(请输入用户名);String username sc.nextLine();System.out.println(请输入密码);String passwordsc.nextLine(); //获取JDBCUtils连接Connection conJDBCUtils1.getConnection();//Connection con JDBCUtils1.getConnection(); //获取Statedment对象Statement statcon.createStatement(); //执行SQL语句String sql select * from users where usernameusername and password password;System.out.println(sql);ResultSet rsstat.executeQuery(sql);if(rs.next()){System.out.println(登录成功);}else{System.out.println(登录失败);}JDBCUtils1.close(rs,stat,con);} }SQL注入出现的登录BUG 3配置文件代码 配置文件代码文件名需要和JDBCUtils1里的工具类的配置文件保持一致配置文件代码文件名为config.properties classNamecom.mysql.jdbc.Driver urljdbc:mysql://127.0.0.1:3306/sql_into userroot passwordroot (4)JDBCUtils1文件代码 public class JDBCUtils1 {private static String url;private static String user;private static String password;private static String className;private JDBCUtils1(){}static {try{Properties pnew Properties();InputStream in JDBCUtils1.class.getClassLoader().getResourceAsStream(config.properties);p.load(in);in.close();urlp.getProperty(url);userp.getProperty(user);passwordp.getProperty(password);classNamep.getProperty(className);//注册驱动Class.forName(className);}catch (Exception e){e.printStackTrace();} }public static Connection getConnection(){//获取连接Connection connull;try {con DriverManager.getConnection(url,user,password);return con;} catch (SQLException e) {throw new RuntimeException(连接失败);}}public static void close(ResultSet rs, Statement stat,Connection con){try {if(rs!null)rs.close();} catch (SQLException e) {e.printStackTrace();}try {if(stat!null)stat.close();} catch (SQLException e) {e.printStackTrace();}try {if (con!null)con.close();} catch (SQLException e) {e.printStackTrace();}} } 三、防止SQL注入 使用预处理对象 1原理介绍 preparedStatement预编译对象是Statement对象的子类。 特点 性能高会把sql语句先编译能过滤掉用户输入的关键字。 PreparedStatement预处理对象处理的每条sql语句中所有的实际参数都必须使用占位符?替换。 String sql select * from user where username ? and password ?;PreparedStatement使用需要通过以下3步骤完成 PreparedStatement预处理对象代码 // 获得预处理对象需要提供已经使用占位符处理后的SQL语句 PreparedStatement psmt conn.prepareStatement(sql)设置实际参数 void setXxx(int index, Xxx xx) 将指定参数设置指定类型的值 参数1index 实际参数序列号从1开始。 参数2xxx 实际参数值xxx表示具体的类型。 例如 setString(2, “1234”) 把SQL语句中第2个位置的占位符?替换成实际参数 “1234”执行SQL语句: int executeUpdate(); --执行insert update delete语句. ResultSet executeQuery(); --执行select语句. boolean execute(); --执行select返回true 执行其他的语句返回false. (2)使用preparedStatement 用户登录界面代码演示 public class prepareStatementMyCode {public static void main(String[] args) throws SQLException {Scanner scnew Scanner(System.in);System.out.println(请输入用户名);String username sc.nextLine();System.out.println(请输入密码);String passwordsc.nextLine(); //获取JDBCUtils连接Connection conJDBCUtils1.getConnection();//Connection con JDBCUtils.getConnection(); //获取Statedment对象Statement statcon.createStatement(); //执行SQL语句String sql select * from users where username? and password ?;PreparedStatement ps con.prepareStatement(sql);ps.setObject(1,username);ps.setObject(2,password);System.out.println(sql);ResultSet rsps.executeQuery();if(rs.next()){System.out.println(登录成功);}else{System.out.println(登录失败);}JDBCUtils1.close(rs,stat,con);} } 正确执行代码演示结果 SQL注入代码演示 四、使用prepareStatement完成查询数据 代码如下 public class prepareStatementCSDNSelect {public static void main(String[] args) {//获取连接对象Connection connull;PreparedStatement ps null;ResultSet rs null;try {con JDBCUtils1.getConnection();String sqlselect * from users;ps con.prepareStatement(sql);rs ps.executeQuery();while(rs.next()){int uidrs.getInt(uid);String usernamers.getString(username);String passwordrs.getString(password);System.out.println(uid username password);}} catch (SQLException e) {throw new RuntimeException(e);}finally {JDBCUtils1.close(rs,ps,con);}} } 使用prepareStatement完成查询 五、使用prepareStatement和javabean类完成查询 1创建user1类 代码如下 /*一个类具备私有成员变量 空参构造方法 get/set 方法 实现序列化接口 那么称这个类为javabean类*/ public class User1 {private int uid;private String username;private String password;public User1() {}public User1(int uid, String username, String password) {this.uid uid;this.username username;this.password password;}public int getUid() {return uid;}public void setUid(int uid) {this.uid uid;}public String getUsername() {return username;}public void setUsername(String username) {this.username username;}public String getPassword() {return password;}public void setPassword(String password) {this.password password;}Overridepublic String toString() {return User1{ uid uid , username username \ , password password \ };} } (2)使用把每条记录封装到user1对象中 将多个user1对象放到list集合当中 /*查询所有记录 把每条记录封装到user1对象中 将多个user1对象放到list集合当中*/ public class prepareStatementCSDNSelectBean {public static void main(String[] args) {//获取连接对象Connection connull;PreparedStatement ps null;ResultSet rs null;try {con JDBCUtils1.getConnection();String sqlselect * from users;ps con.prepareStatement(sql);rs ps.executeQuery();//定义一个集合用来存储user对象ListUser1 listnew ArrayList();while(rs.next()){int uidrs.getInt(uid);String usernamers.getString(username);String passwordrs.getString(password);User1 unew User1(uid,username,password);list.add(u);// System.out.println(uid username password);}System.out.println(list);} catch (SQLException e) {throw new RuntimeException(e);}finally {JDBCUtils1.close(rs,ps,con);}} } 查询结果演示
http://www.sadfv.cn/news/21033/

相关文章:

  • 义乌网站制作深圳市宣传片制作公司
  • 商丘市网站建设洛阳哪有做公司网站的
  • 网站未来发展规划网站建设零基础教材免费下载
  • 为什么我的网站百度不收录网站开发常见问题
  • 衡阳网站搜索引擎优化唯品会专门做特卖的网站
  • 文明网站建设管理培训心得制作视频的软件app免费下载
  • 做app网站的软件创建全国文明城市工作方案
  • 上海营销型网站建设asp网站背景
  • 网站建设与管理课程网站建设大概多少钱
  • 网站方案原则江门网站制作推广
  • 织梦网站被黑雁塔区建设局网站
  • 吕梁网站建设泉州百度推广咨询
  • 湖北住房和城乡建设厅官方网站番禺手机网站制作推广
  • 山东建设厅网站扫黑北京seo代理商
  • 外贸官方网站建设做外贸好还是跨境电商好
  • 深圳网站域名山西网站建设报价单
  • 济南中建设计院有限公司网站淄博seo费用
  • 正规网站建设找哪家网站开发语言 排行榜
  • 那些cps网站做的比较好app怎样下载安装
  • 网站怎么做限时抢购东莞东城社保局电话
  • 什么是网站分析创建快捷方式app下载
  • 商城网站 搭建网页建站系统
  • 茂名建站公司模板wordpress模板知更鸟
  • 360网站怎么做链接基层网站建设作用
  • 网站建设美词原创网站点击弹出下载框 怎么做的
  • 网站建设策划案怎么写西安西郊网站建设
  • 玉溪网站建设网站建设免费发布推广的平台有哪些
  • 网站后端技术语言wordpress访问格式丢失
  • iptc网站开发工程师asp考试试题答案如何建设网络营销渠道
  • 珠宝网站形象设计郑州网络推广专业公司