JDBC

一 .JDBC的作用

JDBC的作用是将Java代码和数据库连接起来,使Java应用程序能够执行SQL语句并获取数据。它允许开发人员通过Java代码访问数据库表、执行SQL操作、处理结果集,还可以实现事务管理、连接池等功能。通常,开发人员需要配置一个JDBC驱动程序,以便Java应用程序能够与数据库进行通信。

二.JDBC四个核心的对象

  1. Connection(连接)对象:Connection对象表示与数据库建立连接,用于创建和执行SQL语句,提交和回滚事务等操作。

  2. Statement(语句)对象:Statement对象用于执行SQL语句,并返回结果集。它还可以用于执行批处理操作。

  3. ResultSet(结果集)对象:ResultSet对象表示数据库查询结果集。结果集包含了查询语句从数据库中返回的所有行,可以通过ResultSet对象来访问这些数据。

  4. PreparedStatement(预编译语句)对象:PreparedStatement对象继承了Statement对象的所有方法,并且可以更有效地执行重复的SQL语句,可以使用占位符来避免SQL注入攻击。

三.JDBC的使用步骤

  1. 导入JDBC驱动程序:通过使用Class.forName方法加载数据库的JDBC驱动程序,使得JDBC可以访问数据库。
  1. 建立与数据库的连接:使用java.sql包中的DriverManager.getConnection方法,获取与数据库的连接。
  1. 创建Statement对象:为了向数据库发送SQL语句,需要使用java.sql包中的Statement接口的实现类,如Statement或PreparedStatement创建Statement对象。
  1. 执行SQL语句:使用Statement对象的executeQuery()或executeUpdate()方法执行SQL语句。
  1. 处理结果集:对于查询操作需要使用ResultSet对象来处理查询结果,处理方式包括获取ResultSet中的元素数据,或使用JavaBean封装ResultSet结果。
  1. 释放资源:释放Statement对象和数据库连接,以及ResultSet对象等占用的资源,以保证程序的性能和安全。
  1. 异常处理:使用try-catch-finally来捕获并处理异常,保证连接及资源的关闭。

具体实现可以参考如下示例:

import java.sql.*;

public class JdbcSample {
    public static void main(String[] args) {
        Connection con = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            // 1. 导入JDBC驱动程序
            Class.forName("com.mysql.jdbc.Driver");
            // 2. 建立与数据库的连接
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
            // 3. 创建Statement对象
            stmt = con.createStatement();
            // 4. 执行SQL语句
            rs = stmt.executeQuery("SELECT * FROM users");
            // 5. 处理结果集
            while (rs.next()) {
                System.out.println(rs.getString("id") + "\t" + rs.getString("name"));
            }
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        } finally {
            // 6. 释放资源
            try {
                if (rs != null) rs.close();
                if (stmt != null) stmt.close();
                if (con != null) con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

四.SQL注入

JDBC SQL注入是指攻击者利用JDBC接口中未进行足够输入验证的漏洞,通过构造恶意的SQL语句,从而获取数据库中的数据或者实施非法操作的攻击行为。攻击者会针对Web应用程序的输入界面或参数化查询等特殊接口进行攻击,通过输入恶意的SQL代码来欺骗应用程序,从而访问或篡改数据库中的数据。
为了避免此类攻击,应用程序需要对输入进行严格的验证和过滤,从而防止恶意的SQL代码被注入到数据库中。同时,也需要使用参数化查询方式来避免SQL注入攻击。在设计数据库时,应该对表和字段进行适当的命名和权限设置,限制用户的操作权限,从而提高数据库的安全性。

推荐使用PreparedStatemen
	PreparedStatement ps = con.prepareStatement(sql);
	sql语句中的参数可以使用?代替
	statement.setInt(索引,值); 索引从1开始的
	setXXX  XXX代表数据类型

五.工具类

常见的JDBC工具类包括:

  1. JDBCUtils:提供了连接数据库、获取PreparedStatement和ResultSet对象、关闭连接等方法。

  2. DBUtil:提供了连接数据库、执行查询和更新操作、关闭连接等方法。

  3. JdbcTemplate:Spring框架提供的JDBC工具类,封装了JDBC操作,提供了更加方便的API。

import java.sql.*;

public class JdbcUtil {
    private static final String URL = "jdbc:mysql://localhost:3306/test"; // 数据库连接地址
    private static final String USERNAME = "root"; // 数据库用户名
    private static final String PASSWORD = "123456"; // 数据库密码

    static {
        try {
            Class.forName("com.mysql.jdbc.Driver"); // 加载数据库驱动
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    // 获取数据库连接对象
    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(URL, USERNAME, PASSWORD);
    }

    // 关闭资源
    public static void close(Connection conn, Statement stmt, ResultSet rs) {
        try {
            if (rs != null) {
                rs.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

        try {
            if (stmt != null) {
                stmt.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

        try {
            if (conn != null) {
                conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值