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();
    }
}
相关推荐
云烟成雨TD9 分钟前
Spring AI 1.x 系列【57】动态工具发现:Tool Search Tool
java·人工智能·spring
zfoo-framework26 分钟前
[修改代码使用]codex官方app中使用中转(不需要cc-switch) 1.config.toml 2.sk方式登录
java
逍遥德1 小时前
MQTT教程详解-05.SpringBoot集成mqtt client 性能分析
java·spring boot·spring·mt
云烟成雨TD1 小时前
Spring AI 1.x 系列【54】Retry 机制分析
java·人工智能·spring
weixin_523185321 小时前
Collections.unmodifiableMap详解:真的不可修改吗?
java·linux·前端
点燃大海1 小时前
SpringAI构建智能体
java·spring boot·spring·springai智能体
xier_ran1 小时前
【infra之路】02_RadixAttention与KV_Cache管理
java·spring boot·spring
黑马师兄1 小时前
RAG混合检索深度解析:让AI真正找到你要的内容
java·人工智能·ai·agent·rag·ai-native
码客日记1 小时前
Spring Boot 配置文件敏感信息加密(Jasypt 企业级完整方案)
java·spring boot·git
凡人叶枫2 小时前
Effective C++ 条款04:确定对象被使用前已先被初始化
java·linux·开发语言·c++·嵌入式开发