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注入的更多相关文章

  1. MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  2. JDBC基础学习(二)—PreparedStatement

    一.PreparedStatement介绍     在SQL中包含特殊字符或SQL的关键字(如: ' or 1 or ')时Statement将出现不可预料的结果(出现异常或查询的结果不正确),可用P ...

  3. MySQL JDBC常用知识,封装工具类,时区问题配置,SQL注入问题

    JDBC JDBC介绍 Sun公司为了简化开发人员的(对数据库的统一)操作,提供了(Java操作数据库的)规范,俗称JDBC,这些规范的由具体由具体的厂商去做 对于开发人员来说,我们只需要掌握JDBC ...

  4. Java程序员从笨鸟到菜鸟之(一百零二)sql注入攻击详解(三)sql注入解决办法

    sql注入攻击详解(二)sql注入过程详解 sql注入攻击详解(一)sql注入原理详解 我们了解了sql注入原理和sql注入过程,今天我们就来了解一下sql注入的解决办法.怎么来解决和防范sql注入, ...

  5. JDBC数据库编程:PreparedStatement接口

    使用PreparedStatement进行数据库的更新及查询操作. PreparedStatement PreparedStatement是statement子接口.属于预处理. 使用statemen ...

  6. JDBC数据库编程:ResultSet接口

    掌握ResultSet接口 使用ResultSet接口进行查询 ResultSet接口 在JDBC操作中,数据库所有查询记录将使用ResultSet进行接收,并使用ResultSet显示内容. 常用方 ...

  7. Java基础(三十一)JDBC(1)常用类和接口

    1.Driver接口 每种数据库的驱动程序都应该提供一个实现java.sql.Driver接口的类.在加载某一驱动程序的Driver类时,它应该创建自己的实例并向java.sql.DriverMana ...

  8. JDBC之Statement 接口的测试(存在sql注入风险)

    实现简单的登录功能 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; impo ...

  9. SpringSecurity权限管理系统实战—二、日志、接口文档等实现

    系列目录 SpringSecurity权限管理系统实战-一.项目简介和开发环境准备 SpringSecurity权限管理系统实战-二.日志.接口文档等实现 SpringSecurity权限管理系统实战 ...

随机推荐

  1. VBA之文件筛选

    在工作中,经常会碰到从一堆腐朽的source中按照一个列表去筛选出来现在还要用的source文件. 这个如果用vba来实现的话,会节省大量的时间,而且不会出错. 前提说明: 将想要复制的文件名列表放在 ...

  2. Spark集群部署

    Spark是通用的基于内存计算的大数据框架,可以和hadoop生态系统很好的兼容,以下来部署Spark集群 集群环境:3节点 Master:bigdata1 Slaves:bigdata2,bigda ...

  3. Host文件设置

    地址:C:\Windows\System32\drivers\etc 可以在注释语句前加入 "#" hosts文件是Windows系统中一个负责IP地址与域名快递解析的文件,以AS ...

  4. Sublime Text 2报“Decode error - output not utf-8”错误的解决办法

    [Decode error - output not utf-8] [Decode error - output not utf-8]   应该怎么办?   这是因为python配置的编译环境的编码不 ...

  5. google 在线代理浏览

    谷歌访问不了,你又N多方法,比如搭建VPN,买VPN,或查找google多个IP访问, 或通过第三方反代理网站访问, 或通过客户端代理(类似goagent)等 下面罗列出可以访问google的几个代理 ...

  6. mysql常见错误及解决方案

    mysql error 2005 - Unknown MySQL server host 'localhost'(0) 此错误一般为地址信息错误,注意是否有空格. 在连接本地数据库时,最好使用127. ...

  7. 创建好Android Application Project 后运行就报错。

    如图: 这个问题有可能是有可能是没导入Android support库,简单了解一下: google提供了Android Support Library package 系列的包来保证来高版本sdk开 ...

  8. html基本知识点

    <hr />定义下划线 <br/>定义换行<p>段落</p> <h1>标题</h1>h后的数字逐渐增大,字体逐渐减小;<h ...

  9. sql Lloader

    create table ban_ji(id integer,ban_ji varchar2(25))insert into ban_ji values(1,'1-(1)');insert into ...

  10. HTML 表

    表格: <table></table> 插入一个表格 <tr></tr> 代表一行 其中插入<td></td>单元格       ...