【MySQL】数据库编程JDBC (很重要)

数据库编程(JDBC)

1.数据库编程:JDBC

JDBC,即Java Database Connectivity,java数据库连接。是一种用于执行SQL语句的Java API,它是Java中的数据库连接规范。这个API由 java.sql.,javax.sql. 包中的一些类和接口组成,它为Java开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问.

2.数据库编程的必备条件

  • 编程语言,如Java,C、C++、Python等
  • 数据库,如Oracle,MySQL,SQL Server等
  • 数据库驱动包:不同的数据库,对应不同的编程语言提供了不同的数据库驱动包,如:MySQL提供了Java的驱动包mysql-connector-java,要基于Java操作MySQL即需要该驱动包。同样的,要基于Java操作Oracle数据库则需要Oracle的数据库驱动包ojdbc.

3.JDBC工作原理

JDBC 为多种关系数据库提供了统一访问方式,作为特定厂商数据库访问API的一种高级抽象,它主要包含一些通用的接口类.
image-20211103221836716

4.JDBC优势

  • Java语言访问数据库操作完全面向抽象接口编程
  • 开发数据库应用不用限定在特定数据库厂商的API
  • 程序的可移植性大大增强

5.下载jar包的方式

jar包下载链接
image-20211103223406930
image-20211103223911664
image-20211103224021378

6.JDBC的使用(jar包的导入)

  • 准备数据库驱动包(jar包),并添加到项目的依赖中:过程如下图
    image-20211102010533460
    如果在代码中能够访问到里面的类,就算导入成功了。

如果像这样就算导入成功了
image-20211102012649297

7. JDBC使用步骤

JDBC中提供了两套API,这里使用DataSource对象。

1.创建DataSource对象(准备工作);

2.基于DataSource对象,创建Connection对象和数据库建立连接(这相当于在系统自带的客户端中,打开了客户端,输入了密码,连接成功了);

3.PrepareStatement对象拼装具体的SQL语句(这相当于在客户端中输入SQL语句的过程)

4.拼装好SQL之后,需要执行SQL (这相当于在客户端中敲下回车,此时SQL就被发到服务器了)

5.查看服务器返回的结果(这相当于在客户端显示出结果)

6.关闭连接,释放资源(这相当于退出客户端)

看完整代码之前,先对下图中的这句代码了解一下,它关系到数据库的访问能否成功,不需要记,用的时候复制粘贴过去即可,但是要特别注意需要注意的地方。

image-20211103231710483

7.1 通过JDBC执行插入操作

通过JDBC来插入数据的完整代码如下:细节都在注释中,懂的可自行忽略哦~~

package java2021_1031;

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

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

/**
 * Created by Sun
 * Description:《JDBC之插入insert:通过JDBC来插入数据》
 */
public class TestJDBCInsert {
    public static void main(String[] args) throws SQLException {
        //1.创建DataSource对象  (DataSource对象的生命周期应该是要跟随整个程序,即一个应用程序只要创建一个DataSource对象就ok了)
        DataSource dataSource = new MysqlDataSource();
        //接下来需要针对dataSource进行一些配置,以便后面能够顺利的访问到数据库服务器
        //数据库的基本配置:主要配置三方面信息,URL、User、Password 需要进行向下转型
        //配置URL:网址
        ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java2021_1031?characterEncoding=utf-8&useSSL=true");
        //配置User:用户名
        ((MysqlDataSource) dataSource).setUser("root");
        //配置Password:密码
        ((MysqlDataSource) dataSource).setPassword("root");//这里的密码跟数据库中的密码一致
        //2.建立连接(和数据库建立连接)
        //上面数据库的相关参数都配置好了,直接调用getConnection(),就表示和数据库建立连接
        Connection connection = dataSource.getConnection();//getConnection()这个操作,将会得到一个Connection(连接)对象,要选择 java.sql这个包
        //这个连接建立好之后就会给数据库发送一些请求,然后数据库会做出一些回应,就表示连接就建立好了。建立连接好了之后就可以进行后续的数据传输了。
        //理解建立连接:相当于生活中的打电话,你拨通之后,对方给你一个回应,确认双方信号良好,就可以进行正常通话了,这也就表示连接建立成功了。
        //connection的生命周期是比较短的,每次请求都可以创建一个新的connection
        //每个请求是指:每次你要给服务器发一个请求,如每次访问数据库,都可以创建一个新的connection,当然,也可以一个connection反复去用。
        //3.拼装SQL,这里要用到PrepareStatement对象
        //先以插入数据为例,进行展示
        /*String sql = "insert into student values (1,'重楼',101)";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);*/
        //上面这两句代码中要插入的数据内容都是写死的,其实也可以让程序在运行时获取到,可以动态的拼接进去,如下面这样的代码
        int id = 1;
        String name = "重楼";
        int classid = 10;
        //?是一个占位符,可以把具体的变量的值替换到?的位置
        String sql = "insert into student values(?,?,?)";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);//进行拼装
        preparedStatement.setInt(1,id);//下标替换
        preparedStatement.setString(2,name);
        preparedStatement.setInt(3,classid);
        //这里的1,2,3相当于?的下标(下表从1开始算)
        System.out.println("preparedStatement:"+preparedStatement);//打印拼装之后的效果

