前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >【MySQL】JDBC编程

【MySQL】JDBC编程

作者头像
E绵绵
发布2025-02-24 08:22:28
发布2025-02-24 08:22:28
8300
代码可运行
举报
文章被收录于专栏:编程学习之路编程学习之路
运行总次数:0
代码可运行

1.❤️❤️前言~🥳🎉🎉🎉

Hello, Hello~ 亲爱的朋友们👋👋,这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章,请别吝啬你的点赞❤️❤️和收藏📖📖。如果你对我的内容感兴趣,记得关注我👀👀以便不错过每一篇精彩。 当然,如果在阅读中发现任何问题或疑问,我非常欢迎你在评论区留言指正🗨️🗨️。让我们共同努力,一起进步! 加油,一起CHIN UP!💪💪

2.JDBC概述

JDBC(Java Database Connectivity) 是Java提供的一套用于执行SQL语句的API,它定义了操作关系型数据库的标准接口。通过JDBC,开发者可以用统一的代码访问多种数据库(如MySQL、Oracle等),无需关心底层数据库的差异。

JDBC的核心组件:

  • 驱动包:不同数据库厂商提供(如MySQL的mysql-connector-java)。
  • API包java.sql.*javax.sql.*,包含ConnectionStatementResultSet等接口。

优势

  • 面向接口编程,与具体数据库解耦。
  • 程序可移植性强,切换数据库仅需更换驱动包。

3.JDBC准备流程

  1. 下载对应数据库的驱动(如MySQL的mysql-connector-java.jar)。一般都是去maven仓库中下载找到相对应的版本。
  1. 将驱动包添加到项目依赖中(如IDEA中通过lib目录引入)。
  1. 将lib目录添加到库中(如下图)

4.JDBC 编程的基本流程

4.1创建数据源

代码语言:javascript
代码运行次数:0
复制
DataSource dataSource = new MysqlDataSource(); //向上转型

