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、将之前装好的 jarctrl 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

接下来设置登录用户名密码用户名默认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

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

原文地址:https://blog.csdn.net/m0_63033419/article/details/127888909

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_13033.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注