        //4.拼装完毕之后,就可以执行SQL了
       int ret = preparedStatement.executeUpdate();//执行修改语句,executeUpdate()返回的值的类型是int类型,这个返回值表示此次操作完成时候修改了多少行
        //像insert delete update 操作都是用executeUpdate()方法来执行
        //如果是select 的话就是用executeQuery来执行
        System.out.println("ret:"+ret);//打印修改之后的效果
        //5.执行完毕之后,关闭释放相关资源
        preparedStatement.close();//释放语句
        connection.close();//释放连接
        //释放语句和释放连接这两句的释放顺序也不能错,一定是后创建的先被释放,连接先创建的所以后释放

        //JDBC的代码看起来麻烦,但是写多了之后就会发现都是固定的套路,都是这一套代码,里面的基本代码都是固定代码。
        //运行一次客户端就会插入一次
    }
}

image-20211103225612694

7.2 通过JDBC执行查找操作

通过JDBC来查找数据的完整代码如下:

package java2021_1031;

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

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * Created by Sun
 * Description:《JDBC之查找select:通过JDBC来查找数据》
 *1.创建DataSource对象
 *2.创建Connection对象,和数据库建立连接
 *3.借助prepareStatement 拼装SQL语句
 *4.执行SQL语句
 *5.遍历结果集:插入没有结果只需插入就行了,但是查找操作会得到一系列的结果集,
 * 这个结果集相当于是一张临时表,我们需要知道这张表里面都有哪些数据,需要把数据都能够获取到,所以这里需要遍历结果集。
 *6.关闭释放资源
 */
public class TestJDBCSelect {
    public static void main(String[] args) throws SQLException {
        // 1.创建DataSource对象
        DataSource dataSource = new MysqlDataSource();
        //向下转型, 设置URL、用户名、密码
        ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java2021_1031?characterEncoding=utf-8&useSSL=true");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("root");
        // 2.创建Connection对象,和数据库建立连接
        Connection connection = dataSource.getConnection();
        // 3.借助prepareStatement 拼装SQL语句
        String sql = "select * from student";//拼装SQL语句
        PreparedStatement preparedStatement = connection.prepareStatement(sql);//进行拼装
        // 4.执行SQL语句
        ResultSet resultSet = preparedStatement.executeQuery();//执行查询语句,executeQuery()返回的值的类型是ResultSet类型,它表示select 查找结果的结果集
        //换句话说就是select查询的结果全都包含在ResultSet对象中,通过这个对象就可以去获取结果集。
        // 5.遍历结果集
        /*遍历结果集和使用迭代器遍历集合类有点像,结果集相当于一张表,这个表里有很多行,每一行是一条记录,每一行又包含很多列
        * next()操作:一方面是判定当前是否存在下一行,另一方面如果存在下一行就获取当前行
        * 可以直观的把resultSet对象想象成是一个“光标”,初始情况下resultSet的光标不指向任何记录,第一次调用next就会判定当前结果集是否为空
        * 如果为空,直接next就返回false,如果非空,next就会返回true,同时让光标指向第一行记录。
        * 后续再循环执行到next,仍然是先判定下一行是否存在,不存在,就返回false,存在就返回true,同时让光标指向下一行记录,直到返回false循环结束*/
        while(resultSet.next()){    //由于不知道结果集有多少行,可以使用while循环
            //resultSet的光标指向了当前行,就可以把当前行中的列数据都获取到,注意列数据的类型
            int id = resultSet.getInt("id");//此处参数中写的列名必须和数据库表结构中的列名完全一致
            String name = resultSet.getString("name");
            int classid = resultSet.getInt("classid");
            System.out.println("id:"+id+" name:"+name+" classid:"+classid);
        }
        // 6.关闭释放资源
        resultSet.close();
        preparedStatement.close();
        connection.close();
        //释放语句和释放连接这两句的释放顺序也不能错,一定是后创建的先被释放,连接先创建的所以后释放
    }
}

image-20211103225941709

7.3 通过JDBC执行删除操作

通过JDBC来删除数据的完整代码如下:

package java2021_1031;

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

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

