• JDBC复习


    什么是jdbc?

            java连接数据库!

    需要jar包的支持:

    • java.sql

    • javax.sql

    • mysql-connection-java...(连接驱动)

    实验环境搭建(SQL)

    1. DROP TABLE `users`;
    2. CREATE TABLE `users`(
    3. `id` INT PRIMARY KEY,
    4. `name` VARCHAR(50) NOT NULL,
    5. `password` VARCHAR(40) NOT NULL,
    6. `email` VARCHAR(60) NOT NULL,
    7. `birthday` DATE
    8. ) ENGINE=INNODB DEFAULT CHARSET=utf8
    9. INSERT INTO `users` (`id`, `name`, `password`, `email`, `birthday`) VALUES('1','张三','123456','zs@sina.com','2021-07-14');
    10. INSERT INTO `users` (`id`, `name`, `password`, `email`, `birthday`) VALUES('2','李四','123456','lisi@sina.com','1981-12-04');
    11. INSERT INTO `users` (`id`, `name`, `password`, `email`, `birthday`) VALUES('3','王五','123456','wangwu@sina.com','1982-12-04');
    12. INSERT INTO `users` (`id`, `name`, `password`, `email`, `birthday`) VALUES('4','赵六','123456','zhaoliu@sina.com','1987-12-05');
    13. INSERT INTO `users` (`id`, `name`, `password`, `email`, `birthday`) VALUES('5','钱七','123456','qianqi@sina.com','2021-07-19');
    14. INSERT INTO `users` (`id`, `name`, `password`, `email`, `birthday`) VALUES('6','刘八','123456','liuba@sina.com','2021-07-19');

    导入数据库依赖pom.xml

    1. <project xmlns="http://maven.apache.org/POM/4.0.0"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    4. <modelVersion>4.0.0modelVersion>
    5. <groupId>com.zyygroupId>
    6. <artifactId>javaweb-jdbcartifactId>
    7. <version>1.0-SNAPSHOTversion>
    8. <dependencies>
    9. <dependency>
    10. <groupId>mysqlgroupId>
    11. <artifactId>mysql-connector-javaartifactId>
    12. <version>5.1.49version>
    13. dependency>
    14. dependencies>
    15. project>

    idea连接数据库

    jdbc固定步骤:

    1. 加载驱动

    2. 连接数据库

    3. 创建Statement

    4. 编写sql

    5. 执行sql

    6. 关闭连接

    1. import java.sql.Connection;
    2. import java.sql.DriverManager;
    3. import java.sql.ResultSet;
    4. import java.sql.SQLException;
    5. import java.sql.Statement;
    6. /**
    7. * @ClassName: TestJdbc
    8. * @Description: TODO 类描述
    9. * @Author: zyy
    10. * @Date: 2021/12/14 17:16
    11. * @Version: 1.0
    12. */
    13. public class TestJdbc {
    14. public static void main(String[] args) {
    15. String url = "jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf-8";
    16. String user = "root";
    17. String pwd = "123456";
    18. try {
    19. //1. 加载驱动
    20. Class.forName("com.mysql.jdbc.Driver");
    21. //2. 连接数据库
    22. Connection con = DriverManager.getConnection(url, user, pwd);
    23. //3. 向数据库发送sql的对象Statement
    24. Statement statement = con.createStatement();
    25. //4.sql
    26. String str = "select * from users";
    27. //5.执行sql
    28. ResultSet rs = statement.executeQuery(str);
    29. while (rs.next()) {
    30. System.out.println("id=" + rs.getInt("id"));
    31. System.out.println("name=" + rs.getString("name"));
    32. System.out.println("password=" + rs.getString("password"));
    33. System.out.println("email=" + rs.getString("email"));
    34. System.out.println("birthday=" + rs.getString("birthday"));
    35. }
    36. //6.关闭
    37. rs.close();
    38. statement.close();
    39. con.close();
    40. } catch (ClassNotFoundException e) {
    41. e.printStackTrace();
    42. } catch (SQLException e) {
    43. e.printStackTrace();
    44. }
    45. }
    46. }

     预编译

    1. public class Test2Jdbc {
    2. public static void main(String[] args) {
    3. String url = "jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf-8";
    4. String user = "root";
    5. String pwd = "123456";
    6. try {
    7. //1. 加载驱动
    8. Class.forName("com.mysql.jdbc.Driver");
    9. //2. 连接数据库
    10. Connection con = DriverManager.getConnection(url, user, pwd);
    11. //3.sql
    12. String str = "insert into users(id, name, password, email, birthday) values (?,?,?,?,?)";
    13. //4. 预编译
    14. PreparedStatement statement = con.prepareStatement(str);
    15. statement.setInt(1,8);
    16. statement.setString(2,"小红");
    17. statement.setString(3,"123456");
    18. statement.setString(4,"xiaohong@sina.com");
    19. statement.setDate(5,new java.sql.Date(System.currentTimeMillis()));
    20. //5.执行sql
    21. int count = statement.executeUpdate();
    22. if (count > 0) {
    23. System.out.println("插入成功!");
    24. }
    25. statement.close();
    26. con.close();
    27. } catch (ClassNotFoundException e) {
    28. e.printStackTrace();
    29. } catch (SQLException e) {
    30. e.printStackTrace();
    31. }
    32. }
    33. }

    JDBC事务

    要么都成功,要么都失败

    ACID原则:保证数据的安全

    开启事务
    事务提交  commit()
    事务回滚  rollback()
    关闭事务

    转账:
    A:1000
    B:1000

    A(900)   ---100-->    B(1100)

    Junit单元测试

    依赖

    1. <dependency>
    2. <groupId>junitgroupId>
    3. <artifactId>junitartifactId>
    4. <version>4.13version>
    5. dependency>

    简单实用

    @Test注解只有在方法上有效,只要加了这个注解的方法,就可以直接运行!

    1. import org.junit.Test;
    2. /**
    3. * @ClassName: Test3Jdbc
    4. * @Description: TODO 类描述
    5. * @Author: zyy
    6. * @Date: 2021/12/16 21:11
    7. * @Version: 1.0
    8. */
    9. public class Test3Jdbc {
    10. @Test
    11. public void test() {
    12. System.out.println("hello");
    13. }
    14. }

    输出结果: 

     失败情况:

    新建表并插入数据

    1. CREATE TABLE `account`(
    2. `id` INT PRIMARY KEY,
    3. `name` VARCHAR(50) NOT NULL,
    4. `money` FLOAT NOT NULL
    5. ) ENGINE=INNODB DEFAULT CHARSET=utf8
    6. INSERT INTO `account` (`id`, `name`, `money`) VALUES(1,'A',1000);
    7. INSERT INTO `account` (`id`, `name`, `money`) VALUES(2,'B',1000);
    8. INSERT INTO `account` (`id`, `name`, `money`) VALUES(3,'C',1000);
    1. # 开启事务
    2. start transaction ;
    3. # 模拟转账
    4. update account set money=money-100 where name='A';
    5. update account set money=money+100 where name='B';
    6. # 回滚
    7. rollback ;
    8. # 提交
    9. commit;

    1. import org.junit.Test;
    2. import java.sql.Connection;
    3. import java.sql.DriverManager;
    4. import java.sql.SQLException;
    5. /**
    6. * @ClassName: Test3Jdbc
    7. * @Description: TODO 类描述
    8. * @Author: zyy
    9. * @Date: 2021/12/16 21:11
    10. * @Version: 1.0
    11. */
    12. public class Test3Jdbc {
    13. @Test
    14. public void test() {
    15. String url = "jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf-8";
    16. String user = "root";
    17. String pwd = "123456";
    18. Connection con = null;
    19. try {
    20. Class.forName("com.mysql.jdbc.Driver");
    21. con = DriverManager.getConnection(url, user, pwd);
    22. //开启事务 这里不开启事务的话异常情况就会有问题 false是开启
    23. con.setAutoCommit(false);
    24. con.prepareStatement("update account set money=money-100 where name='A'").executeUpdate();
    25. //制造错误
    26. // int i = 1 / 0;
    27. con.prepareStatement("update account set money=money+100 where name='B'").executeUpdate();
    28. con.commit();
    29. System.out.println("success");
    30. } catch (Exception e) {
    31. System.out.println("error rollback");
    32. if (con != null) {
    33. try {
    34. con.rollback();
    35. } catch (SQLException ex) {
    36. ex.printStackTrace();
    37. }
    38. }
    39. } finally {
    40. if (con != null) {
    41. try {
    42. con.close();
    43. } catch (SQLException e) {
    44. e.printStackTrace();
    45. }
    46. }
    47. }
    48. }
    49. }

    输出结果:

     

     

  • 相关阅读:
    Java底层总结(未完善)
    LeetCode_区间问题_中等_795.区间子数组个数
    【UE5】 虚拟制片教程
    仿游戏热血江湖游戏类22(得到物品属性方法2)
    perl下mysql同步监控
    互斥锁,自旋锁,读写锁
    CilckHouse创建表
    scipy短时傅里叶分析STFT
    Python:操作SQLite数据库简单示例
    【开源】基于Vue和SpringBoot的数据可视化的智慧河南大屏
  • 原文地址:https://blog.csdn.net/qq_46423017/article/details/126337472