image.png
    sql注入: 由于下面的password = ‘’ 和username = ‘jdslfkjsd’,执行结果i为 false(密码不成立,查询不到),然后就会进行 ‘1’ = ‘1’ 结果为true 所以where 后面为true就执行
    image.png
    java -jar +jar包名 可以启动jar包
    image.png
    在sql语句这里拼接字符串(有单引,有双引)很容易拼错, 可以先写两个双引号,然后再写两个 ++号, ➕中间写变量名
    image.png

    1. package com.itheima.jdbc;
    2. import com.itheima.pojo.Account;
    3. import org.junit.Test;
    4. import java.sql.Connection;
    5. import java.sql.DriverManager;
    6. import java.sql.ResultSet;
    7. import java.sql.Statement;
    8. import java.util.ArrayList;
    9. import java.util.List;
    10. /**
    11. * JDBC API 详情:Result
    12. */
    13. public class JDBCDemo6_UserLogin {
    14. @Test
    15. public void testResultSet() throws Exception {
    16. // 2. 获取连接:如果连接的是本机mysql并且端口是默认的3306 可以简化,(简化,就是端口号和ip不写)
    17. // 这里的127.0.0.1 可以写成localhost 不想要红色警告可以设置参数后面的键值对(前面加问号)
    18. // useSSL=false (Java的键值对是 键=值 这里不能有空格
    19. String url = "jdbc:mysql:///db1?useSSL=false"; // db1 是数据库名
    20. String userName = "root";
    21. String passWord = "123456";
    22. Connection connection = DriverManager.getConnection(url, userName, passWord);
    23. // 接收用户输入的 用户名和密码
    24. String name = "zhangsan";
    25. String pwd = "123";
    26. String sql = "select * from tb_user where username = '"+ name +"' and password = '" + pwd +"'";
    27. // 获取stmt对象
    28. Statement stmt = connection.createStatement();
    29. // 执行sql
    30. ResultSet rs = stmt.executeQuery(sql);
    31. // 判断是否登录成功: 使用ResultSet的next方法,先向下移动一行查看是否有效行
    32. if (rs.next()){// 如果是有效行(代表有数据)
    33. System.out.println("登录成功");
    34. }else {
    35. System.out.println("登录失败");
    36. }
    37. // 7. 释放资源
    38. rs.close();
    39. stmt.close();
    40. connection.close();
    41. }
    42. /** 演示sql注入
    43. * inject 是注入的意思
    44. * @throws Exception
    45. */
    46. @Test
    47. public void testtestLogin_inject() throws Exception {
    48. // 2. 获取连接:如果连接的是本机mysql并且端口是默认的3306 可以简化,(简化,就是端口号和ip不写)
    49. // 这里的127.0.0.1 可以写成localhost 不想要红色警告可以设置参数后面的键值对(前面加问号)
    50. // useSSL=false (Java的键值对是 键=值 这里不能有空格
    51. String url = "jdbc:mysql:///db1?useSSL=false"; // db1 是数据库名
    52. String userName = "root";
    53. String passWord = "123456";
    54. Connection connection = DriverManager.getConnection(url, userName, passWord);
    55. // 接收用户输入的 用户名和密码
    56. String name = "z发士大夫";
    57. String pwd = "' or '1' = '1";
    58. String sql = "select * from tb_user where username = '"+ name +"' and password = '" + pwd +"'";
    59. // 获取stmt对象
    60. Statement stmt = connection.createStatement();
    61. // 执行sql
    62. ResultSet rs = stmt.executeQuery(sql);
    63. // 判断是否登录成功: 使用ResultSet的next方法,先向下移动一行查看是否有效行
    64. if (rs.next()){// 如果是有效行(代表有数据)
    65. System.out.println("登录成功");
    66. }else {
    67. System.out.println("登录失败");
    68. }
    69. // 7. 释放资源
    70. rs.close();
    71. stmt.close();
    72. connection.close();
    73. }
    74. }