import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.*;
import java.sql.Connection;
public class Mtest2Demo {
/*
* JDBC 是一种用于执行SQL语句的Java API
* JDBC 可以为多种关系数据库提供统一访问入口。
* JDBC 由一组java工具类接口组成。
*/
/*
* 注册驱动
* Class.forName("com.mysql.jdbc.Driver");
*/
public void Login(String username,String password) throws ClassNotFoundException, SQLException {
//1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2.获取连接
Connection connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/study","root","root");
//3.创建执行sql语句的对象
Statement statement=connection.createStatement();
//4书写sql语句;
String sqlString="select *from login where "+"username='"+username+"' and password='"+password+"'";
//目前这种方式并不是太好
//5执行sql语句;返回给结果集ResultSet;
ResultSet rSet=statement.executeQuery(sqlString);
//6.对结果集进行处理
if(rSet.next()) {//如果存在sqlString的情况返回true否则返回false;
System.out.println("恭喜你!"+username+"登录成功");
System.out.println(sqlString);
}
else {
System.out.println("抱歉!登录错误");
}
if(rSet!=null) rSet.close();
if(statement!=null) statement.close();
if(connection!=null) connection.close();
}
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Mtest2Demo mtest2Demo=new Mtest2Demo();
String usernameString="zyz 'or'";//数据库的注入问题,数据库中没有这个记录,但是产生了数据库的注入问题
String paString="1234567";
mtest2Demo.Login(usernameString,paString);
}
}
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
import java.sql.PreparedStatement;
public class Mtes3Demo {
public void Login(String username,String password) throws ClassNotFoundException, SQLException {
//1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2.获取连接
Connection connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/study","root","root");
//3.创建执行sql语句的对象
Statement statement=connection.createStatement();
/*
* PrepareStatement叫预编译
* Prepare'Statement是Statement的子接口,可以使用PrepareStatement来替换Statement
* 防止SQL攻击;
* 提高代码的可读性,以可维护性
* 提高效率
*
*/
//4书写sql语句;
String sqlString="select *from login where "+"username='"+username+"' and password='"+password+"'";
//目前这种方式并不是太好
//5执行sql语句;返回给结果集ResultSet;
ResultSet rSet=statement.executeQuery(sqlString);
//6.对结果集进行处理
if(rSet.next()) {//如果存在sqlString的情况返回true否则返回false;
System.out.println("恭喜你!"+username+"登录成功");
System.out.println(sqlString);
}
else {
System.out.println("抱歉!登录错误");
}
if(rSet!=null) rSet.close();
if(statement!=null) statement.close();
if(connection!=null) connection.close();
}
//PrepareStatement使用方法
//推荐使用这种方式。
public void Login2(String username,String password) throws SQLException, ClassNotFoundException {
try {
// TODO: handle exception
//1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2.获取连接
Connection connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/study","root","root");
//3.创建执行sql语句的对象
//3 书写sql语句;
String sqlString="select *from login where "+"username='"+username+"' and password='"+password+"'";
//目前这种方式并不是太好
//4创建预处理对象
PreparedStatement pstmt = connection.prepareStatement(sqlString);
//5 设置参数占位符
pstmt.setString(1, username);
pstmt.setString(2, password);
//6执行查询语句
ResultSet rSet=pstmt.executeQuery();
if(rSet.next()) {//如果存在sqlString的情况返回true否则返回false;
System.out.println("恭喜你!"+username+"登录成功");
System.out.println(sqlString);
}
else {
System.out.println("抱歉!登录错误");
}
if(rSet!=null) rSet.close();
if(pstmt!=null) pstmt.close();
if(connection!=null) connection.close();
} catch (Exception e) {
System.out.println("数据库正受到攻击!!!!");
}
}
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Mtes3Demo mtes3Demo=new Mtes3Demo();
String username="zyz 'or'";
String password ="1234567";
mtes3Demo.Login(username, password);//恭喜你!zyz 'or'登录成功。存在注入问题
mtes3Demo.Login2(username, password);//解决注入问题
}
}