ResultSet接口:类似于一个临时表,用来暂时存放数据库查询操作所获得的结果集。
getInt(), getFloat(), getDate(), getBoolean(), getString(), getObject(), next(),:将指针向下移一行。
例一:(输入用户名和密码验证是否登录成功):用Statement接口会导致,SQL注入!
下图是代码:
package com.inba.maya.chaxun; import java.sql.*;
import java.util.*; public class Text { public static void main(String[] args) throws Exception{
Scanner sc=new Scanner(System.in);
System.out.print("请输入用户名:");
String yhm=sc.nextLine();
System.out.print("请输入密码:");
String mm=sc.nextLine();
//第一种解决的方法:给用户名进行替换,把'换成".
//yhm=yhm.replaceAll("\'", "\"");
//一加载驱动
Class.forName("com.mysql.jdbc.Driver");
//二链接数据库
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb?characterEncoding=GBK","root","");
//创建SQL语句
Statement stat=conn.createStatement();
//采用字符串拼接的房方法会导致,SQL注入,从而导致错误发生,如控制台所示
//原因是:当我输入: sl服务网16' or 1=1 #;在代码中显示的是:
//所以当我输入的里面有'时就会和前面的'相匹配,or 1=1永远成立 #在SQL语句中是注释,所以才会登陆成功
String s="select * from user where username='"+yhm+"' and pasword='"+mm+"'";
ResultSet rs=stat.executeQuery(s);
if(rs.next()==true){
System.out.println("登陆成功,欢迎"+rs.getString(3));
}else{
System.out.println("对不起,您输入的用户名或密码不正确!");PreparedStatement
}
conn.close();
} }
解决的方法1:
第一种解决的方法:给用户名进行替换,把'换成".
yhm=yhm.replaceAll("\'", "\"");
解决的第二种方法:
用PreparedStatement接口,该接口继承自Statement接口,但是用于执行动态的SQL语句。通过PreparedStatement实例来执行SQL语句,将被预编译并保存到PreparedStatement实例中,从而可以反复执行该语句。
代码如下:
package com.inba.maya.chaxun; import java.sql.*;
import java.util.*; public class Text {
public static void main1(String[] args) throws Exception{
Scanner sc=new Scanner(System.in);
System.out.print("请输入用户名:");
String yhm=sc.nextLine();
System.out.print("请输入密码:");
String mm=sc.nextLine();
YanZheng(yhm, mm);
} private static void YanZheng(String yhm, String mm) throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.jdbc.Driver");
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb?characterEncoding=GBK","root","");
String s="select * from user where username=? and pasword=?";
PreparedStatement ps=conn.prepareStatement(s);
ps.setString(1, yhm);
ps.setString(2, mm);
ResultSet rs=ps.executeQuery();
if(rs.next()==true){
System.out.println("登陆成功,欢迎"+rs.getString(3));
}else{
System.out.println("对不起,您输入的用户名或密码不正确!");
}
conn.close();
} }
JDBC的使用(二):PreparedStatement接口;ResultSet接口(获取结果集);例题:SQL注入的更多相关文章
-
MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
-
JDBC基础学习(二)—PreparedStatement
一.PreparedStatement介绍 在SQL中包含特殊字符或SQL的关键字(如: ' or 1 or ')时Statement将出现不可预料的结果(出现异常或查询的结果不正确),可用P ...
-
Java程序员从笨鸟到菜鸟之(一百零二)sql注入攻击详解(三)sql注入解决办法
sql注入攻击详解(二)sql注入过程详解 sql注入攻击详解(一)sql注入原理详解 我们了解了sql注入原理和sql注入过程,今天我们就来了解一下sql注入的解决办法.怎么来解决和防范sql注入, ...
-
JDBC数据库编程:PreparedStatement接口
使用PreparedStatement进行数据库的更新及查询操作. PreparedStatement PreparedStatement是statement子接口.属于预处理. 使用statemen ...
-
JDBC数据库编程:ResultSet接口
掌握ResultSet接口 使用ResultSet接口进行查询 ResultSet接口 在JDBC操作中,数据库所有查询记录将使用ResultSet进行接收,并使用ResultSet显示内容. 常用方 ...
-
Java基础(三十一)JDBC(1)常用类和接口
1.Driver接口 每种数据库的驱动程序都应该提供一个实现java.sql.Driver接口的类.在加载某一驱动程序的Driver类时,它应该创建自己的实例并向java.sql.DriverMana ...
-
JDBC之Statement 接口的测试(存在sql注入风险)
实现简单的登录功能 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; impo ...
-
SpringSecurity权限管理系统实战—二、日志、接口文档等实现
系列目录 SpringSecurity权限管理系统实战-一.项目简介和开发环境准备 SpringSecurity权限管理系统实战-二.日志.接口文档等实现 SpringSecurity权限管理系统实战 ...
-
【转】Android LCD(二):LCD常用接口原理篇
关键词:android LCD TFT TTL(RGB) LVDS EDP MIPI TTL-LVDS TTL-EDP 平台信息:内核:linux2.6/linux3.0系统:android/ ...
随机推荐
-
IIS6配置Asp.net MVC运行环境
Windows server 2003 + IIS6 搭建Asp.net MVC运行环境 1.安装.Net Framework4.0. 下载地址: http://www.microsoft.com/z ...
-
mysql聚合函数
1.统计一下插入的数据总数 SELECT COUNT(giftCertificateId) AS number FROM gift_certificate WHERE giftCertificateN ...
-
Unity3d 粒子工具注释
今天群里有人问到瀑布粒子如何调整尺寸. 我查到ellipsoid可以调节产生粒子的空间范围,然后还需要调节粒子的长度.他那个瀑布太长了.max energy和min energy这两个参数可以用来控制 ...
-
PHP设计模式笔记二:面向对象 -- Rango韩老师 http://www.imooc.com/learn/236
SPL标准库的使用 SPL是用于解决典型问题(standard problems)的一组接口与类的集合. 1.SPL提供了很多数据结构类,如SplStack.SqlQueue.SqlHeap.SplF ...
-
HttpWebRequest的简单使用
新建新的空网站和一个default.aspx页面测试,实验例子: using System; using System.Collections.Generic; using System.IO; us ...
-
[css 实践篇] 解决悬浮的<;header>; <;footer>;遮挡内容的处理技巧
我写的实践篇 都是自己在实践项目所遇到的 "拦路虎" 还是很有借鉴的意义的.(实践才是检验真理的唯一标准呀),废话不多说,进去正题 position: fixed 绝对固定底部后会 ...
-
[Python]网络爬虫( 连载:大牛汪海 )
汪海个人博客:http://blog.callmewhy.com/ Python爬虫专栏,汪海专栏 Python爬虫入门教程 简单的介绍如何使用Python的相关模块如urllib2来实现网络爬虫的基 ...
-
vs2013在使用ef6时,创建模型向导过程中,四种模型方式缺少2种
下载eftool,并安装 https://download.microsoft.com/download/2/C/F/2CF7AFAB-4068-4DAB-88C6-CEFD770FAECD/EFTo ...
-
win10企业版2016长期服务版本激活
右键左下角Windows开始图标 ——> 单击 命令提示符(管理员)A 粘贴如下代码到dos窗口: slmgr /ipk DCPHK-NFMTC-H88MJ-PFHPY-QJ4BJ slm ...
-
W-GAN系 (Wasserstein GAN、 Improved WGAN)
学习总结于国立*大学 :李宏毅老师 WGAN前作:Towards Principled Methods for Training Generative Adversarial Networks W ...