当前位置: 首页 > article >正文

JDBC

JDBC详解

JDBC通过Java代码来操作数据库。

  • 实际工作中大部分数据库操作都是通过代码来完成的

  • 各种编程语言都能够操作数据库,主要原因是因为数据库提供了各个语言版本的API,调用这些API就能操作数据库。

  • 不同的数据库提供的API不太一样,这样导致使用不同的数据库就需要写多份代码。解决这个问题的办法就是把各种数据库的API再次抽象封装一层,封装出一套统一的API,其中Java里面,这样的封装就是由Java标准库来完成,此时这一套封装,就称为JDBC

  1. JDBC就是Java标准库提供的API,通过这一组API就可以操作任何数据库
  2. 数据库的JDBC驱动:相当于Java标准库定制一个标准的API,然后数据库厂商按照这套标准来提供一组接口

JDBC开发

JDBC API是标准库自带,直接就能用

MySQL的JDBC驱动,不是系统自带的,需要额外下载

中央仓库: Maven Repository: Search/Browse/Explore (mvnrepository.com)

MySQL的JDBC驱动

  1. 8.x系列
  2. 5.x系列 (bit使用

这里下载的是对应的jar包,jar包相当于.class文件的压缩包

import com.mysql.jdbc.JDBC4PreparedStatement;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;
import javax.sql.DataSource;

/**
 * Created by 伦敦看日出
 * Description:
 * User: yyt
 * Date: 2023-3-21
 * Time: 15:56
 */
public class Test {
    public static void main(String[] args) throws SQLException {
        // testInsert();
        // testDelete();
        testSelect();
    }
    // 1.尝试插入
    public static void testInsert() throws SQLException {
        // A:创建数据库源,把数据库的位置信息设置进去
        // 1.DataSource这个概念表示数据库在哪,来源于标准库的一个interface
        // 2.MysqlDataSource来源于下载的MySQL jar包
        DataSource dataSource = new MysqlDataSource();
        // 3.建立于数据库的连接,ip 端口 数据名 | 这里涉及到向下转型
        //characterEncoding指定编码方式 | useSSL=false 关闭加密
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java101?characterEncoding=utf8&useSSL=false");
        // 4.输入用户名于密码 root | 1234
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("1234");

        // B:连接数据库,进行真正的网络通信
        // 5. 如果连接上了返回一个Connection实例,否则抛出一个异常
        //    Connection在标准库和MySQL都有,这里使用的是标准库的:导入import java.sql.Connection;
        //    抛出异常 throws SQLException 不然getConnection会有波浪线爆红
        Connection connection = dataSource.getConnection();

        //动态变化:拼接SQL,但是不安全,不太建议使用
        // 让用户输入表中的信息
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入学号:");
        int id = scanner.nextInt();
        System.out.println("请输入姓名:");
        String name = scanner.next();

        // C.构造一个SQL语句,为插入做准备
        //   通过其它语言操作数据库,本质上还是使用SQL
        //   这里不需要使用use,通过上述操作已经直接连接到了对应的数据库
        // String  sql = "insert into student values(1,'张三')";
        // String  sql = "insert into student values("+ id +",'"+ name +"')";
        //   下面这里的?表示占位符,后续使用PreparedStatement将其替换成具体的值
        String  sql = "insert into student values(?,?)";
        //   使用一个SQL还不够,要想使用SQL,还需要一个专门的对象,PreparedStatement
        //   Connection自身知道服务器的位置(从DataSource过来),
        //   通过Connection创建出了prepareStatement,此时prepareStatement也知道服务器的位置了
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1,id);
        statement.setString(2,name);
        System.out.println("sql:" + statement);

        // D.执行SQL
        //   客户端把SQL通过网络请求,发送给mysql服务器
        //   MySQL服务器来解析这个SQL请求,执行具体操作,返回响应结果
        //   此处使用 executeUpdate 来完成数据库内容的变更 | 变更包括 insert,update,delete
        //   返回值表示这个操作影响到的行数
        int row = statement.executeUpdate();
        System.out.println("ret: "+ row);

        // E.执行完SQL,回收资源
        statement.close();
        connection.close();
    }

    // 2.尝试删除
    public static void testDelete() throws SQLException{
        // 1.创建数据源,把数据库的位置信息,设置进去
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java101?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("1234");

        // 2.和数据库建立连接
        Connection connection = dataSource.getConnection();

        // 3.构造SQL
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入需要删除的id: ");
        int id = scanner.nextInt();
        String sql = "delete from student where id = ?";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1,id);

        // 4.执行SQL
        int row = statement.executeUpdate();
        System.out.println("row= " + row);

        // 5.释放资源
        statement.close();
        connection.close();
    }

    // 3.尝试修改
    public static void testUpdate() throws SQLException {
        // 1.创建数据源,把数据库的位置信息设置进去
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java101?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("1234");

        // 2.和数据库建立连接
        Connection connection = dataSource.getConnection();

        // 动态修改代码
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要修改的id: ");
        int id = scanner.nextInt();
        System.out.println("请输入要修改的name: ");
        String name = scanner.next();

        // 3.构造SQL
        String sql = "update student set name = ? where id = ?";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setString(1, name);
        statement.setInt(2,id);

        // 4.执行SQL
        int row = statement.executeUpdate();
        System.out.println("row= "+ row);

        // 5.释放资源
        statement.close();
        connection.close();

    }

    // 4.尝试查找
    public static void testSelect() throws SQLException {
        // 1.创建数据源,将数据库的位置信息设置进去
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java101?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("1234");

        // 2.和数据库建立连接
        Connection connection = dataSource.getConnection();

        // 3.构造SQL
        String sql = "select * from student";
        PreparedStatement statement = connection.prepareStatement(sql);

        //4.执行SQL
        ResultSet resultSet = statement.executeQuery();

        // 5.遍历结果集合
        while (resultSet.next()) {
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            System.out.println("id: "+ id + ", name: "+ name);
        }

        // 6.释放资源
        resultSet.close();
        statement.close();
        connection.close();
    }
}


http://www.kler.cn/a/2465.html

相关文章:

  • C++虚函数与多态
  • ChatGPT推出第四代GPT-4!不仅能聊天,还可以图片创作!
  • 【图神经网络 文献精读】针对SARS-CoV-2大流行的改进和优化的药物再利用方案
  • 生成时序异常样本-学习记录-未完待续
  • 毕业设计 基于51单片机自动智能浇花系统设计
  • 【十二天学java】day05--数组和循环高级
  • 01 | Msyql系统架构
  • 学习系统编程No.7【进程替换】
  • 从地图到手机通讯到ChatGPT,你想要的免费 API 都给你整理好了
  • uni-app:登录与支付-- 三秒后自动跳转
  • SLF4J、Log4J、Log4J2、Logback之间是什么关系
  • 【linux】:进程控制
  • java各大集合的区别
  • 推荐一款免费开源的OCR软件
  • 菜鸟刷题Day1
  • GPIO四种输入和四种输出模式
  • 最优化算法 - 动态规划算法
  • 基于springboot的婚纱摄影网站
  • debian11安装k8s
  • Tornado 异步协程coroutine原理