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

MySQL中 java 的 JDBC 编程使用方法及驱动包的下载和使用

文章目录

  • 1.简介
  • 2.JDBC 的使用
    • 2.1 先安装对应数据库的驱动包~~
    • 2.2 把安装好的 jar 驱动包导入到项目中~~
      • 2.2.1 在项目中创建目录,把 jar 包拷贝进来。
      • 2.2.2 右键创建的目录
  • 3.编写数据库代码插入一个记录
  • 4.查看插入记录后的数据表
  • 5.如何编写代码实现查找操作

1.简介

实际开发中要绝大多数要通过代码来执行 sql 语句,这就需要让其他的编程语言来操作数据库服务器。



API 是什么意思:

例子:某个东西可以带给我某个功能。

例子:我可以和我的朋友一起吃法、一起学习、一起打游戏。

例如 java 的标准库就会给我们提供一些 API,这个 API 中有一些随机数、scanner、集合类等。

mysql 也会提供这样的一组 API ,可以通过这组API来完成增删改查的操作~~

2.JDBC 的使用

2.1 先安装对应数据库的驱动包~~



要下载其中的 MySQL 驱动包,可以去官网下载也可以去 “中央仓库” 下载。

中央仓库 相当于是手机上的应用商店。

安装驱动包的网址:https://mvnrepository.com/


查询步骤:

1、访问网站



2、搜索 mysql


搜所结果第一个就是目标。


3、点进去往下滑动找到适合的版本(要和自己的数据库服务器对应)



往下滑找到大版本是5.1即可。



4、点击选中的版本后进入以下页面,点击此处下载


安装完成。

2.2 把安装好的 jar 驱动包导入到项目中~~

2.2.1 在项目中创建目录,把 jar 包拷贝进来。


1、点击圈出的部分



2.出现以下页面后,给目录命名。



3、选中目录,完成项目的创建。



4、创建一个新的目录。



5、点击后来到以下页面,目录名字随便起。



6、将之前装好的 jar 包 ctrl c v 过来即可,会出现以下界面。



7、完成

2.2.2 右键创建的目录


1、点击圈出的



2、在出现的窗口中点击ok即可



3、jar 包顺利导入

3.编写数据库代码插入一个记录


新建一个 java 文件,以插入一个记录为例子。

public class JdbcInsertDemo {
    public static void main(String[] args) {
        // 使用 jdbc 往数据库中插入一个记录
        // 需要提前准备好数据库(java)和数据表(student)
        // 1.创建数据源,描述了数据库服务器在哪
        // 2.和数据库建立网络连接(写的 jdbc 代码本质上是一个 MySQL 客户端,要通过网络和服务器进行通信)
        // 3.构造一个 sql 语句来完成 插入操作
        // 4.执行 sql 语句(控制服务器给客户端发送请求)
        // 5.断开与数据库的连接,并且释放必要的资源
    }
}




1、创建数据源,描述了数据库服务器在哪

需要注意的是,不同的数据库,对于数据源的描述是存在差异的。
有的数据库是通过用户名密码来认证,也有的不是,比如 SQLite

 DataSource dataSource = new MysqlDataSource();

这相当于是 向上转型

创建数据源需要用到 DataSource 类,这个类的包是 javax.sql
这个包中放的就是一些与 jdbc 相关的类。



下面要开始设置数据库所在的 地址端口数据库名

