加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

JDBC连接MySQL/SQL注入

发布时间:2020-12-15 05:28:03 所属栏目:Java 来源:网络整理
导读:一、JDBC连接MySQL: 1. 添加驱动:mysql-connector-java-5.1.47.jar 2. 创建连接: (1)加载驱动:Class.forName("com.mysql.jdbc.Driver"); //jdk1.6 以后无需再加载驱动;再引用库 META-INF下会自动加载,但是web项目还是要加载; (2 )获取连接对象:

一、JDBC连接MySQL:

  1.添加驱动:mysql-connector-java-5.1.47.jar

  2.创建连接:

  (1)加载驱动:Class.forName("com.mysql.jdbc.Driver");

    //jdk1.6以后无需再加载驱动;再引用库META-INF下会自动加载,但是web项目还是要加载;

  (2)获取连接对象:DriverManager.getConnection(url,user,password);

  3.创建SQL语句:

  4.发送sql到数据库;

  5.执行sql语句;

  6.获取返回的结果:

    1)DQL返回查询的结果集;

    2)DML返回影响的行数;

    3)DDL返回0;

  7.处理结果;

  8.释放资源:Connection.close();Statement.close();

public class Test {
    public static void main(String[] args) throws Exception {
        //  1、加载驱动
        //把com.mysql.jdbc.Driver这份字节码加载进JVM
        //当一份字节码被加载到JVMs时,就会执行该字节码中的静态代码块
        Class.forName("com.mysql.jdbc.Driver");
        // 2、创建连接
        String url = "jdbc:mysql://localhost:3306/test";
        String user = "root";
        String password = "000000";
        Connection conn = DriverManager.getConnection(url,password);
        // 3、创建sql
        String sql = "select * from user";
        Statement st = conn.createStatement();
        // 4、执行sql
        ResultSet resultSet = st.executeQuery(sql);
        // 5、处理返回结果while (resultSet.next()){
            System.out.println(resultSet.getString("name"));
        }
        // 6、关闭资源
        st.close();
        conn.close();
    }
}

二、JDBC常用类:

  资源关闭:ResultSet,Statement,Connection的顺序执行close;

  1.DriverManager类:管理一组 JDBC 驱动程序的基本服务;Driver的子类;

    方法:static Connection?getConnection(String url,String user,String password);//返回Connection接口;

      1)String url="jdbc:mysql://localhost:3306/test";

      2)String url="jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&setCharacterEncoding=utf8";

      //??屏蔽SSL的警告;??解决乱码;

      3)String url="jdbc:mysql:///test?useSSL=false&serverTimezone=UTC";//8.0新版本;

  2.Connection接口:

    方法:

    (1Statement?createStatement();//创建一个 Statement 对象来将 SQL 语句发送到数据库。

    (2)PreparedStatement?prepareStatement(String sql);

      //创建一个?PreparedStatement 对象来将参数化的?SQL?语句发送到数据库。

    (3)close();

  3.Statement接口:用于执行静态 SQL 语句并返回它所生成结果的对象。

    方法:

    (1int?executeUpdate(String sql);//执行DDLDML语句;DML返回影响的行数;DDL返回0;

    (2ResultSet executeQuery(String sql);//执行DQL语句;返回 ResultSet结果集;

    (3)close();

  4.ResultSet接口:

    方法:

    (1boolean next();光标向后移动一;//类似迭代器的hasnext();

    (2XXX?getXXX(int columnIndex);//一般不使用;

      //通过字段位置获取值;

    (3)void?close();

    (4XXX?getXXX(String columnLabel);

      //通过字段名获取值;

  5.PreparedStatement表示预编译 SQL 语句的对象。

    参数:所有的通过外部传入的参数使用?代替;?--->占位符;

      //String sql = "delete from student where sid = ?";

    ?替换占位符方法:void?setXXX(int parameterIndex,XXX x)

      //int parameterIndex:占位符的下标,下标从1开始;需要和sql中?的顺序一一对应;

      //XXX x:替换占位符的具体的数据类型;

    方法:

    (1int?executeUpdate();//执行DDLDML语句;DML返回影响的行数;DDL返回0;

    (2ResultSet executeQuery();//执行DQL语句;返回 ResultSet结果集;

      //无需传入sql参数,在创建对象时已经传入,并且预编译;

    (3)close();

public class Test {
    public static void main(String[] args) throws Exception {
        //  1、加载驱动
        //把com.mysql.jdbc.Driver这份字节码加载进JVM
        //当一份字节码被加载到JVMs时,就会执行该字节码中的静态代码块
        Class.forName("com.mysql.jdbc.Driver");
        // 2、创建连接
        String url = "jdbc:mysql://localhost:3306/test";
        String user = "root";
        String password = "000000";
        Connection conn = DriverManager.getConnection(url,password);
        // 3、创建sql
        String sql = "select * from user where name = ?";
        PreparedStatement prepareStatement = conn.prepareStatement(sql);
        prepareStatement.setString(1,"ls");
        // 4、执行sql
        ResultSet resultSet = prepareStatement.executeQuery();
        // 5、处理返回结果
        while (resultSet.next()) {
            System.out.println(resultSet.getString("name"));
        }
        // 6、关闭资源
        prepareStatement.close();
        conn.close();
    }
}

三、SQL注入:

  1、sql注入:

    正常代码:sid:001 ??----> delete from student where sid = "001";

    问题代码:sid:999 or 1=1 ??-----> delete from student where sid = "999"?or 1=1

      //delete from student;等于删除整表;

    解决后代码:sid:999 or 1=1 ??-----> delete from student where sid = "999 or 1=1"

  2、解决办法:PreparedStatement;//Statement的子接口;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读