//设置数据库所在的地址
((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");
//设置登录数据库的用户名
((MysqlDataSource) dataSource).setUser("root");
//设置登录数据库的密码
((MysqlDataSource) dataSource).setPassword("12345678");
//向下转型

DataSource 是一个接口。不能直接实例化,必须通过 它的实现类 MysqlDataSource 来实例化对象

解析上面的代码。

(1) setURL 方法中的 URL 是什么?

URL:Uniform Resource Locator URL 是网络服务程序上用于指定信息位置的表示方法,简单地说,就是网址。

ip地址:127.0.0.1, 这很特殊,叫做环回ip .因为当前数据库客户端(也就是现在写的jdbc代码), 数据库服务器(存储数据的服务器)都是在一个主机上,所以可以用环回ip (这ip针对于任何人都是固定一样的),如果它们装在不同主机上就不能用环回ip了.


(2) setUser 方法中的 root 是什么?

root 是 MySQL 管理员默认自带的管理员用户。

(3) setPassword 方法中,填的就是我们安装 MySQL 时设置的密码。

4.2代码和数据库之间建立连接

代码语言:javascript
代码运行次数:0
复制
Connection connection = dataSource.getConnection();

选择 Connection 接口时,注意选择的是 java.sql 下的包

这里记得抛出异常,否则会编译错误(之所以要这样 请看作者写的java异常文章,它有解释)

4.3准备好sql语句

代码语言:javascript
代码运行次数:0
复制
String sql = "insert into student values(18,'张三');";
PreparedStatement statement = connection.prepareStatement(sql);

这个sql只是一个字符串的sql, 还不能被真正的执行. 所以还要进行预处理一下, 也就是下面的statement, 对我们的sql语句进行一个预编译:

PrepareStatement - > 提前预编译

这里的sql字符换服务器是可以处理的, 服务器首先需要对SQL进行解析, 理解这里的含义并执行, 但是如果客户端这里有几千万个sql字符串请求, 那么对于服务器来说压力就比较大.

上面的语句由于是固定的,没有变量,我们可不可以在语句里面加变量?

可以的,我们可以通过占位符的方式添加变量。

代码语言:javascript
代码运行次数:0
复制
​
 Scanner scanner = new Scanner(System.in);
        System.out.println("输入学号: ");
        int id = scanner.nextInt();
        System.out.println("输入姓名: ");
        String name = scanner.next();
        String sql = " insert into student values(?,?) " ;
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1,id);
        statement.setString(2,name);

​

4.4执行sql

这里分为两种: 如果是 insert,update,delete 都是用 executeUpdate 方法 如果是 select,使用 executeQuery 方法

executeUpdate方法
代码语言:javascript
代码运行次数:0
复制
int ret = statement.executeUpdate();
System.out.println(ret);

上面接收的返回值就表示当前这个操作,影响到了几行

executeQuery方法

对于查询来说, 返回的结果就不是int这么简单了, 而是一个ResultSet对象 .

ResultSet对象被称为结果集, 它象征着数据库中的一个临时表的身份, 代表着符合SQL查询语句的所有行, 并且提供一套完整的get方法来对这些记录进行访问. ResultSet里面的数据是一行一行排列的, 每行有多个属性(字段), 并且有一个记录指针, 指向行首数据.

代码语言:javascript
代码运行次数:0
复制
        String sql = "select * from student;";
     
        PreparedStatement statement = connection.prepareStatement(sql);
 
        ResultSet resultSet = statement.executeQuery();
        while(resultSet.next()) {

            int age = resultSet.getInt("age");
            String name = resultSet.getString("name");
            System.out.println("age = " + age + ", name = " + name);
        }

分析 while 循环,这是一种固定写法。 针对结果集,我们依次获取到表中的每一行,再通过这一行来获取此行对应的列。

第一次执行 resultSet.next(),表示获取到了第一行( id = 1 ) 第二次执行 resultSet.next(),表示获取到了第二行( id = 2 ) 第三次执行 resultSet.next(),由于表到达了末尾,next 方法返回了 false,循环结束。

4.5释放资源

这里的资源既然产出来了,那么肯定要释放回去。这里我们遵循 先创建的,后释放;后创建的,先释放。

代码语言:javascript
代码运行次数:0
复制
statement.close();
connection.close();

如果是选择语句的话要多加一个 resultSet.close()

4.6整体代码

以下为executeupdate的代码

代码语言:javascript
代码运行次数:0
复制
​
public class test1 {
    public static void main(String[] args) throws SQLException {
       DataSource dataSource= new MysqlDataSource();
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/max?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("123");
        Connection connection=dataSource.getConnection();
        Scanner scanner=new Scanner(System.in);
        int age=scanner.nextInt();
        String sql="insert into student value(null,'王五',?)";
        PreparedStatement statement=connection.prepareStatement(sql);
        statement.setInt(1,age);
        int ret=statement.executeUpdate();
        System.out.println("ret: " + ret);
        statement.close();
        connection.close();
    }
}

​

以下为executeQuery的代码

代码语言:javascript
代码运行次数:0
复制
public class test2 {
    public static void main(String[] args) throws SQLException {
        DataSource dataSource= new MysqlDataSource();
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/max?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("123");
        Connection connection=dataSource.getConnection();
        String sql="select * from student";
        PreparedStatement statement=connection.prepareStatement(sql);
        ResultSet resultSet =statement.executeQuery();
        while (resultSet.next()){
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            int age = resultSet.getInt("age");
            System.out.println( "id= " +id + ", name= " +name+",age="+age);
        }
        resultSet.close();
        statement.close();
        connection.close();
    }
}

5.总结

工作中一般不会直接使用jdibc.面试一般也不考 jdbc. 因为jdbc 这套 api 使用起来是比较繁琐的 因此有一些 大佬 把 jdbc 的 api 又进一步封装,成了一些操作数据库的框架(比如MyBatis, jpA),我们一般用这些框架去操作(后续框架会在javaEE中讲到) 虽然不会用到它,但对于jdbc我们还是要了解的,它是这些框架的基础,只有了解基础才能更加熟悉掌握进阶知识。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.❤️❤️前言~🥳🎉🎉🎉
  • 2.JDBC概述
  • 3.JDBC准备流程
  • 4.JDBC 编程的基本流程
    • 4.1创建数据源
    • 4.2代码和数据库之间建立连接
    • 4.3准备好sql语句
    • 4.4执行sql
      • executeUpdate方法
      • executeQuery方法
    • 4.5释放资源
    • 4.6整体代码
  • 5.总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档