JDBC的使用(二):PreparedStatement接口;ResultSet接口(获取结果集);例题:SQL注入
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 ...
- MySQL JDBC常用知识,封装工具类,时区问题配置,SQL注入问题
JDBC JDBC介绍 Sun公司为了简化开发人员的(对数据库的统一)操作,提供了(Java操作数据库的)规范,俗称JDBC,这些规范的由具体由具体的厂商去做 对于开发人员来说,我们只需要掌握JDBC ...
- 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权限管理系统实战 ...
随机推荐
- 《linux命令》ps -aux详细解释
本文转载自http://blog.chinaunix.net/uid-21516619-id-1824945.html 显示其他用户启动的进程(a) 查看系统中属于自己的进程(x) 启动这个进程的用户 ...
- 快速上手制作Icon Font
现在在提起Icon Font,已经不是什么新鲜的词汇了,网上已经有很多介绍它的文章,并且很多网站也已经将它用到,本篇主要是将制作Icon Font的整个流程整理一下,并且加入了自己在制作中遇到的问题, ...
- Magento 新增字段的值读写丢失原因
某实体新增字段handreturn_status,欲操作之: $order_info = Mage::getModel('sales/order')->load($order_id); //se ...
- Spring Security控制权限
Spring Security控制权限 1,配置过滤器 为了在项目中使用Spring Security控制权限,首先要在web.xml中配置过滤器,这样我们就可以控制对这个项目的每个请求了. < ...
- Quartz资源收藏
项目中使用Quartz集群分享 : http://hot66hot.iteye.com/blog/1726143 发布 Quartz Job Scheduling Framework 中文 PDF 版 ...
- .NET LINQ查询语法与方法语法
LINQ 查询语法与方法语法 通过使用 C# 3.0 中引入的声明性查询语法,介绍性 LINQ 文档中的多数查询都被编写为查询表达式. 但是,.NET 公共语言运行时 (CLR) 本身并不具 ...
- C#调用webservice简单实例
如何利用IIS创建webservice不多做阐述,直接讲C#代码中如何调用已创建好的webservice. 首先在VS2010中新建一个工程项目,然后右键点击工程名选择添加服务引用. 在URL一栏中输 ...
- 解决NSData转NSString返回nil的问题
// 字符串转Data NSString *str =@"jesfds"; NSData *data =[str dataUsingEncoding:NSUTF8StringEnc ...
- datepicker使用
JqueryUI作为一个优秀的前端库,被广泛的应用在项目中.之前做的一个排班考勤系统,跟时间打交道较多,对时间控件做过一些对比,觉得jqueryUI里的这个datepicker更为实用,配置起来也简单 ...
- 基于命令行编译打包phonegap for android应用 分类: Android Phonegap 2015-05-10 10:33 73人阅读 评论(0) 收藏
也许你习惯了使用Eclipse编译和打包Android应用.不过,对于使用html5+js开发的phonegap应用,本文建议你抛弃Eclipse,改为使用命令行模式,绝对的快速和方便. 一直以来,E ...

