1.JDBC
Java DataBase Connectivity
:JAVA语言操作数据库。
JDBC
是官方定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商实现这个接口,提供数据据驱动jar包。我们可以使用这套接口JDBC编程,真正执行的代码是驱动jar包中的实现类。
JDBC定义了可以操作所有关系型数据库的规则(接口)。
java程序 --- JDBC实现类(数据库驱动) --- 数据库厂商
- JDBC快速入门,使用步骤
1.导入驱动jar包
1.复制jar包到模块自建目录libs下
2.右键 --> add as library
2.注册驱动
【错误:Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
5.x.xx的注册驱动语句是: com.mysql.jdbc.Driver ;8.x.xx的是: com.mysql.cj.jdbc.Driver 。】
【错误:Exception in thread "main" java.sql.SQLException: The server time zone value '�й���ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the 'serverTimezone' configuration property) to use a more specific time zone value if you want to utilize time zone support.
https://blog.csdn.net/weixin_38888926/article/details/89476144】
3.获取数据库连接对象 Connection
4.定义SQL语句
5.获取执行SQL语句的对象 statment
6.执行sql,接收返回结果。
7.处理结果。
8.释放资源。
jdbc使用步骤
// 1.导入驱动jar包
// 2.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver"); //可以省略不写
// 3.获取数据库连接对象
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_test1?serverTimezone=GMT%2B8", "root", "root");
// 4.定义sql语句
String sql = "update account set balance = 500 where id = 1 ";
// 5.获取执行sql的对象。
Statement stmt = conn.createStatement();
// 6.执行sql
int count = stmt.executeUpdate(sql);
// 7.处理结果
System.out.println(count);
// 8.释放资源
stmt.close();
conn.close();
2. JDBC接口和类详解
1. JDBC遇到的类
JDBC中遇到的对象:
1.DriverManager:驱动管理对象
2.Connection: 数据库连接对象
3.Statment:执行sql的对象。静态sql
4.ResultSet:结果集对象
5.PreparedStatment:执行sql的对象。动态sql
2. DriverManager:
驱动管理对象
1.DriverManager:
1.1注册驱动。告诉程序该使用哪一个数据驱动。jar包中有注册驱动,所以第一部分加载类字节码文件进内存代码部分可以省略。
1.2获取数据库连接
static Connection DriverManager.getConnection(String url, String user, String password)
url:指定连接路径 jdbc:mysql:/localhost:3306//db1 【localhost:3306】可省略
user:用户名
passwors:密码
Connection conn = DriverManager.getConnection("jdbc:mysql:///db_test1?serverTimezone=GMT%2B8", "root", "root"); //连接本机的mysql服务时,路径可以简写
3. Connection:
数据库连接对象
2.Connection:
2.1获取指向sql语句的对象。
Statement Connection.createStatement() // 创建一个 Statement 对象来将 静态SQL 语句发送到数据库。
PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES SET SALARY = ? WHERE ID = ?");
//动态SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。
2.2管理事务
2.2.1开启事务: void setAutoCommit(boolean autoCommit) // 设置参数为false,关闭自动提交。将此连接的自动提交模式设置为给定状态。
2.2.2提交事务 void commit() // 使所有上一次提交/回滚后进行的更改成为持久更改,并释放此 Connection 对象当前持有的所有数据库锁。
2.2.3回滚事务 void rollback() //取消在当前事务中进行的所有更改,并释放此 Connection 对象当前持有的所有数据库锁。
4. Statment:
执行sql的对象。静态sql
3.Statement:
boolean execute() //在此 PreparedStatement 对象中执行 SQL 语句,该语句可以是任何种类的 SQL 语句。
int executeUpdate() // 在此 PreparedStatement 对象中执行 SQL 语句,该语句必须是一个 SQL 数据操作语言(Data Manipulation Language,DML)语句,比如 INSERT、UPDATE 或 DELETE 语句;或者是无返回内容的 SQL 语句,比如 DDL (create alter drop)语句。
ResultSet executeQuery() // 在此 PreparedStatement 对象中执行 SQL 查询,并返回该查询生成的 ResultSet 对象。
练习:account表中创建一条信息
account表中删除一条信息
创建一个表
5. ResultSet:
结果集对象
4.ResultSet:结果集对象,封装查询结果。
boolean next() //将光标从当前位置向前移动一行。
getXxx(参数):获取数据
Xxx代表数据类型。如 int getInt(para);
参数有两种情况:int / string
int:代表列的编号,从1开始。getString(i) //获取第i列的数据
String:代表列的名称。
正确的遍历方法:
while (rs.next()){
//判断游标是否到了最后一行
int i = rs.getInt(1);
String name = rs.getString("name");
double v = rs.getDouble(3);
System.out.println(i + " === " + name + " === " + v);
}
JDBC练习select语句:
查询练习:查询emp表数据,将其封装为对象。然后打印。
抽取JDBC工具类:JDBCUtiles
1.抽取方法,创建驱动
2.抽取方法,建立连接
* 不想传参,保证工具类的通用性。
解决方法:配置文件
jdbc.properties 记录url= user= password=
3.抽取方法,释放资源
演示代码:
配置文件:jdbc.properties
url=jdbc:mysql://localhost:3306/db1
user=root
password=root
driver=com.mysql.jdbc.Driver
JDBCUtils工具类:
package demo03JdbcUtils;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.sql.*;
import java.util.Properties;
public class Jdbcutil {
private static String url;
private static String user;
private static String password;
private static String driver;
static {
try {
// 读取资源文件,获取值
// 1.创建properties集合类
Properties pro = new Properties();
// 获取src路径下文件方式
ClassLoader classLoader = Jdbcutil.class.getClassLoader();
URL resource = classLoader.getResource("jdbc.properties");
String path = resource.getPath();
// 2.加载文件
FileReader fr = null;
fr = new FileReader(path);
pro.load(<