IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL之JDBC概述 - 是什么?干什么?JDBC连接数据库的详细步骤(IDEA) -> 正文阅读

[大数据]MySQL之JDBC概述 - 是什么?干什么?JDBC连接数据库的详细步骤(IDEA)

目录

?一、JDBC是什么?

二、使用JDBC操纵数据库步骤

1. 安装JDBC驱动包

2. 在程序中导入驱动包

3. 连接数据库

4. JDBC操纵数据库?


一、JDBC是什么?

JDBC是?用来执行SQL语句操纵数据库 的 一套规范性API接口

🔊 JDBC是操纵数据库的

可能有小伙伴用的是命令行或者图形界面操纵数据库。不过实际开发时,在自己编写的代码中访问数据库的情况较多。要想在自己编写的代码中操纵数据库,就需要用到JDBC

🔊 ?API接口

由一些类/方法/函数等组成,通过直接调用 API 接口来实现一些功能。比如之前在Java标准库中提供的一些类,可以叫做Java API

🔊 规范性

主流的数据库为了方便程序员实现客户端程序,会提供一些API接口。借助这些接口,我们可以比较方便的访问数据库服务器。不过主流的数据库厂商很多,各家的API百花齐放不尽相同,实际开发过程中使用的非常不顺畅。

于是为了统一,Java提出了一套标准的接口体系。所有厂商将自家的API往标准适配,于是有了适配的程序包叫做JDBC驱动包。

在Java JDBC编程中对数据库的操作均使用JDK自带的API统一处理,通常与特定数据库的驱动类是完全解耦的。我们不用学各家数据库的API,只需要掌握Java JDBC API (位于 java.sql 包下)即可掌握Java数据库编程。

二、使用JDBC操纵数据库步骤

进行JDBC编程,需要先安装MySQL对应的驱动包再进行相关操作,我们一步一步来...

1. 安装JDBC驱动包

各大网站很容易搜到

2. 在程序中导入驱动包

🟢先创建一个项目

🟢再创建一个lib目录(名字自取)

🟢将下载好的驱动包复制到lib目录下(一直点ok即可)

🟢 add驱动包

🔴常见错误

?没找到add键 -> 创建lib目录的路径不对,一定要根据图示在主项目的目录下创建

3. 连接数据库

//1. 使用Datasource类,描述MySQL服务器的位置
  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("123456");

//2. 和数据库服务器建立连接
  Connection connection=dataSource.getConnection();//处理异常
  System.out.println(connection);

🟢如果出现下列输出,则表示连接成功 ~

🔴?任何一个细节错误,都会导致连接失败!

? ? ? 检查url地址:符号是否正确,数据库test是否已经创建;

? ? ? 检查密码:密码是当时安装时设置的那个用户密码

🔊 关于URL地址

?URL即统一资源定位符,用来表示互联网上的某个资源地址

🔊 为什么先向上转型又向下转型?直接用MysqlDataSource创建对象不可以吗?

? ? ? 使用DataSource创建,得到的数据源是DataSource类型。后续写其他代码,如果使用到? 数据源,持有的类型也是DataSource类。DataSource是通用的类型,可以指带任何数据库。如果以后需要更换数据库,代码改动量小;

? ? ? 使用MysqlDataSource,得到的数据源是MysqlDataSource类型。而MysqlDataSource是? MySQL特有的类型,后续如果需要更换数据库,代码改动量大

🔊 不用记url代码,使用时直接复制即可 ~

?

4. JDBC操纵数据库?

数据库Test中有一个student表,结构如下图所示。我们使用这个案例作为参考,展示相关操作

?🟣 插入

package learn.day;
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;

public class JDBCTest1 {
    public static void main(String[] args) throws SQLException {
        //1. 使用Datasource类,描述MySQL服务器的位置
        DataSource dataSource=new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/work5?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("jiuban521");

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

        //3. 用户输入信息
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入学号:");
        int id=scanner.nextInt();
        System.out.println("请输入姓名:");
        String name=scanner.next();

        //4. 构造SQL语句-JDBC操作数据库,本质上还是通过SQL来描述数据库操作
        String sql=" insert into student values("+id+",' "+name+" ') ";//相当于insert into student values(id,name)。id,name是自己输入的数据
        PreparedStatement statement=connection.prepareStatement(sql);
        //注意:sql需要搭配PreparedStatement对象使用,不能只写一个String

        //5. 执行sql语句
        // update、delete、insert操作都是通过executeUpdate来执行的
        // 查询操作不同,通过executeQuery来执行
        int n=statement.executeUpdate();
        System.out.println(n);

        //6. 断开连接,释放资源
        statement.close();
        connection.close();
        //注意:断开连接的先后顺序,先断statement
    }
}

