首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >JDBC入门

JDBC入门

作者头像
超级苦力怕
发布2025-12-23 17:42:07
发布2025-12-23 17:42:07
1330
举报
1. JDBC 简介
1.1 概念
  • JDBC (Java DataBase Connectivity),是使用 JAVA 语言操作关系型数据库的一套 API, 是多种操作数据库的底层技术 (MyBatis, MyBatisPlus,Hibernate,SpringDataJPA 等框架)
1.2 本质
  • Sun 公司官方定义的一套操作所有关系型数据库的规范,即接口。
  • 各个数据库厂商去实现这套接口,提供数据库驱动 jar 包
  • 我们可以使用这套接口 (JDBC) 编程,真正执行的代码是驱动 jar 包中的实现类。
2. 使用方法
  • 先在 pom. xml 文件中引入依赖
代码语言:javascript
复制
<dependencies>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.30</version>
    </dependency>

    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter</artifactId>
        <version>5.9.3</version>
        <scope>test</scope>
    </dependency>
</dependencies>
  • 编写测试类操作
    • 注册驱动
    • 获取连接
    • 获取 SQL 语句执行对象
    • 执行 SQL 语句
    • 释放资源
2.1 示例代码
  • 示例代码 1
代码语言:javascript
复制
public class JDBCTest {
    @Test  
public void test() throws ClassNotFoundException, SQLException {  
    //注册驱动  
    Class.forName("com.mysql.cj.jdbc.Driver");  
    //连接数据库  
    String web01 = "jdbc:mysql://localhost:3306/web01";  
    String root = "root";  
    String password = "sqlCFPL@1210@HYS";  
    Connection connection = DriverManager.getConnection(web01, root, password);  
    //获取SQL语句执行对象  
    Statement statement = connection.createStatement();  
    //执行SQL  
    int i = statement.executeUpdate("update user set age=25 where id=1");  
    System.out.println("SQL执行影响记录数为:"+i);  
    //释放资源  
    statement.close();  
    connection.close();  
}

}
  • 示例代码 2(利用 AI 提示词来进行查询数据)
代码语言:javascript
复制
@Test  
public void test() throws ClassNotFoundException, SQLException, IOException {  
    //注册驱动  
    Class.forName("com.mysql.cj.jdbc.Driver");  
    //连接数据库  
    String url = "jdbc:mysql://localhost:3306/web01";  
    String user = "root";  
    String password = "sqlCFPL@1210@HYS";  
    //预编译SQL,速度快,安全度高  
    String sql = "SELECT id, username, password, name, age FROM user WHERE username = ? AND password = ?";  
    try (Connection conn = DriverManager.getConnection(url, user, password);  
         PreparedStatement pstmt = conn.prepareStatement(sql)) {  
  
        // 设置查询参数  
        pstmt.setString(1, "daqiao");  
        pstmt.setString(2, "123456");  
  
        // 执行查询(封装查询返回的结果)  
        ResultSet rs = pstmt.executeQuery();  
  
        // 处理结果集  
        while (rs.next()) {  
            User userObj = new User(  
                    rs.getInt("id"),  
                    rs.getString("username"),  
                    rs.getString("password"),  
                    rs.getString("name"),  
                    rs.getInt("age")  
            );  
  
            // 输出User对象到控制台  
            System.out.println(userObj);  
        }  
  
    } catch (SQLException e) {  
        e.printStackTrace();  
    }  
}
2.2 代码解析

JDBC 程序执行 SQL 语句

  • DML 语句:int rowsAffected = statement. ExecuteUpdate ();
  • DQL 语句:`ResultSet rs = statement. executeQuery();

ResultSet(结果集对象):封装了DQL查询语句查询的结果。

  • resuletSet.next():将光标从当前位置向前移动一行,并判断当前行是否为有效行,返回值为boolean。
    • true:有效行,当前行有数据
    • false:无效行,当前行没有数据
  • resuletSet.getXxx(…):获取数据,可以根据列的编号获取,也可以根据列名获取(推荐)
3. 预编译 SQL
3.1 静态/预编译 SQL概述

在介绍预编译 SQL 之前,先介绍静态 SQL。

  • 静态 SQL 指的是在程序编译时就已经确定的 SQL 语句,其语句内容在运行期间不会发生改变。通常在嵌入式 SQL 编程里使用
  • 示例
代码语言:javascript
复制
//获取SQL语句执行对象  
    Statement statement = connection.createStatement();  
    //执行SQL  
    int i = statement.executeUpdate("update user set age=25 where id=1");  
    System.out.println("SQL执行影响记录数为:"+i);  
  • 预编译 SQL 是先对 SQL 语句进行预编译,之后再给 SQL 语句中的参数赋值。它运用占位符(如 ?)来代表参数,在运行时再传入具体的值。
  • 示例
代码语言:javascript
复制
//预编译SQL,速度快,安全度高  
    String sql = "SELECT id, username, password, name, age FROM user WHERE username = ? AND password = ?";  
    try (Connection conn = DriverManager.getConnection(url, user, password);  
         PreparedStatement pstmt = conn.prepareStatement(sql)) {  
        // 设置查询参数  
        pstmt.setString(1, "daqiao");  
        pstmt.setString(2, "123456");  
  
        // 执行查询(封装查询返回的结果)  
        ResultSet rs = pstmt.executeQuery();  
3.2 预编译SQL 优点

以下是相较于静态 SQL 对比

  • 性能高
    • 原因:只需要一次解析、优化和编译,对于多次执行的 SQL 语句,提升了执行效率
  • 安全性高
    • 原因:能够有效防止 SQL 注入攻击,因为参数通过占位符传递
    • SQL 注入:改变原 SQL 语句的逻辑,从而达到非法访问、篡改或删除数据库中数据的目的
  • 灵活性强:
    • 原因:可以通过改变参数值实现不同查询条件,执行不同操作
4. 尾部

到这里,JDBC的入门结束,在此基础上,可以了解更多框架 (MyBatis, MyBatisPlus,Hibernate,SpringDataJPA 等),进行下一步学习。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-12-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. JDBC 简介
    • 1.1 概念
    • 1.2 本质
  • 2. 使用方法
    • 2.1 示例代码
    • 2.2 代码解析
  • 3. 预编译 SQL
    • 3.1 静态/预编译 SQL概述
    • 3.2 预编译SQL 优点
  • 4. 尾部
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档