zoukankan      html  css  js  c++  java
  • 2018-08-07JDBC连接MySQL+增删改表格+SQL注入问题及其预处理对象PreparedStatement解决方案

    如何使用MySQL连接驱动的Jar文件:

    新建工程(JavaProject)-->在工程内新建文件夹OutSideJar(New一个Folder)-->将Jar包导入进来-->右键该Jar包BuildPath创建依赖-->右键该工程BuildPath处Configure BuildPath即可查看导入并且创建依赖的Jar包!

    连接MySQL数据库具体步骤:

    1.注册驱动.

    //①注册驱动:告知JVM使用的是哪一个数据库的驱动!

    //DriverManager.registerDriver(new Driver());

    Class.forName("com.mysql.jdbc.Driver");

    //②获得连接:使用JDBC中的类,完成对MySQL数据库的连接(导入SQL包)!

    Connection Conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/FuXi?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=TRUE","root","0129");

    //③获得语句执行平台:通过连接对象获取对SQL语句的执行者对象(导入SQL包)!

    Statement Stm=Conn.createStatement();

    //④执行sql语句使用执行者对象,向数据库执行SQL语句,获取到数据库的执行后的结果!

    String testSql="INSERT INTO SORT(SNAME,DESC1) VALUES('娃娃','吃小孩')";

    //用于执行增删改:

    boolean Flag=Stm.execute(testSql);

    System.out.println(Flag);

    //用于查询:

    //stm.executeQuery("SELECT * FROM SORT");

    //⑤处理结果(针对于查询的操作)

    //⑥释放资源

    //调用一堆close()方法(原则:先开后关)!

    Stm.close();

    Conn.close();

    // execute()用于增删改!executeQuery()用于查询!

    JDBC介绍:

    它由一组用Java语言编写的类和接口组成,是Java访问数据库的标准规范!

    JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序!

    JDBC需要连接驱动(实现类),驱动是两个设备要进行通信,满足一定通信数据格式,数据格式由设备提供商规定,设备提供商为设备提供驱动软件,通过软件可以与该设备进行通信!

    //示意图:

    // JDBC是接口,驱动是接口的实现,没有驱动将无法完成数据库连接,从而不能操作数据库!每个数据库厂商都需要提供自己的驱动,用来连接自己公司的数据库,也就是说驱动一般都由数据库生成厂商提供!

    //获取连接需要方法 DriverManager.getConnection(URL,UserName,PassWord),三个参数分别表示:

    ①   URL需要连接数据库的位置(网址)

    ②   USERNAME用户名

    ③   PassWord密码

    SQL注入问题解释:

    假设有登录案例SQL语句如下:

    SELECT * FROM 用户表 WHERE NAME=用户输入的用户名 AND PASSWORD=用户输的密码

    此时,当用户输入正确的账号与密码后,查询到了信息则让用户登录,但是当用户输入的账号为XXX密码为:XXX‘OR’1=1时,则真正执行的代码变为:

    SELECT * FROM 用户表 WHERE NAME = ‘XXX’ AND PASSWORD =‘XXX’ OR 1=1

    此时,上述查询语句时永远可以查询出结果的。那么用户就直接登录成功了,显然我们不希望看到这样的结果,这便是SQL注入问题。

    解决方案:

    预处理对象:PreparedStatement!

    执行SQL语句:

    int executeUpdate(); --执行insert update delete语句!

    ResultSet executeQuery(); --执行select语句!

    boolean execute(); --执行select返回true 执行其他的语句返回false!

    设置实际参数使用setXXX();方法(XXX为数据类型)!

    //示例代1:

    Class.forName("com.mysql.jdbc.Driver");

             Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/FuXi?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=TRUE","root","0129");

             Statement stm=conn.createStatement();

             Scanner sc=new Scanner(System.in);

             System.out.println("请输入用户名:");

             String uname=sc.nextLine();

             System.out.println("请输入密码:");

             String upwd=sc.nextLine();

             ResultSet rst=stm.executeQuery("SELECT * FROM USER WHERE UNAME='"+uname+"'");

             while(rst.next()){

                  System.out.print(rst.getInt("UID")+" ");

                  System.out.print(rst.getString("UNAME")+" ");

                  System.out.print(rst.getString("PWD")+" ");

                  System.out.println();

             }

             rst.close();

             stm.close();

             conn.close();

    //示例代码2:

    Class.forName("com.mysql.jdbc.Driver");

             Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/FuXi?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=TRUE","root","0129");

             Scanner sc=new Scanner(System.in);

             System.out.println("请输入用户名:");

             String uname=sc.nextLine();

             System.out.println("请输入密码:");

             String upwd=sc.nextLine();

             String sql="SELECT * FROM USER WHERE UNAME=? AND PWD=?";

             PreparedStatement stm=conn.prepareStatement(sql);

             stm.setString(1,uname);

             stm.setString(2,upwd);

             ResultSet rst=stm.executeQuery();

             while(rst.next()){

                  System.out.print(rst.getInt("UID")+" ");

                  System.out.print(rst.getString("UNAME")+" ");

                  System.out.print(rst.getString("PWD")+" ");

                  System.out.println();

             }

             rst.close();

             stm.close();

             conn.close();

  • 相关阅读:
    A+B
    Java(2)数据类型转换、变量和常量
    1002. 写出这个数 (20)
    1001.害死人不偿命的(3n+1)
    ACM算法目录
    《mysql必知必会》学习_第19章
    Redhat 6.1安装ArcGIS Server10.1
    ArcGIS 10.1 for Server安装教程系列—— Linux下的单机安装
    ArcGIS 10.1 for Server安装教程系列—— Linux下的单机安装
    Linux ANSI 乱码问题
  • 原文地址:https://www.cnblogs.com/postgredingdangniu/p/9437597.html
Copyright © 2011-2022 走看看