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();
} }