/**
 * Created by Sun
 * Description:《JDBC值删除delete:通过JDBC来删除数据》
 */
public class TestJDBCDelete {
    public static void main(String[] args) throws SQLException {
        //通过Scanner把要删除的学生姓名输入进去
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要删除的学生姓名:");
        String name = scanner.next();

        //1.创建DataSource对象
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java2021_1031?characterEncoding=utf-8&useSSL=true");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("root");
        //2.建立连接
        Connection connection = dataSource.getConnection();
        //3.拼装SQL
        String sql = "delete from student where name = ?";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setString(1,name);//下标替换,设置内容
        //4.执行SQL
       int ret =  preparedStatement.executeUpdate();
       if(ret == 1){
           System.out.println("删除成功!");
       }else{
           System.out.println("删除失败~");
       }
       //5.关闭并释放资源
        preparedStatement.close();
        connection.close();
    }
}

image-20211103230312243

7.4 通过JDBC执行修改操作

通过JDBC来修改数据的完整代码如下:

package java2021_1031;

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

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

/**
 * Created by Sun
 * Description:《JDBC之修改update:通过JDBC来修改数据》
 */
public class TestJDBCUpdate {
    public static void main(String[] args) throws SQLException {
        //让用户输入id为n的学生的姓名
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要修改的学生id:");
        int id = scanner.nextInt();
        System.out.println("请输入要修改的学生姓名:");
        String name = scanner.next();

        //1.创建DataSource对象
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java2021_1031?characterEncoding=utf-8&useSSL=true");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("root");
        //2.建立连接
        Connection connection = dataSource.getConnection();
        //3.拼装SQL
        String sql = "update student set  name = ? where id = ? ";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setString(1,name);//下标替换,设置内容
        preparedStatement.setInt(2,id);
        //4.执行SQL
        int ret = preparedStatement.executeUpdate();
        if(ret == 1){
            System.out.println("修改成功");
        }else{
            System.out.println("修改失败~");
        }
        //5.关闭并释放资源
        preparedStatement.close();
        connection.close();
    }
}

image-20211103230705492

8.JDBC编程中主要用到的类/对象

  • DataSource:用于配置如何连接MySQL
  • Connection:表示建立好的一次连接(操作数据库之前需要先建立连接)
  • PrepareStatement:对应到一个SQL语句
  • ResultSet:表示select 查找结果的结果集

9.JDBC使用步骤总结

  1. 创建数据库连接Connection
  2. 创建操作命令Statement
  3. 使用操作命令来执行SQL
  4. 处理结果集ResultSet
  5. 释放资源

1.创建数据库连接Connection

  • DriverManager创建
  • DataSource获取
    2.创建操作命令Statement
  • PreparedStatement
    3.使用操作命令来执行SQL
// 查询操作
preparedStatement.executeQuery();
// 新增、修改、删除操作
preparedStatement.executeUpdate();

4.处理结果集ResultSet

while (resultSet.next()) {
    int xxx = resultSet.getInt("xxx");
    String yyy= resultSet.getString("yyy");
 ...
}

5.关闭并释放资源

  • 释放语句和释放连接这两句的释放顺序不能错,一定是后创建的先被释放,连接先创建的所以后释放
resultSet.close();
preparedStatement.close();
connection.close();
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
MySQL数据库编程是通过使用MySQL数据库管理系统进行交互和操作数据库的过程。它涵盖了使用SQL语言进行数据查询、插入、更新和删除操作,以及使用编程语言(如Python、Java、PHP等)与MySQL数据库进行连接和交互的方法。 在MySQL数据库编程中,你可以执行以下操作: 1. 连接MySQL数据库:使用编程语言提供的MySQL连接库,如mysql-connector-python、JDBC等,连接MySQL数据库。 2. 创建数据库和表:使用SQL语句在MySQL中创建数据库和表,定义表的结构和字段。 3. 插入数据:使用INSERT语句将数据插入到表中。 4. 查询数据:使用SELECT语句从表中检索数据,可以使用各种条件、排序和限制查询结果。 5. 更新数据:使用UPDATE语句更新表中的数据。 6. 删除数据:使用DELETE语句从表中删除数据。 7. 执行事务:使用事务来确保一组操作要么全部成功要么全部失败,保持数据的一致性。 8. 使用索引和优化查询:通过创建适当的索引和优化查询语句,提高数据库查询的性能。 9. 备份和恢复数据:使用备份工具或编程方法对数据库进行备份,并在需要时恢复数据。 以上仅是MySQL数据库编程的基本操作,还有更多高级技术和概念可供学习和应用,如存储过程、触发器、视图等。通过深入学习和实践,你可以掌握更多复杂的数据库编程技巧和最佳实践。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值