【JAVA】MySQL之JDBC编程

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

一、连接MySQL的前置工作

需要在中央仓库内下载驱动包,后在项目中导入,具体操作如下:

 在下列版本中找到与当前电脑的数据库版本相同的jar包即可:

 进入具体版本后如下:

 下载完之后,需要在项目中导入这个jar包,需要先创建一个目录,需要与src同级

标记成为存放库文件(.jar包)的目录,这样IDEA就能识别目录中的jar包

 完成以上操作,数据库所需要的驱动包就完成了,下面我们进行JDBC的使用

二、JDBC的使用

前言:需要先在数据库中创建库,表等:

2.1 插入数据

1.创建数据库源对象,其作用是描述了要访问的数据库是啥,在哪:

        DataSource dataSource = new MysqlDataSource();

分析:

DataSource 是一个接口,而MysqlDataSource是我们往项目中导入的那个jar包,如果导入操作失败,则这个类找不到:

告知数据库位置及其密码:

        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/JDBC?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("00000");

 分析:

  • URL为唯一资源定位符
  • 这里运用到了向下转型,因为DataSource是服务于各种数据库的,而MysqlDataSource只服务于MySQL
  • 127.0.0.1是一个特殊IP(环回IP),表示本机IP
  • 安装数据库时候,端口号默认为3306
  • JDBC为你现在要访问的数据库名称

2.让数据库和代码建立联系

调用DataSource类的getConnection方法,后用Connection类的引用接收,需要导入正确的包: import java.sql.Connection;
        Connection connection = dataSource.getConnection();

完成之后,因为其是受查异常,需要处理(throws或try-catch)。

注:这里不使用DriverManager的原因是,DriverManager每次getConnection都需要重新建立连接,而DataSource则是可以内置 连接池,连续复用,大大提高了效率。

3.构造要执行的sql语句

        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);
        System.out.println("statement:  "+statement);

分析:?为占位符,顾名思义,先占个位置,后面会被替换成其他值,PreparedStatement 表示一个预处理过的SQL语句对象

4.执行语句并回收资源

        //执行方法有两个,一个executeUpdate 对应插入删除修改语句 
        // executeQuery对应查询语句        
        int n = statement.executeUpdate();
        System.out.println("这次操作影响了"+n+"行数据");
        //完成之后,需要释放相关资源(关闭资源的顺序与创建的资源顺序相反)
        statement.close();
        connection.close();

分析:statement.executeUpdate()的返回值表示影响了几行数据相当于数据库中的:

完整代码:

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 with IntelliJ IDEA.
 * Description:
 * User: 86136
 * Date: 2022-08-28
 * Time: 14:43
 */
public class Test {
    public static void main(String[] args) throws SQLException {
        //DataSource 是一个接口,而MysqlDataSource是我们往项目中导入的那个jar包
        //1.创建数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/JDBC?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("030106");
        //2.让数据库和代码建立联系
        Connection connection = dataSource.getConnection();
        //3.构造要执行的sql语句
        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);
        System.out.println("statement:  "+statement);
        //4.执行sql
        //执行方法有两个,一个executeUpdate 对应插入删除修改语句 ,
        // executeQuery对应查询语句
        int n = statement.executeUpdate();
        System.out.println("这次操作影响了"+n+"行数据");
        //5.完成之后,需要释放相关资源(关闭资源的顺序与创建的资源顺序相反)
        statement.close();
        connection.close();
    }
}

2.2 删除数据

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 with IntelliJ IDEA.
 * Description:
 * User: 86136
 * Date: 2022-08-28
 * Time: 16:54
 */
public class DeleteData {
    public static void main(String[] args) throws SQLException {
        //1.创建数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/JDBC?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setPassword("030106");
        ((MysqlDataSource)dataSource).setUser("root");
        // 2.建立连接
        Connection connection = dataSource.getConnection();
        // 3.构造语句
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你要删除的数据");
        int id = scanner.nextInt();
        String sql = "delete from student where id = ? ";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1,id);
        //4. 执行语句
        int n = statement.executeUpdate();
        System.out.println("这次操作影响了"+n+"行数据");
        //5.关闭资源
        statement.close();
        connection.close();
    }
}

2.3 查询数据

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 with IntelliJ IDEA.
 * Description:
 * User: 86136
 * Date: 2022-08-28
 * Time: 17:23
 */
public class select {
    public static void main(String[] args) throws SQLException {
        // 1.创建数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/JDBC?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("030106");
        // 2 建立连接
        Connection connection = dataSource.getConnection();

        // 3.构造SQL
        String sql = "select * from student";
        PreparedStatement statement = connection.prepareStatement(sql);
        // 4.执行sql
        //executeQuery 返回的结果是ResultSet,结果集,里面是一个”表“这样的数据结构
        ResultSet resultSet = statement.executeQuery();
        // 5. 遍历结果集合
        while (resultSet.next()){
            //每次循环,就能够获取到resultSet中的一行,进一步就可以拿到每一列。
            int id = resultSet.getInt("id");//”“里面填写的是列名
            String name = resultSet.getString("name");
            System.out.println("id = "+id+", name = "+name);
        }
        // 6,相关资源的释放
        resultSet.close();
        statement.close();
        connection.close();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值