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 的异常,分为两类。
- 受查异常(必须要显示处理)
- 非受查异常(可以忽略)
受查异常是 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
运行代码会输出一下结果,同时也可以发现和数据库显示的结果相同。