((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java?characterEncoding=utf8&useSSL=false");


这里就相当于是 向下转型

URL 指的是唯一资源地址符,描述了互联网的唯一的一个资源的位置,也就是生活中所说的 “网址”。


jdbc:mysql://127.0.0.1:3306/java?characterEncoding=utf8&useSSL=false

  • jdbc 表示的是 这个 url 是给 jdbc中的 mysql 来使用的
  • 127.0.0.1 表示的是 数据库服务器所在的 IP 地址
  • 3306 表示的是 mysql 安装的时候配置的 端口号,一般默认是 3306。
  • java 表示这是 访问的 数据库名
  • charactEncoding=utf8 表示 描述了 请求的字符编码方式,一般都是设置成 utf8
  • useSSL=false 表示 关闭加密功能


接下来设置登录的 用户名密码(用户名默认是root)

((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("000000");


这里需要 注意 的是除了 数据库名密码 不同的人操作的可能是不一样的。
其他的都是和我的一样的。



2、和数据库建立网络连接。

上面的操作,只是描述了服务器在哪,并没有真正进行访问。

紧接着进行的 “连接操作” 才是真正的开始通过阅读进行通信。

Connection connection = dataSource.getConnection();


在提示的所有 Connection 中,选择下图中选择圈中的那一个。



上面写的那一条语句可能会抛异常。




下面就是会抛出的异常。



java 的异常,分为两类。

  1. 受查异常(必须要显示处理)
  2. 非受查异常(可以忽略)

受查异常是 try 自己把这个异常捕获处理了。
throws 交给别人来处理。

上面的 SQLException 就是一个受查异常。



这里main方法的 throws 意思是让 jvm 自己处理。
而 jvm 的处理方式很简单,就是直接摆烂。



3、构造一个 sql 语句来完成 插入操作


下面的代码只是相当于描述了 sql 是什么样的,还没有真正的构造 sql 。

// 描述 sql 语句的
 String sql = "insert into student values (1, '张三')";


下面的代码才是真正 构造 sql 语句的代码。

// jdbc 还需要搭配一个特点的对象来描述这里的 sql 的情况
PreparedStatement preparedStatement = connection.prepareStatement(sql);//这一步才是真正的构造 sql


需要注意的是,每次指行 sql 语句的时候,都需要构造一下。



4、执行 sql 语句(控制服务器给客户端发送请求)

下面代码输出的结果就是收到影响数据的行数。

// 如果是增删改则是使用 executeUpdate()
// 如果是查则是使用 executeQuery()
// 返回结果的含义就是执行完 sql 语句后几行数据受到了影响
int ret = preparedStatement.executeUpdate(); 
System.out.println("ret = " + ret);




这个就表示当前有一行数据受到了影响。



5、断开与数据库的连接,并且释放必要的资源

断开连接的原因:

连接本质上就是找个地方记录一下 “和谁建立连接了”。
当连接不在需要的时候,就需要释放连接,把之前的记录给 “擦除掉”

preparedStatement.close();
connection.close();


资源释放的顺序和创建的顺序是相反的。


整体代码展示。

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

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

public class JdbcInsertDemo {
    public static void main(String[] args) throws SQLException {
        // 使用 jdbc 往数据库中插入一个记录
        // 需要提前准备好数据库(java)和数据表(student)

        // 1.创建数据源,描述了数据库服务器在哪
        DataSource dataSource = new MysqlDataSource();
        // 设置数据库所在的位置,当前是固定写法
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("000000");

        // 2.和数据库建立网络连接(写的 jdbc 代码本质上是一个 MySQL 客户端,要通过网络和服务器进行通信)
        Connection connection = dataSource.getConnection();

        // 3.构造一个 sql 语句来完成 插入操作
        // 描述 sql 语句的
        String sql = "insert into student values (1, '张三')";
        // jdbc 还需要搭配一个特点的对象来描述这里的 sql 的情况
        PreparedStatement statement = connection.prepareStatement(sql);//这一步才是真正的构造 sql

        // 4.执行 sql 语句(控制服务器给客户端发送请求)
        // 如果是增删改则是使用 executeUpdate()
        // 如果是查则是使用 executeQuery()
        // 返回结果的含义就是执行完 sql 语句后几行数据受到了影响
        int ret = statement.executeUpdate();
        System.out.println("ret = " + ret);

        // 5.断开与数据库的连接,并且释放必要的资源
        statement.close();
        connection.close();
    }
}

4.查看插入记录后的数据表


先来看一看数据表原来是什么样的。




运行代码后发现现在有一行数据收到了影响。

再来看看现在的数据表。



可以发现数据添加成功。



虽然实现了插入,但是当前的代码不够灵活。
更多的时候,我们希望插入的数据是动态的。

所以可以使用 Scanner 来完成更加灵活的插入,即输入什么就插入什么。

方法是使用 PreparedStatement 来通过占位符的替换的方式,实现多态的 sql 构造。

下面代码就是对于上面代码修改过的部分

// 2.和数据库建立网络连接(写的 jdbc 代码本质上是一个 MySQL 客户端,要通过网络和服务器进行通信)
Connection connection = dataSource.getConnection();

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

// 3.构造一个 sql 语句来完成 插入操作
// 描述 sql 语句的
String sql = "insert into student values (?, ?)";
// jdbc 还需要搭配一个特点的对象来描述这里的 sql 的情况
PreparedStatement statement = connection.prepareStatement(sql);//这一步才是真正的构造 sql
statement.setInt(1, id);
statement.setString(2, name);
System.out.println("sql:" + statement);


把 id 这个值以 int 的形式替换到第一个 ?里。

把 name 这个值以 String 的形式替换到第二个 ?里。
\

System.out.println("sql:" + statement);


用来打印执行好的 sql 结果。

下面执行代码观看结果,可以看到当前执行好的 sql 结果及受影响的数据行数。



下面查看数据表。



发现数据成功插入。

5.如何编写代码实现查找操作


前面的步骤和 增删改 类似,只是改造的 sql 语句不一样。

 // 1.创建数据源,描述了数据库服务器在哪
 DataSource dataSource = new MysqlDataSource();
// 设置数据库所在的位置,当前是固定写法
((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("000000");

// 2.和数据库建立网络连接(写的 jdbc 代码本质上是一个 MySQL 客户端,要通过网络和服务器进行通信)
Connection connection = dataSource.getConnection();

// 3.构造一个 sql 语句来完成 插入操作
// 描述 sql 语句
String sql = "select * from student";
//这一步才是真正的构造 sql
PreparedStatement statement = connection.prepareStatement(sql);


select * from student

这是一条查询数据表的 sql 语句,其他都是和增删改一样的。

下面的代码就是查询操作有改动的代码。

//结果集合
// 查询使用executeQuery
ResultSet resultSet = statement.executeQuery();
//拿到每一行 - next 相当于是使光标移动到下一行
while (resultSet.next()) {
    // 使用getXX 的方式得到每一列
    // 如果是int就是 getInt,如果是String,就是getString...
    // 这里的参数就是数据表的列名
    int id = resultSet.getInt("id"); // 代码的作用是得到 id 这一列的值
    String name = resultSet.getString("name"); // 代码的作用是得到 name 这一列的值
    //输出查询的结果
    System.out.println(id + ":" + name);
}




最终会是下面的状况。



下面代码的作用是取到这一列具体的值,数据表有几列的数据就写几条语句。

 int id = resultSet.getInt("id");
String name = resultSet.getString("name");


之后就是释放资源的操作了,释放的顺序要和创建时的顺序相反。

// 释放资源 - 释放顺序和创建顺序相反
resultSet.close();
statement.close();
connection.close();


下面访问数据表看看数据是什么样。



运行代码观察结果



可以看到代码的输出结果和数据库显示出来的一模一样的结果。


如果是 加限制条件 的查询,只需要把 sql 语句改了即可。

例如查询 id 为 1 的 学生。

此时需要将 sql 改为 select * from student where id = 1

运行代码会输出一下结果,同时也可以发现和数据库显示的结果相同。



相关文章:

  • 网站建设与管理技能测试题/学大教育一对一收费价格表
  • 怎么在网上卖东西/网站如何进行优化
  • wordpress企业主题/新的营销模式有哪些
  • 如何制作网站模板/深圳网络推广网络
  • 东莞建设工程交易网/网络推广和信息流优化一样么
  • WordPress文字导航功能插件/郑州seo管理
  • 数据库实验2 数据库安全性定义与检查
  • Feign和restTemplate 单个接口超时拦截处理
  • 微信小程序自定义顶部状态栏
  • # 和 ## 运算符
  • as 汇编入门, hello world 显示
  • 【java】opencv + Tesseract(tess4j) 实现图片处理验证码识别
  • GAMES101 Assignment 3
  • 小学生C++编程基础 课程8(A)
  • 前沿系列--Transform架构[架构分析+代码实现]
  • 力扣(15.18)补9.19
  • Linux sed命令如何使用?有哪些作用?
  • Linux 常用命令总结