JavaWeb零基础学习Day6——JDBC

一.JDBS

1.介绍

JDBC:就是使用Java语言操作关系型数据库的一套API

本质:

sun公司官方定义的一套操作所有关系型数据库的规范,即接口。

各个数据库厂商去实现这套接口,提供数据库驱动jar包

可以使用这套(JDBS)编程。真正执行的代码是驱动jar包中的实现类。

2.入门程序

1)完成数据修改

java 复制代码
package org.junit.jupiter;

import org.junit.jupiter.api.Test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Exception;
import java.sql.Statement;

public class JdbcTest {

    //JDBC入门程序
    @Test
    public  void  testUpdate() throws Exception {
        //1.导入数据库驱动
        Class.forName( "com.mysql.cj.jdbc.Driver" );//使用forName方法加载数据库驱动
        //2.获取数据库连接
        String url = "jdbc:mysql://localhost:3306/web01";
        String username = "root";
        String password = "1234";
        DriverManager.getConnection(url,username,password);
        //3.获取SQL语句执行对象
        Statement statement = connection.createStatement();
        //4.执行SQL语句
        int i = statement.executeUpdate("update account set money = 1000 where id = 1");
        System.out.println("sql执行完毕次数" + i);
        //5.释放资源
        Statment.close();
        connection.close();
    }
}

2)完成查询数据

需求:基于JDBC执行如下select语句,将查询语句封装到User对象中

SQL:select * from user where username = "daqiao" and password = "123456"

AI提示词:

你是一名java开发工程师,帮我基于JDBC程序来操作数据库,执行如下SQL语句:select id,username,password,name,age from user where username = 'daqiao' and password = '123456';

并将查询的每一行记录,都封装到实体类User中,然后将User对象的数据输出到控制台中。

User 实体类属性如下:

@Data

@NoArgsConstructor

@AllArgsConstructor

public class User {

private Integer id; //ID

private String username; //用户名

private String password; //密码

private String name; //姓名

private Integer age; //年龄

}

java 复制代码
import java.sql.*;

public class JdbcUserQuery {
    public static void main(String[] args) {
        // 数据库连接信息
        String url = "jdbc:mysql://localhost:3306/你的数据库名?useSSL=false&serverTimezone=UTC&characterEncoding=utf8";
        String username = "数据库用户名";
        String password = "数据库密码";
        
        // SQL查询语句
        String sql = "select id,username,password,name,age from user where username = 'daqiao' and password = '123456'";
        
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        
        try {
            // 1. 加载数据库驱动(MySQL 8.0+使用com.mysql.cj.jdbc.Driver)
            Class.forName("com.mysql.cj.jdbc.Driver");
            
            // 2. 获取数据库连接
            conn = DriverManager.getConnection(url, username, password);
            
            // 3. 创建PreparedStatement对象
            pstmt = conn.prepareStatement(sql);
            
            // 4. 执行查询,获取结果集
            rs = pstmt.executeQuery();
            
            // 5. 处理结果集
            while (rs.next()) {
                // 创建User对象
                User user = new User();
                
                // 设置属性值
                user.setId(rs.getInt("id"));
                user.setUsername(rs.getString("username"));
                user.setPassword(rs.getString("password"));
                user.setName(rs.getString("name"));
                user.setAge(rs.getInt("age"));
                
                // 输出用户信息
                System.out.println("查询到用户信息:");
                System.out.println("ID: " + user.getId());
                System.out.println("用户名: " + user.getUsername());
                System.out.println("密码: " + user.getPassword());
                System.out.println("姓名: " + user.getName());
                System.out.println("年龄: " + user.getAge());
            }
            
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            System.out.println("数据库驱动加载失败");
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("数据库操作异常");
        } finally {
            // 6. 关闭资源(按ResultSet ->PreparedStatement->Connection的顺序关闭)
            try {
                if (rs != null) rs.close();
                if (pstmt != null) pstmt.close();
                if (conn != null) conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

模板化操作,AI可替代,不需要重复写

3.预编译SQL

相关推荐
tanzongbiao1 小时前
Dorado7文件上传 解决HttpServletResponse返回值中文乱码的问题
java·服务器·前端
承渊政道2 小时前
【Python编程—从入门到实践】(Python条件判断完全入门:从布尔表达式到列表中的if实战)
开发语言·python·pycharm·条件判断·布尔表达式
小灰灰搞电子2 小时前
Rust 相关容器(集合)详解
开发语言·容器·rust
茶本无香2 小时前
Arthas 实战:线上“看 Map”的四种武器
java·map·arthas·线上定位
霸道流氓气质3 小时前
Spring AI异常处理与重试机制
java·人工智能·spring
郑州光合科技余经理5 小时前
本地生活服务系统:成品模块和定制接口怎么划界
java·前端·人工智能·后端·系统架构·php·ai编程
萧瑟余晖5 小时前
Java深入解析篇三十三之密封类与接口(Sealed Classes)详解
java·开发语言
小淮AI8 小时前
从“刷题”到“追问”:AI课堂正在重塑哪些学习旧习惯?
人工智能·学习
论迹复利9 小时前
FreeRTOS 在 RISC-V 上是如何“点火“的 —— 从 main() 到第一个任务的完整链路
java·开发语言·risc-v
润乾软件9 小时前
SQLazy:分组累计求和
sql·sqlazy