跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

Java JDBC 核心接口与防注入实战

JDBC 规范定义了 Java 与数据库交互的标准接口。通过 DriverManager、Connection、Statement 和 ResultSet 等核心类实现数据访问。传统 Statement 存在 SQL 注入风险,推荐使用 PreparedStatement 进行参数化查询以增强安全性。掌握驱动加载、连接建立及资源释放流程是开发基础。

asphyx_a发布于 2018/5/25更新于 2026/7/2531 浏览
Java JDBC 核心接口与防注入实战

Java JDBC 核心接口与防注入实战

JDBC(Java Database Connectivity)是 Java 连接数据库的规范。不同数据库厂商根据此规范提供各自的驱动实现,如 MySQL、Oracle 等。开发时只需引入对应驱动包即可切换数据源。

核心接口主要包括:

  • DriverManager:管理数据库驱动的注册与获取连接。
  • Connection:代表与数据库的物理连接。
  • Statement:用于执行静态 SQL 语句。
  • ResultSet:封装查询结果集。

基础查询示例

下面是一个最基础的查询示例,展示了如何建立连接并遍历结果:

import java.sql.*;

public class JdbcExample {
    public static void main(String[] args) throws SQLException {
        // 现代 JDBC 驱动通常自动注册,无需显式调用 Class.forName
        String url = "jdbc:mysql://localhost:3306/test";
        String user = "root";
        String password = "123456";

        try (Connection conn = DriverManager.getConnection(url, user, password);
             Statement stmt = conn.createStatement();
             ResultSet rs = stmt.executeQuery("SELECT * FROM stu")) {

            while (rs.next()) {
                System.out.println(rs.getObject(1) + "\t" +
                                 rs.getObject() +  +
                                 rs.getObject() +  +
                                 rs.getObject());
            }
        }  (SQLException e) {
            e.printStackTrace();
        }
    }
}
2
"\t"
3
"\t"
4
catch

注意这里使用了 try-with-resources 语法,它能确保在操作结束后自动关闭资源,避免内存泄漏。

防止 SQL 注入

直接使用 Statement 拼接用户输入存在严重的 SQL 注入风险。例如,如果用户名包含 ' OR '1'='1,可能导致数据泄露。推荐使用 PreparedStatement 进行参数化查询。

import java.sql.*;

public class SecureQuery {
    public static void main(String[] args) throws SQLException {
        String url = "jdbc:mysql://localhost:3306/test";
        String user = "root";
        String password = "123456";

        try (Connection conn = DriverManager.getConnection(url, user, password)) {
            // 使用 ? 占位符代替直接拼接
            String sql = "SELECT * FROM stu WHERE sid=? AND sname=?";
            try (PreparedStatement preStmt = conn.prepareStatement(sql)) {
                preStmt.setString(1, "S_1001");
                preStmt.setString(2, "liuYi");

                try (ResultSet rs = preStmt.executeQuery()) {
                    while (rs.next()) {
                        System.out.println(rs.getString(1) + "\t" +
                                         rs.getString(2));
                    }
                }
            }
        }
    }
}

预编译语句会在数据库层面先编译 SQL 模板,再传入参数值,从而彻底杜绝了因特殊字符导致的注入攻击。在实际开发中,应优先采用这种方式处理动态查询。

目录

  1. Java JDBC 核心接口与防注入实战
  2. 基础查询示例
  3. 防止 SQL 注入
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • MySQL 核心原理与实战:从基础到高可用架构
  • VSCode 配置 Go 开发环境及必备工具清单
  • Kimi K2.5 开源部署、API 接入、Agent 集群与多模态实战
  • Stable-Diffusion-3.5 运行慢?FP8 量化 GPU 优化实战方案
  • Proxmox VE 部署 Kali Linux 完整实战指南
  • Testsigma 开源自动化测试平台新手入门指南
  • 深度对比 vLLM、SGLang 与 llama.cpp:大模型推理引擎选型指南
  • LangFlow 对接主流大模型教程:Llama、ChatGLM、Qwen
  • 用三省六部做 AI Agent 协作:Edict 架构拆解
  • AR 眼镜光学镜头设计实战与核心技巧解析
  • PHP 调用 DeepSeek API 接口示例
  • 第二届人工智能、数字媒体技术与社会计算国际学术会议(ICAIDS 2026)
  • Neo4j 5.26 版本下载安装配置步骤
  • OpenClaw Agent Skills 核心技能推荐及安装指南
  • 利用 Figma MCP 与 Claude Code 实现 UI 设计稿 1:1 还原
  • 基于 Python 和深度学习的宠物识别系统设计
  • 开源 ROS 智能割草机器人:硬件选型、软件架构与部署指南
  • 具身导航 VLN 最新论文汇总(2023-2026)
  • Linux 下安装配置 Claude Code 及 VS Code SSH 远程集成指南
  • FPGA 自适应滤波技术指南:LMS 至 RLS 算法实现与 Verilog 代码

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online