JDBC简单复习
JDBC
1.步骤说明
配置与数据库连接时的基本信息(url、username、password) --> 加载驱动(Driver) --> 连接数据库(通过connection与数据库进行连接) --> 通过connection创建statement对象(通过该对象对数据库进行操作:执行sql、获取数据等) --> 关闭连接,后创建的先关闭
2.代码举例
package com.Gw;
import java.sql.*;
public class jdbc {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1.配置信息
String url = "jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf8";
String username = "root";
String password = "123456";
//2.加载驱动
Class.forName("com.mysql.jdbc.Driver");
//3.连接数据库,connection代表数据库
Connection connection = DriverManager.getConnection(url, username, password);
//4.向数据库发送SQL的对象Statement
Statement statement = connection.createStatement();
//5.编写sql
String sql = "select * from users";
//6.执行查询sql
ResultSet rs = statement.executeQuery(sql);
while(rs.next()){
System.out.println("id = " + rs.getObject("id"));
System.out.println("username = " + rs.getObject("username"));
System.out.println("email = " + rs.getObject("email"));
}
//7.关闭链接,释放资源,一定要关闭,先创建的后关闭
rs.close();
statement.close();
connection.close();
}
}
事务
要么都成功,要么都失败!
1.ACID原则(数据库事务正常执行的四个原则)
- 原子性(Atomicity):是指一个事务要么全部执行,要么不执行,也就是说一个事务不可能只执行了一半就停止了。比如你从取款机取钱,这个事务可以分成两个步骤:1划卡,2出钱。不可能划了卡,而钱却没出来。这两步必须同时完成,要么就不完成。
- 一致性(Consistency):是指事务的运行并不改变数据库中数据的一致性。例如,完整性约束了a+b=10,一个事务改变了a,那么b也应该随之改变。
- 独立性(Isolation):事务的独立性也称作隔离性,是指两个以上的事务不会出现交错执行的状态。因为这样可能会导致数据不一致,更加具体的来讲,就是事务之间的操作是独立的。
- 持久性(Durability):事务的持久性是指事务执行成功以后,该事务对数据库所作的更改便是持久的保存在数据库之中,不会无缘无故的回滚
开启事务 start transaction (开启事务的前提是设置setAutoCommit(false),即开启自定义提交/回滚)
事务提交(将本次修改提交,保存修改) commit()
事务回滚(即本次修改不使原数据发生改变) rollback()
事务关闭
junit单元测试
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
使用在需要执行的方法前加上注解@Test,则该方法变为可执行方法
如果在运行发生错误的情况下不进行回滚,数据库中的数据会随着程序的运行而更新,回滚则提供了在程序出错的情况下保持原数据不变
2.代码举例
package com.Gw;
import org.junit.jupiter.api.Test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class testjdbc {
@Test
void test(){
//1.配置信息
String url = "jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf-8";
String username = "root";
String password = "123456";
Connection connection = null;
//2.加载驱动
try {
Class.forName("com.mysql.jdbc.Driver");
//3.连接数据库
connection = DriverManager.getConnection(url, username, password);
//4.通知数据库开启事务
connection.setAutoCommit(false);
String sql = "update account set money = money - 100 where name = 'zhangsan';";
connection.prepareStatement(sql).executeUpdate();
//如果此时出现了错误
int i = 1 / 0;
String sql1 = "update account set money = money + 100 where name = 'lisi';";
connection.prepareStatement(sql1).executeUpdate();
//如果两条sql语句都执行成功了,则进行提交,否则进行回滚
connection.commit();
System.out.println("Success!!!");
} catch (Exception e) {
try {
connection.rollback();
} catch (SQLException ex) {
ex.printStackTrace();
}
e.printStackTrace();
}finally {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~