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();
    }
}
相关推荐
墨雨晨曦888 分钟前
2026/08/15 spring AI学习总结
java·tomcat
wno70423 分钟前
Spring Boot JdbcTemplate配置Druid多数据源
java·spring boot·后端
聊浮游1 小时前
JAVA2026最新全套学习资料、学习路线
java·开发语言·jvm·mysql·spring·maven·idea
MacroZheng1 小时前
完美替代 Navicat!这款内置 AI 的数据库工具,太香了!
java·后端·mysql
SamDeepThinking2 小时前
从REST到gRPC,一个API选型的思考框架
java·后端·程序员
Zane19942 小时前
接口都能写默认实现了,为什么还需要抽象类
java·后端
未秃头的程序猿2 小时前
读Spring AI源码的方法——不是硬啃,是带着问题去翻
java·后端·spring
用户3126874877202 小时前
别再 Thread.sleep 硬等了!并发工具类到底怎么选?
java
Java内核笔记2 小时前
万字长文剖析 Spring Boot 4 自动配置机制源码:从 @EnableAutoConfiguration 到条件装配
java·后端
evans在进步2 小时前
Spring MVC 核心机制详解:全局异常处理、请求跳转与数据绑定
java·spring·mvc