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();
    }
}
相关推荐
肖恩想要年薪百万4 分钟前
JSP中常用JSTL标签
java·开发语言·状态模式
程序员清风19 分钟前
AI开发岗该如何准备面试?
java·后端·面试
笨拙的老猴子30 分钟前
Spring AI 实战教程(七):Agent 智能体 —— 用电商购物助手学透自主规划与工具执行
java·人工智能·spring
月落归舟34 分钟前
深入解析Java基础之基础
java·开发语言
折哥的程序人生 · 物流技术专研34 分钟前
《Java 100 天进阶之路》第20篇:Java初始化、构造器、对象创建的过程
java·开发语言·后端·面试
电魂泡哥41 分钟前
CMS垃圾回收
java·jvm·算法
Amctwd1 小时前
【Python】从Excel中按行提取图片
java·python·excel
啃臭1 小时前
AOP和反射
java·spring boot
西凉的悲伤1 小时前
java 使用PNG图片隐写文件
java·图片隐写·png
有梦想的小何1 小时前
Cursor AI 编程实战(篇一):Prompt 与案例总结
java·linux·prompt·ai编程