🔊 一些细节

???Connection选择的是java.sql,不是com.mysql.jdbc

?易错点:一定要选择java.sql,否则没办法完成增加操作

???Connection连接时需要处理异常

???System.out.println(n)输出改变的行数

🔊 拓展小知识

网络通信中,有两种风格

① 有连接 - 相当于“打电话”,有人接才传送信息

② 无连接 - 相当于“发微信”,不管是否接通,都先传送信息

数据库采用的是有连接的方式。好处是,保证通信的过程中线路畅通;坏处是,需要对连接进行管理,及时释放不需要用的连接(有点像打电话,没有断开通话,外面没办法打进来)

不过使用字符串拼接的方式不够科学

① 引号容易出混淆、出错

② 可能出现安全性问题(sql注入攻击 - 如果用户输入时故意构特殊代码,比如name=);drop table等代码,后果非常严重)

所以我们需要在原来代码的基础上进行改进,改进 “构造sql” 这一块的代码:

package learn.day;

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;

public class JDBCTest1_1{
    public static void main(String[] args) throws SQLException {
        //1. 描述位置
        DataSource dataSource=new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/work5?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("jiuban521");

        //2. 建立连接
        Connection connection=dataSource.getConnection();

        //3. 用户输入
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入学号:");
        int id=scanner.nextInt();
        System.out.println("请输入姓名:");
        String name=scanner.next();

        //4. 构造sql语句
        String sql="insert into student values(?,?)";//使用?作为占位符,后续用statement对象针对?进行替换
        PreparedStatement statement=connection.prepareStatement(sql);
        statement.setInt(1,id);//针对第一个?,替换成id
        statement.setString(2,name);//针对第二个?,替换成name

        //5. 执行sql语句
        int n=statement.executeUpdate();
        System.out.println(n);

        //6. 断开连接,释放资源
        statement.close();
        connection.close();
    }
}

?🟣 更新

package learn.day;

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;

public class JDBCTest2{
    public static void main(String[] args) throws SQLException {
        //1. 描述位置
        DataSource dataSource=new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/work5?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("jiuban521");

        //2. 建立连接
        Connection connection=dataSource.getConnection();

        //3. 用户输入信息
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入你准备修改的同学学号id:");
        int id=scanner.nextInt();
        System.out.println("请输入你要修改后的信息:");
        String name=scanner.next();

        //4. 构造sql语句4
        String sql="update student set name = ? where id = ?";
        PreparedStatement statement=connection.prepareStatement(sql);
        statement.setString(1,name);
        statement.setInt(2,id);
        System.out.println(statement);

        //5. 执行sql语句
        int n=statement.executeUpdate();
        System.out.println(n);

        //6. 断开连接,释放资源
        statement.close();
        connection.close();
    }

}

?🟣 删除

package learn.day;
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;

public class JDBCTest3 {
    public static void main(String[] args) throws SQLException {
        DataSource dataSource=new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/work5?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("jiuban521");

        Connection connection=dataSource.getConnection();

        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入你要删除的学生的学号:");
        int id=scanner.nextInt();
        System.out.println("请输入你要删除的学生的学号:");
        String name=scanner.next();

        String sql="delete from student where id=? and name=?";
        PreparedStatement statement=connection.prepareStatement(sql);
        statement.setInt(1,id);
        statement.setString(2,name);
        System.out.println(statement);

        int n=statement.executeUpdate();
        System.out.println(n);

        statement.close();
        connection.close();
    }
}

?🟣 查询

package learn.day;

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;
import java.util.Scanner;

public class JDBCTest4 {
    public static void main(String[] args) throws SQLException {
        //描述位置
        DataSource dataSource=new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/work5?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("jiuban521");

        //建立连接
        Connection connection=dataSource.getConnection();

        //直接查全表,不设置用户输入
        //构造 sql语句
        String sql="select * from student";
        PreparedStatement statement =connection.prepareStatement(sql);

        //执行sql语句
        //我们需要得到的是一张表的所有值,所以前面的executeUpdate返回类型为int不再适用
        //这里使用executeQuery,返回类型是ResultSet
        ResultSet resultSet= statement.executeQuery();
        //拿到结果集results,需要遍历打印
        while(resultSet.next()){
            int id=resultSet.getInt("id");
            String name=resultSet.getString("name");
            System.out.println(id+":"+name);
        }

        //断开连接,释放资源
        statement.close();
        connection.close();
    }
}

🔊?ResultSet的用法

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-07-21 21:37:17  更:2022-07-21 21:39:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:41:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码