JDBC编程

概述

mysql是服务器客户端结构的程序,我们一般通过三种方式对数据库的数据进行交互

Q:我们使用什么代码才能对数据库进行交互?

MySQL提供了一组API(Application Program Interface应用程序编程接口),就是mysql提供的一组类/函数,供程序员进行调用

Q:市面上有许多数据库导致API不同如何解决?

MySQL的原生API是C语言风格的,但希望用Java进行开发,同时市面上有mysql、sqlsever、oracle都有不同的API,导致学习成本比较高,此时Java就提供了一个东西,就是JDBC,Java提供了一组类/方法,通过类和方法对C语言风格的API进行封装

驱动程序

如果想使用JDBC操纵数据库,就需要下载安装配套的驱动程序,以便于使用驱动程序

驱动程序有许多,Java没有内置,需要额外下载安装,所以找第三方的库有三种途径:

1.Maven仓库,eg:从应用商城下载APP

2.github

3.官网

进行JDBC编程

将jar包导入到项目当中去

1.在项目当中,创建lib目录,复制jar包进去

2.右键目录,让项目识别到

创建数据源对象

数据源:"数据从哪里来?" 或者 "数据库服务器从哪里来?"

注:之所以不使用"数据库服务器"术语,来创建对象,是因为不是所有的数据库都是客户端---服务器结构

java 复制代码
//1.创建数据源对象
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java117?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("060419");

和数据库服务器进行通信,需要建立网络连接

java 复制代码
//2.和数据库服务器进行通信,需要建立网络连接
        Connection connection = dataSource.getConnection();

构造SQL语句

java 复制代码
//3.构造SQL语句
        String sql = "insert into student values(null,'张三')";

这是一个字符串格式的语句,但是实际上需要一个"语句对象"

java 复制代码
        //"Statement statement =" :只是保存了字符串
        PreparedStatement preparedStatement = connection.prepareStatement(sql);

而PrepareStatement给数据库服务器收到的是与处理过的语句,这样就节约一定的数据库资源

执行SQL语句

java 复制代码
/4.执行SQL(把SQL通过网络发送给数据库服务器)
        int n = preparedStatement.executeUpdate();
        System.out.println("n ="+ n);

关闭连接等资源

Why:在日常开发中,我们会经常遇到申请"资源"的情况,但在Java中,内存资源不需要手动释放,Java内置了"垃圾回收机制",自动回收内存资源,自动释放内存.但存在例外需要手动释放资源,因为创建Connection,PreparedStatement不仅仅申请内存资源,也可能包含其他资源(和网络通信相关的资源).

java 复制代码
 //5.关闭连接等资源
        preparedStatement.close();
        connection.close();

同时,释放的顺序先创建后释放

附加

构造语句升级

Q:在上述构造SQL语句时,我们是在插入固定的数据,但如果需要插入许多不同的数据呢,又怎么能让用户指定插入许多数据呢?

java 复制代码
String sql = "insert into student values("+ id +",'" + name +"')";

但这样如果插入的性质多的话,可读性不高,而且也不够美观,此时就需要占位符," ? "只是占用一个位置,之后用户输入的数据会代替

java 复制代码
String sql = "insert into student values( ?, ? )";

但只有这样一个语句,并没有将id和name构造到SQL语句当中

java 复制代码
preparedStatement.setInt(1,id);
preparedStatement.setString(2,name);

此时就构造成功了

查找语句进行的JDBC编程

进行查找语句与其他语句不一样,所以单独演示

复制代码
ResultSet resultSet 表示一个集合(一组不重复的数据),就相当于查询到的一个"临时表",而我们此时就需要对这个临时表进行遍历
java 复制代码
public class JDBCdemo2 {
    public static void main(String[] args) throws SQLException {
        //1.创建数据数据源对象
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java117?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("060419");
        //2.与数据库服务器通信,需要建立网络连接
        Connection connection =dataSource.getConnection();
        //3.构造器SQL语句
        String sql = "select * from student";
        PreparedStatement preparedStatement =connection.prepareStatement(sql);
        //4.执行SQL语句,返回结果是一个语句,称为ResultSet
        ResultSet resultSet =preparedStatement.executeQuery();
        while(resultSet.next()){
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            System.out.println(id+" "+name);
        }
        //5.关闭连接等资源
        resultSet.close();
        preparedStatement.close();
        connection.close();
    }
}
相关推荐
鶴哥只手遮天2 小时前
Spring AI 2.0.1 深度解析-第 14 章 MCP 服务端(上):注解式实现与工具来源
java·人工智能·开源
鶴哥只手遮天2 小时前
Spring AI 2.0.1 深度解析-第 15 章 MCP 服务端(下):三种协议形态、Streamable 传输与状态管理
java·人工智能·开源
鶴哥只手遮天2 小时前
Spring AI 2.0.1 深度解析-第 16 章 向量存储(上):`VectorStore` 接口体系、`BatchingStrategy`
java·人工智能·开源
鶴哥只手遮天2 小时前
Spring AI 2.0.1 深度解析-第 12 章 工具循环的流式形态、Usage 累加与扩展体系
java·人工智能·开源
鶴哥只手遮天2 小时前
Spring AI 2.0.1 深度解析-第 23 章 模型供应商实现:从 `OpenAiSetup` 到 Bedrock
java·人工智能·开源
鶴哥只手遮天2 小时前
Spring AI 2.0.1 深度解析-第 06 章 内置 Advisor 全景:13 个实现逐个剖到源码级
java·人工智能·开源
鶴哥只手遮天2 小时前
Spring AI 2.0.1 深度解析-第 03 章 消息体系与 Prompt:不可变模型、`ChatOptions` 与模板渲染
java·人工智能·开源
鶴哥只手遮天2 小时前
Spring AI 2.0.1 深度解析-第 24 章 生产实践与 2.x 迁移:陷阱清单、AOT 与调优
java·人工智能·开源
鶴哥只手遮天2 小时前
Spring AI 2.0.1 深度解析-第 10 章 工具调用(中):执行链路、结果转换与工具限制
java·人工智能·开源
鶴哥只手遮天2 小时前
Spring AI 2.0.1 深度解析-第 13 章 MCP 客户端:传输、工具聚合与命名冲突
java·人工智能·开源