JAVA操作数据库及事务
1.操作MySQL数据库
**注意:**JDBC
本次实例使用的是MySQL8.0
MySQL8.0之后的要加上serverTimezone=UTC
加载驱动一般使用com.mysql.cj.jdbc.Driver
jar包已上传
import java.sql.*;
/**
* @author 小新
* @date 2020/11/6 - 16:24
*/
public class MySqlCon {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
String URL="jdbc:mysql://localhost:3306/db01?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC";
String USER="root";
String PASSWORD="521521";
//1.加载驱动程序
Class.forName("com.mysql.cj.jdbc.Driver");
//2.获得数据库链接
Connection conn=DriverManager.getConnection(URL, USER, PASSWORD);
//3.通过数据库的连接操作数据库,实现增删改查(使用Statement类)
Statement st=conn.createStatement();
ResultSet rs=st.executeQuery("select * from dept");
//4.处理数据库的返回结果(使用ResultSet类)
while(rs.next()){
System.out.println(rs.getString("deptno")+" "
+rs.getString("dname"));
}
//关闭资源
rs.close();
st.close();
conn.close();
}
}
2.事务操作
package com.xkx.JDBC;
import java.sql.*;
/**
* @author 小新
* @date 2020/11/6 - 16:24
* <p>
* 模拟事务操作(银行转账)
* A给B转100
* B收到100
* 这两个必须都完成才可以,不然就回滚
*/
public class MySqlCon {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Connection conn = null;
PreparedStatement st = null;
try {
String URL = "jdbc:mysql://localhost:3306/db01?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC";
String USER = "root";
String PASSWORD = "521521";
//1.加载驱动程序
Class.forName("com.mysql.cj.jdbc.Driver");
//2.获得数据库链接
conn = DriverManager.getConnection(URL, USER, PASSWORD);
// 关闭数据库自动提交,自动会开启事务
conn.setAutoCommit(false);// 开启事务
// 模拟事务操作(银行转账)
// * A给B转100
// * B收到100
// * 这两个必须都完成才可以,不然就回滚
//3.通过数据库的连接操作数据库,实现增删改查(使用prepareStatement类)
st = conn.prepareStatement("update dept set money=money-100 where deptno=?");
st.setInt(1, 1);
System.out.println(st.toString());
st.executeUpdate();
System.out.println("A给B转了100");
//故意在A给B转完钱,B还没收到的时候制造错误
//int i = 1/0;
st = conn.prepareStatement("update dept set money=money+100 where deptno=?");
st.setInt(1, 2);
st.executeUpdate();
//事务提交
conn.commit();
System.out.println("B收到了100");
} catch (SQLException e) {
System.out.println("中途中断,事务回滚");
// 不写也会回滚,默认回滚
//conn.rollback();
e.printStackTrace();
} finally {
st.close();
conn.close();
}
}
}