JDBC介绍及编程流程&Statement与PreparedStatement对比&SQL注入攻击

本文介绍了JDBC的基本概念和组件,包括DriverManager、Driver、Connection、Statement和ResultSet等。详细阐述了JDBC编程的步骤,并对比了Statement和PreparedStatement的区别,强调了PreparedStatement的安全性和效率优势。最后,通过实例解释了SQL注入攻击的危害,并展示了PreparedStatement如何防止SQL注入,提升应用程序的安全性。
摘要由CSDN通过智能技术生成

JDBC编程

JDBC简介:
JDBC(Java Data Base Connection):Java数据库连接。是一种标准Java应用编程接口(Java API),将数据库和Java程序连接起来,是开发人员可以通过Java程序访问数据库。

常见的JDBC组件(JDBC开发中主要用到的类):

  • DriverManager :这个类管理一系列数据库驱动程序。
    匹配连接使用通信子协议从 JAVA 应用程序中请求合适的数据库驱动程序。
    识别 JDBC 下某个子协议的第一驱动程序将被用于建立数据库连接。
  • Driver : 这个接口处理与数据库服务器的通信。你将很少直接与驱动程序互动。
    相反,你使用 DriverManager 中的对象,它管理此类型的对象。
    它也抽象与驱动程序对象工作相关的详细信息。
  • Connection : 此接口具有接触数据库的所有方法。该连接对象表示通信上下文,
    即:所有与数据库的通信仅通过这个连接对象进行。
  • Statement : 使用创建于这个接口的对象将 SQL 语句提交到数据库。
    除了执行存储过程以外,一些派生的接口也接受参数。
  • ResultSet : 在你使用语句对象执行 SQL 查询后,这些对象保存从数据库获得的数据。
    是一个迭代器,方便遍历得到的结果集。
  • SQLException : 这个类处理发生在数据库应用程序的任何错误。

JDBC编程步骤:

  1. 加载数据库驱动,通过反射Class.forName(String driverName);加载。
  2. 通过Connection connection=DriverManager.getConnection(url,user,password);来获得数据库连接。
  • url:数据库地址,MySQL中为jdbc:mysql://localhost:3306/数据库名 localhost是本地主机,也就是说这个位置放的是要连接的数据库所在的主机信息;3306是数据库的端口号;后再跟上要访问的数据库名。
  • user:安装数据库时设置的用户名。
  • password:用户对应的密码。
  1. 可能需要设置隔离级别
    connection.setTransactionIsolation(Connection.TRANSACTION_NONE);
  2. 创建Statemebt对象(常用的有两种)
  • Statement statement = connection.createStatement();
  • PreparedStatement prepareStatement = connection.prepareStatement();
  1. 通过statement/prepareStatement对象来执行SQL语句,并拿到结果集ResultSet(如果是查询多条语句).
    5.如果有结果集则迭代遍历结果集。
  2. 关闭连接资源。结果集、statement对象、connection都要关闭。
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.*;
import java.util.Properties;

public class JdbcDemo {
    private String jdbcDriver;//数据库驱动名
    private String jdbcUrl;//访问的数据库所在主机url
    private String user;//数据据的用户名
    private String password;//数据库的密码
    //以上信息我可以放在.properties文件中,该文件是Java中的配置文件,支持key-value的存储方式,这里定义一个流来访问该文件,在java.util包路径下
    //这样做以后要改上面的信息就不用改代码,而是改文件
    private Properties properties;
    private String dbpro;//db.properties的路径
    private Connection connection;//先定义一个connection对象,注意在java.sql包路径下
    private Statement statement;//定义一个Statement接口的对象statement
    private PreparedStatement ps;//定义一个PreparedStatement接口的对象ps
    //构造方法初始化成员变量
    public JdbcDemo(){
        properties=new Properties();//实例化流
        try {
            properties.load(new FileInputStream("D:\\Java\\servlet_demo\\src\\main\\resources\\db.properties"));//加载db.properties文件
            jdbcDriver=properties.getProperty("jdbcDriver");//从文件中读取key=jdbcDriver对应的value值
            jdbcUrl=properties.getProperty("jdbcUrl");
            user=properties.getProperty("user");
            password=properties.getProperty("password");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //获取数据库连接,封装在这个方法中
    public void getConnection(){
        try {
            Class.forName(jdbcDriver);//1.加载数据库驱动
            connection=DriverManager.getConnection(jdbcUrl,user,password);//2.获取数据库连接
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    //下面我把对数据库的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值