- 新建自定义工具类用于连接MySQL数据库:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; /** * Jdbc 工具类 连接器 */ public class JDBCUtil { private JDBCUtil(){} private static Connection connection; static { try{ Class.forName("com.mysql.cj.jdbc.Driver"); String url="jdbc:mysql://localhost:3306/onlinedb?useSSL-false&serverTimezone=UTC"; String user="root"; String pwd="123456"; connection= DriverManager.getConnection(url,user,pwd); }catch(ClassNotFoundException | SQLException c){ c.printStackTrace(); throw new RuntimeException("连接数据库失败"); } } public static Connection getConnection(){ return connection; } public static void close(){ if(connection != null);{ assert connection != null; try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
- 演示SQL注入攻击 模拟用户登录,现在MySQL 需要用到PreparedStatement类: 表示预编译的SQL语句的对象,SQL语句已预编译并存储在
PreparedStatement
对象中。 然后可以使用该对象多次有效地执行此语句。import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Scanner; /* SQL 注入攻击 */ public class Demo02 { public static void main(String[] args) { try{ Statement statement=JDBCUtil.getConnection().createStatement(); // selectAll(statement); select(); }catch(SQLException s){ s.printStackTrace(); } } /** * 使用 。。登录数据库 zeng 1 ‘ or ‘1=1 * @param statement */ public static void selectAll(Statement statement){ Scanner scanner=new Scanner(System.in); String username=scanner.nextLine(); String pwd=scanner.nextLine(); String sql="select*from user where username=‘"+username+"‘ and pwd=‘"+pwd+"‘;"; try { boolean b=statement.execute(sql); System.out.println(b); ResultSet resultSet=statement.executeQuery(sql); while (resultSet.next()){ System.out.println(resultSet.getString("username")+"\t"+resultSet.getString("pwd")); } scanner.close(); resultSet.close(); statement.close(); } catch (SQLException e) { e.printStackTrace(); } } /** * 创建一个PreparedStatement对象,用于将参数化的SQL语句发送到数据库。 * SQL语句可以预编译并存储在PreparedStatement对象中 * 防止注入攻击 */ public static void select(){ Scanner scanner=new Scanner(System.in); String username=scanner.nextLine(); String pwd=scanner.nextLine(); String sql="select*from user where username= ? and pwd= ?"; try { PreparedStatement preparedStatement=JDBCUtil.getConnection().prepareStatement(sql); //使用给定对象设置指定参数的值。 preparedStatement.setObject(1,username); preparedStatement.setObject(2,pwd); //执行此 PreparedStatement对象中的SQL查询,并返回查询 PreparedStatement的 ResultSet对象。 ResultSet resultSet=preparedStatement.executeQuery(); while (resultSet.next()){ System.out.println(resultSet.getString("username")+"\t"+resultSet.getString("pwd")); } scanner.close(); resultSet.close(); preparedStatement.close(); } catch (SQLException e) { e.printStackTrace(); } } }
基本就这样子。
相关文章
- 10-08连接mysql 出现:java.sql.SQLException: Unable to load authentication plugin 'caching_sha2_password'.
- 10-08mysql-javax.servlet.jsp.JspException:无法建立连接,数据源无效:“ java.sql.SQLException:未找到合适的驱动程序”
- 10-08Eclipse使用jdbc连接MySql数据库报:java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
- 10-08Java程序员从笨鸟到菜鸟之(一百零一)sql注入攻击详解(二)sql注入过程详解
- 10-08Mysql连接异常java.sql.SQLException: The server time zone value '?й???????' is unrecognized or
- 10-08php – sql注入易受攻击的代码,即使我们正在清理输入mysql_real_escape_string
- 10-08连接mysql客户端报错: java.sql.SQLException: Unable to load authentication plugin 'caching_sha2_password'
- 10-08Spring 连接MySQL报错java.sql.SQLException: Unknown system variable 'tx_isolation'
- 10-08连接mysql报错java.sql.SQLException: The server time zone value '�й���ʱ��' is unrecognized...解决方法
- 10-08Java Filter防止sql注入攻击