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();
    }
}
相关推荐
SamDeepThinking22 分钟前
现场重构一段代码,展示什么叫「好代码,都在表达自己的意图」
java·后端·程序员
小园子的小菜38 分钟前
Java 并发四大工具类深度解析:CountDownLatch、CyclicBarrier、Semaphore、Exchanger 原理、源码与面试考点
java·开发语言·面试
搭贝低代码41 分钟前
设备管理系统迁移改造:从手工台账到二维码数字化的实践路径
java·低代码·搭贝
前端双越老师43 分钟前
Nest.js 和 Spring Boot 为何如此像?写给前端转 Java 的同学
java·spring boot·全栈
JL151 小时前
Java+Go 混合架构怎么搭?收官 50 道面试题 + 学习路线
java·架构·golang
Tattoo_Welkin1 小时前
IDEA 中常用操作记载
java·elasticsearch·intellij-idea
音符犹如代码1 小时前
Arthas classloader + sc 实战:JVM 类加载与手动加载
java·jvm·spring boot
乐启国际旅行社有限公司1 小时前
Java线程池实战:文旅系统批量任务性能优化(团期生成/数据导出)
java·开发语言·性能优化
Listen·Rain2 小时前
用AI开发出一个AI
java·人工智能·spring boot·tomcat·intellij-idea·mybatis·visual studio
AI人工智能+电脑小能手2 小时前
【大白话说Java面试题 第203题】【09_Zookeeper篇】第4题:ZooKeeper 的节点类型有哪些?
java·zookeeper·分布式锁·分布式协调·znode