目录
🐳今日良言:未来可期,人生值得
🐂一、JDBC
🐼1.概念
🐼2.背景
🐼3.使用
🐯二、编写数据库代码
🐼1.增/删/改数据
🐼2.查数据
🐳今日良言:未来可期,人生值得
🐂一、JDBC
🐼1.概念
JDBC的全称是Java数据库连接(Java Database connect),它是一套用于执行SQL语句的Java API。应用程序可通过这套API连接到关系数据库,并使用SQL语句来完成对数据库中数据的查询、更新和删除等操作
🐼2.背景
MySQL提供了很多API,这些API就是为了让我们实现客户端的.
API(Application Programming Interface): 这类似于你拿到一个东西,这个东西可以提供给你哪些功能/服务.
在早期的时候,Oracle,SQLServer,SQLite等数据库,都有自己的API,Oracle的API是Oracle里面的大佬开发的,SQLServer的API是微软的大佬开发的,而SQLite的API是开源社区的大佬们开发的,搞了这么多API,对于基层程序猿来说,这无疑是一件非常痛苦的事情,因为,学数据库编程,程序猿就需要好几套API,学习成本非常高.
此时,在Java的圈子中,JDBC站了出来,把这些API都统一成了一套,指定成标准.由于java的影响很大,此时,各种数据库厂商都提供了能够适应JDBC相关的"驱动包"(相当于API的具体实现)
此时,只要掌握这套API,无论操作哪个数据库,操作的代码都是不变,基本上相同的.
🐼3.使用
1).安装对应数据库的驱动包
一个java程序通过JDBC来操作对应数据库的流程如下:
MySQL提供的驱动包,可以去"中央仓库" 下载.中央操作就类似于手机上的应用商店.中央仓库的网址如下:
https://mvnrepository.com/
下载流程如下:
下载以后在目录中找到:
.jar 是一个java格式的压缩包,类似于.rar .zip一样.
2).将jar包导入到项目中
此时idea就可以解析出jar包里包含的的内容了,此时就可以进行编码代码了
🐯二、编写数据库代码
🐼1.增/删/改数据
在使用jdbc往数据库中插入数据时,首先需要准备好数据库和数据表.
博主这里的数据库是exercise 数据表是 student表
无论是增删增删改查数据,代码步骤总结来说是5步
1).`创建数据源. 描述了数据库服务器在哪里
2).和数据库建立网络连接(写的jdbc代码本质上是实现了一个客户端,要通过网络和服务器通信)
3).构造一个SQL语句,来完成操作
4).执行SQL语句.(控制客户端给服务器发送请求)
5).断开和数据库的连接,并且释放资源
插入数据/删除数据/修改数据 的代码一模一样,只需要修改SQL语句即可,这里只详细介绍插入数据
完整操作如下:
运行后,观察student表中数据,会发现插入成功:
针对每个步骤进行解释:
1).
这里的MysqlDataSource() 就是驱动包里面提供的具体的类了,实现了这个DataSource接口
这里发生向上转型.关于向上转型博主之前的文章有介绍过:
(1条消息) OOP(面向对象编程)三大特性_程序猿小马的博客-CSDN博客_面向对象编程特性oop
导入包的时候注意:
这三行代码都发生了向下转型
2).
上面数据源的创建操作,只是描述了服务器在哪,并没有进行真正的访问,紧接着进行的'连接'操作才是真正的开始通过网络进行通信
3).
第一行行代码描述了sql语句是什么样的,正在的执行sql语句是靠第二行代码
PreparedStatement做了很多事情,比如会对SQL语句进行一些预处理(对语法进行解析之类的)
4).
插入/删除/修改数据 都是使用executeUpdate()来执行
查找数据使用executeQuery()执行
返回值是一个整数,表示此次操作影响到几行,这就代表了cmd命令中下面:
5).
当连接不再使用的时候,就需要释放连接,将之前的记录给'擦除掉';
这就是jdbc编程的五个步骤;
上述操作的SQL语句
这里写死了,不太好,那么如何实现插入是动态的呢?根据用户输入的信息进行插入
靠谱的方案是,使用PreparedStatement来通过占位符替换的方式,实现动态SQL的构造:
![]()
插入操作完整代码如下:(一定注意包不要导入错误)
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 JdbcInsert {
public static void main(String[] args) throws SQLException {
// 先提前准备好数据库和数据表
// 1).`创建数据源. 描述了数据库服务器在哪里
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/exercise?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("你的密码");
//2).和数据库建立网络连接(写的jdbc代码本质上是实现了一个客户端,要通过网络和服务器通信)
Connection connection = dataSource.getConnection();
//3).构造一个SQL语句,来完成操作
String str = "insert into student values(?,?)";
// jdbc 中还需要搭配一个特点的对象,来描述这里的sql情况
PreparedStatement statement = connection.prepareStatement(str);
Scanner scanner = new Scanner(System.in);
System.out.println("请输入学号");
int id = scanner.nextInt();
System.out.println("请输入姓名");
String name = scanner.next();
statement.setInt(1,id);
statement.setString(2,name);
//4).执行SQL语句.(控制客户端给服务器发送请求)
int ret = statement.executeUpdate();
System.out.println("ret = "+ret);
//5).断开和数据库的连接,并且释放资源
statement.close();
connection.close();
}
}
🐼2.查数据
与上面的插入数据相比较,查找数据就多了一个步骤,遍历结果集
首先,还是先来看,完整代码:
接下来,分析比插入操作多的步骤:
1).
![]()
executeQuery() 方法的返回值是一个结果集合,此时,如果想要的到这个结果集合的数据就需要进行遍历.
2).
3).
关闭资源多一个步骤
查找数据的完整代码如下:
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 JdbcInsert {
public static void main(String[] args) throws SQLException {
// 先提前准备好数据库和数据表
// 1).`创建数据源. 描述了数据库服务器在哪里
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/exercise?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("你的密码");
//2).和数据库建立网络连接(写的jdbc代码本质上是实现了一个客户端,要通过网络和服务器通信)
Connection connection = dataSource.getConnection();
//3).构造一个SQL语句,来完成操作
String str = "select * from student";
// jdbc 中还需要搭配一个特点的对象,来描述这里的sql情况
PreparedStatement statement = connection.prepareStatement(str);
//4).执行SQL语句.(控制客户端给服务器发送请求)
ResultSet resultSet = statement.executeQuery();
// 判断是否有下一个数据
while (resultSet.next()) {
// 使用getXXX 方法获取到每一行
// 获取int 就使用getInt 获取String 就使用getString.....
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
System.out.println("id:"+id+" "+"name:"+name);
}
//5).断开和数据库的连接,并且释放资源
resultSet.close();
statement.close();
connection.close();
}
}
其他的操作只需要修改SQL语句即可