MySQL JDBC 编程,进阶加薪全靠它

3.1 创建项目并添加 MySQL 驱动


创建⼀个 Java 项⽬,并添加 MySQL 驱动(mysql-connector-java-5.1.47.jar),需要注意不同数据库版本要对应相应的驱动包。

操作步骤:点击项⽬属性 -> Modules -> Dependencies -> 点击“+”号 -> 1.Jars or directories -> 选择驱动包 -> 点击 OK 确认。

3.2 使用代码操作数据库


操作数据库 MySQL 提供了两种操作 API:

  • DriverManager

  • DataSource(推荐使用

接下来咱们使⽤ DataSource 来实现操作数据库。

使用代码操作数据库分为以下 5 个步骤:

  1. 获取数据源(准备⼯作,点击 MySQL 连接⼯具,并输⼊⽤户名、密码)

  2. 获取连接(敲击回车试图建⽴客户端和服务器端的连接)

  3. 获取执行器(连接到服务器并切换到数据库)

  4. 查询或操作数据库(输⼊命令,并得到结果)

  5. 关闭连接(关闭客户端)

3.2.1 获得数据源

数据源是 MysqlDataSource,获取⽅式如下,需要输⼊数据库连接的 MySQL 服务器地址、⽤户名和密码:


        // 1.获取数据源 DataSource (设置MySQL的服务器地址)

        MysqlDataSource dataSource = new MysqlDataSource();

        // 1.1 设置连接的 MySQL 服务器

        dataSource.setURL("jdbc:mysql://127.0.0.1:3306/study?characterEncoding=utf8&useSSL=true");

        // 1.2 设置⽤户名

        dataSource.setUser("root");

        // 1.3 设置密码

        dataSource.setPassword("12345678");

注意:如果操作过程中出现了错误,可尝试将useSSL改为false,因为有些电脑不支持SSL加密。

3.2.2 获得连接


        // 2.得到连接 Connection

        Connection connection = dataSource.getConnection();

连接对象是 Connection,注意此步骤操作容易出错,⼀定是 java.sql 包下的 Connection 对象:

3.2.3 获得执行器

执行器是用来执行 SQL 命令的,执行器有三种:

  • Statement

  • PreparedStatement

  • CallableStatement

实际开发中最常⽤的是 PreparedStatement 对象,PreparedStatement 优点如下:

具体实现如下:


        // 3.得到执行器 (组装MySQL)

        String insertSql = "insert into city(id, name) values(?, ?)";

        PreparedStatement statement = connection.prepareStatement(insertSql);

        // 填充占位符

        statement.setInt(1, 5);

        statement.setString(2, "广东");

PreparedStatement 有主要两种重要的方法

  • executeQuery():方法执行后返回单个结果集的,通常用于 select 语句。

  • executeUpdate():方法返回值是⼀个整数,指示受影响的行数,通常用于 update、insert、 delete 语句。

3.3.4 查询或操作数据库

添加数据库使用 PreparedStatement.executeUpdate() 方法,返回⼀个 整数,具体实现代码如下:


        // 4.执行 SQL

        int result = statement.executeUpdate();

        System.out.println("受影响的行数:" + result);

3.3.5 关闭数据库连接

关闭数据库连接是为了不浪费 MySQL 服务器端的资源,最终实现代码:


package city_jdbc;



import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;



import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.SQLException;



public class AddCity {

    public static void main(String[] args) throws SQLException {

        // 1.获取数据源 DataSource (设置MySQL的服务器地址)

        MysqlDataSource dataSource = new MysqlDataSource();

        // 1.1 设置连接的 MySQL 服务器

        dataSource.setURL("jdbc:mysql://127.0.0.1:3306/study?characterEncoding=utf8&useSSL=true");

        // 1.2 设置⽤户名

        dataSource.setUser("root");

        // 1.3 设置密码

        dataSource.setPassword("12345678");



        // 2.得到连接 Connection

        Connection connection = dataSource.getConnection();



        // 3.得到执行器 (组装MySQL)

        String insertSql = "insert into city(id, name) values(?, ?)";

        PreparedStatement statement = connection.prepareStatement(insertSql);

        // 填充占位符

        statement.setInt(1, 5);

        statement.setString(2, "广东");



        // 4.执行 SQL

        int result = statement.executeUpdate();

        System.out.println("受影响的行数:" + result);



        // 5.关闭资源(从小到大)

        statement.close();

        connection.close();

    }

}



运行结果:

4. 查询功能实现


查询数据库使用 PreparedStatement.executeQuery 方法,返回⼀个 ResultSet 对象,具体实现代码如下:


package city_jdbc;



import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;



import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;



public class SelCity {

    public static void main(String[] args) throws SQLException {

        // 1.获取数据源,得到DataSource

        MysqlDataSource dataSource = new MysqlDataSource();

        dataSource.setURL("jdbc:mysql://127.0.0.1:3306/study?characterEncoding=utf8&useSSL=true");

        dataSource.setUser("root");

        dataSource.setPassword("12345678");



        // 2.得到连接

        Connection connection = dataSource.getConnection();



        // 3.得到执行器,并组装MySQL

        String selectSql = "select * from city where id<?";

        PreparedStatement statement = connection.prepareStatement(selectSql);

        statement.setInt(1, 10);



        // 4.执行SQL,打印查询结果

        ResultSet resultSet = statement.executeQuery(); // 得到结果集

        while (resultSet.next()) { // 如果结果集的下一行有数据

            City city = new City();

            // resultSet.getInt("id") ——> 查询当前行中列名为“id”的值

            city.setId(resultSet.getInt("id"));

            city.setName(resultSet.getString("name"));

            System.out.println(city);

        }



        // 5.关闭资源

        resultSet.close();

        statement.close();

        connection.close();

    }

}



ResultSet 对象它被称为结果集,它代表符合 SQL 语句条件的所有行,并且它通过⼀套 getXXX 方法提供了对这些行中数据的访问。

ResultSet 里的数据一行一行排列,每行有多个字段,并且有⼀个记录指针,指针所指的数据行叫做当前数据行,我们只能来操作当前的数据行。我们如果想要取得某⼀条记录,就要使用 ResultSet 的 next() 方法 ,如果我们想要得到 ResultSet 里的所有记录,就应该使用 while 循环。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

结语

小编也是很有感触,如果一直都是在中小公司,没有接触过大型的互联网架构设计的话,只靠自己看书去提升可能一辈子都很难达到高级架构师的技术和认知高度。向厉害的人去学习是最有效减少时间摸索、精力浪费的方式。

我们选择的这个行业就一直要持续的学习,又很吃青春饭。

虽然大家可能经常见到说程序员年薪几十万,但这样的人毕竟不是大部份,要么是有名校光环,要么是在阿里华为这样的大企业。年龄一大,更有可能被裁。

送给每一位想学习Java小伙伴,用来提升自己。

在这里插入图片描述

本文到这里就结束了,喜欢的朋友可以帮忙点赞和评论一下,感谢支持!
项目、讲解视频,并且后续会持续更新**

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-KBQZRbtw-1712097632565)]

结语

小编也是很有感触,如果一直都是在中小公司,没有接触过大型的互联网架构设计的话,只靠自己看书去提升可能一辈子都很难达到高级架构师的技术和认知高度。向厉害的人去学习是最有效减少时间摸索、精力浪费的方式。

我们选择的这个行业就一直要持续的学习,又很吃青春饭。

虽然大家可能经常见到说程序员年薪几十万,但这样的人毕竟不是大部份,要么是有名校光环,要么是在阿里华为这样的大企业。年龄一大,更有可能被裁。

送给每一位想学习Java小伙伴,用来提升自己。

[外链图片转存中…(img-x9M71rgO-1712097632565)]

本文到这里就结束了,喜欢的朋友可以帮忙点赞和评论一下,感谢支持!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值