• MySQL -- JDBC


    1、JDBC是什么:

    是SUN公司制定的一套接口(interface)。接口都有调用者和实现者。面向接口调用、面向接口写实现类,这都属于面向接口编程。

    2、在使用JDBC的六个步骤:
    1. 1.注册驱动(告诉Java程序,即将连接的是哪个品牌的数据库)
    2. 2.获取连接(表示JVM的进程和数据库进程之间的通道打开了,这属于进程之间的通信,使用完后记得关闭通道)。
    3. 3.获取数据库操作对象(专门执行sql语句的对象)
    4. 4.执行SQL语句(DQL,DML…)
    5. 5.处理查询结果集 (只有当第四步执行的是select语句的时候,才有本步)
    6. 6.释放资源(使用完资源后一定要关闭资源,Java和数据库之间属于进程间的通信,开启之后一定要记得关闭)
    3、JDBC的模糊查询:
    1. import com.shujia.wyh.utils.MySqlTool;
    2. import java.sql.PreparedStatement;
    3. import java.sql.ResultSet;
    4. /*
    5. 模糊查询
    6. */
    7. public class JDBCDemo7 {
    8. public static void main(String[] args) throws Exception {
    9. String sql = "select ename from emp where ename like ?";
    10. PreparedStatement statement = MySqlTool.getStatement(sql);
    11. statement.setString(1, "%A%");
    12. ResultSet resultSet = statement.executeQuery();
    13. while (resultSet.next()){
    14. String name = resultSet.getString(1);
    15. System.out.println(name);
    16. }
    17. }
    18. }

    在使用maven连接mysql的时候,需要在poml文件中添加依赖:

    1. mysql
    2. mysql-connector-java
    3. 5.1.47
     4、JDBC连接MySQL
    1. /*
    2. 1.注册驱动(告诉Java程序,即将连接的是哪个品牌的数据库)
    3. 2.获取连接(表示JVM的进程和数据库进程之间的通道打开了,这属于进程之间的通信,使用完后记得关闭通道)。
    4. 3.获取数据库操作对象(专门执行sql语句的对象)
    5. 4.执行SQL语句(DQL,DML…)
    6. 5.处理查询结果集 (只有当第四步执行的是select语句的时候,才有本步)
    7. 6.释放资源(使用完资源后一定要关闭资源,Java和数据库之间属于进程间的通信,开启之后一定要记得关闭)
    8. */
    9. import com.mysql.jdbc.Driver;
    10. import java.sql.Connection;
    11. import java.sql.DriverManager;
    12. import java.sql.Statement;
    13. public class JDBCDemo1 {
    14. public static void main(String[] args) throws Exception{
    15. //第一种连接方式
    16. // 1.注册驱动(告诉Java程序,即将连接的是哪个品牌的数据库)
    17. // jdk帮助文档中提供了一个类让我们去注册驱动 DriverManager
    18. //但是通过观察后发现,DriverManager类中并没有构造方法,就意味着无法创建对象
    19. //但是没关系,我们又观察发现,该类中的方法都是静态的,就意味着可以通过DriverManager类直接调用
    20. //静态方法注册驱动:static void registerDriver(Driver driver) 注册与给定的驱动程序 DriverManager 。
    21. //通过观察后又发现,registerDriver方法中需要传入一个实现了java.sql.Driver接口的实现类
    22. //而恰好我们引入的mysql驱动包中就有一个类实现了java.sql.Driver接口
    23. //mysql驱动包中正好有一个类Driver实现了java.sql.Driver的接口
    24. DriverManager.registerDriver(new Driver());
    25. //2.获取连接(表示JVM的进程和数据库进程之间的通道打开了,这属于进程之间的通信,使用完后记得关闭通道)。
    26. //static Connection getConnection(String url, String user, String password)
    27. //尝试建立与给定数据库URL的连接。
    28. /**
    29. * url: 统一资源定位符
    30. * http/https: 都是从网络中请求资源
    31. * jdbc:mysql: 是java连接mysql数据库的url前缀
    32. * 请求连接mysql数据库的ip地址:192.168.254.100
    33. * 端口号:3306 告诉连接驱动我们连接的是mysql服务
    34. * 告诉你要操作的数据库名:bigdata25
    35. * useUnicode=True&characterEncoding=utf8
    36. *
    37. * user: 登录mysql数据库的用户名 root
    38. *
    39. * password: 登录mysql数据库的密码 123456
    40. */
    41. //mysql5.7之后,不建议用户直接与mysql服务连接,中间会有一个SSL令牌校验
    42. String url = "jdbc:mysql://192.168.254.100:3306/bigdata25?useUnicode=True&characterEncoding=utf8&useSSL=false";
    43. String user = "root";
    44. String password = "123456";
    45. Connection conn = DriverManager.getConnection(url, user, password);
    46. System.out.println("=============数据库连接成功:"+conn);
    47. //3.获取数据库操作对象(专门执行sql语句的对象)
    48. Statement statement = conn.createStatement();
    49. //4.执行SQL语句(DQL,DML…)
    50. /**
    51. * 在JDBC中 它将查询单独封装了一个方法,而其他的增删改单独一个方法
    52. *
    53. * 用于查询的方法
    54. * ResultSet executeQuery(String sql) 执行给定的SQL语句,该语句返回单个 ResultSet对象。
    55. *
    56. * 用户增删改的方法
    57. * int executeUpdate(String sql) 执行给定的SQL语句,这可能是 INSERT , UPDATE ,或 DELETE语句,
    58. * 或者不返回任何内容,如SQL DDL语句的SQL语句。
    59. */
    60. //增加
    61. // String sql = "insert into student values('110','洪文霁','男',18,'95033')";
    62. // int i = statement.executeUpdate(sql);
    63. // if(i==1){
    64. // System.out.println("数据添加成功!。。。");
    65. // }else {
    66. // System.out.println("数据添加失败!!");
    67. // }
    68. //删除
    69. // String sql2 = "delete from student where sno='110'";
    70. // int i1 = statement.executeUpdate(sql2);
    71. // if(i1==1){
    72. // System.out.println("数据删除成功!。。。");
    73. // }else {
    74. // System.out.println("数据删除失败!!");
    75. // }
    76. //修改
    77. String sql3 = "update student set sage=19 where sno='110'";
    78. int i = statement.executeUpdate(sql3);
    79. if(i==1){
    80. System.out.println("数据修改成功!。。。");
    81. }else {
    82. System.out.println("数据修改失败!!");
    83. }
    84. //6.释放资源(使用完资源后一定要关闭资源,Java和数据库之间属于进程间的通信,开启之后一定要记得关闭)
    85. conn.close();
    86. }
    87. }

    第二种连接的方式:

    1. import java.sql.Connection;
    2. import java.sql.DriverManager;
    3. import java.sql.Statement;
    4. /*
    5. 回顾一下,使用java操作数据库的6步
    6. 1、注册驱动 我们上午学习的注册驱动是第一种方式借助于DriverManager类
    7. 2、建立连接
    8. 3、获取操作数据库的对象
    9. 4、执行sql
    10. 5、如果第四步是查询操作,分析查询的结果集
    11. 6、释放资源,关闭连接
    12. */
    13. public class JDBCDemo2 {
    14. public static void main(String[] args) throws Exception {
    15. /**
    16. * 上午呢,我们说到驱动包的时候,原本是java自己提供的一系列接口,然后不同的数据库厂商去实现这些接口
    17. * 最终提供了一个驱动包给到开发者,然后开发者拿到这个驱动包使用里面的类连接或操作数据库
    18. *
    19. * 上午的注册驱动方式,是直接实例化mysql驱动包中的Driver类,但是我们今后使用java不一定只是连接mysql,还有可能操作redis等其他的数据库
    20. * 实际上我们最终是根据驱动包中的实现类路径来找到这个实现类的
    21. * 能否使用传路径的方式,注册驱动呢?
    22. *
    23. * 第二种注册驱动的方式:驱动包中的类都是class文件,我们如果能够直接定位到实现类也可以
    24. * 使用反射的方式,定位到实现类,将实现类加载到内存
    25. * Class.forName("com.mysql.jdbc.Driver")
    26. */
    27. Class.forName("com.mysql.jdbc.Driver");
    28. //2.获取连接(表示JVM的进程和数据库进程之间的通道打开了,这属于进程之间的通信,使用完后记得关闭通道)。
    29. //mysql5.7之后,不建议用户直接与mysql服务连接,中间会有一个SSL令牌校验
    30. String url = "jdbc:mysql://192.168.254.100:3306/bigdata25?useUnicode=True&characterEncoding=utf8&useSSL=false";
    31. String user = "root";
    32. String password = "123456";
    33. Connection conn = DriverManager.getConnection(url, user, password);
    34. System.out.println("=============数据库连接成功:"+conn);
    35. //3.获取数据库操作对象(专门执行sql语句的对象)
    36. Statement statement = conn.createStatement();
    37. //4.执行SQL语句(DQL,DML…)
    38. //修改
    39. String sql3 = "update student set sage=20 where sno='110'";
    40. int i = statement.executeUpdate(sql3);
    41. if(i==1){
    42. System.out.println("数据修改成功!。。。");
    43. }else {
    44. System.out.println("数据修改失败!!");
    45. }
    46. //6.释放资源(使用完资源后一定要关闭资源,Java和数据库之间属于进程间的通信,开启之后一定要记得关闭)
    47. conn.close();
    48. }
    49. }
    1. import java.sql.Connection;
    2. import java.sql.DriverManager;
    3. import java.sql.ResultSet;
    4. import java.sql.Statement;
    5. public class JDBCDemo08 {
    6. public static void main(String[] args) throws Exception{
    7. //建立连接:需要指定用户的url地址和用户名和密码
    8. Connection conn = DriverManager.getConnection("jdbc:mysql://master/trip","root","123456");
    9. //获取mysql的操作对象
    10. Statement statement = conn.createStatement();
    11. String sql = "select * from activity ";
    12. //执行sql语句:
    13. ResultSet resultSet = statement.executeQuery(sql);
    14. //获取里面的数据,并打印在控制台中,下表是从1开始的。
    15. while(resultSet.next()){
    16. int id = resultSet.getInt(1);
    17. String cid = resultSet.getString(2);
    18. String name = resultSet.getString(3);
    19. System.out.println(id+ "\t" + cid + name);
    20. }
    21. conn.close();
    22. }
    23. }
    5、悲观锁和乐观锁的概念

    事务1–>读取到版本号1.1

    事务2—>读取到版本号1.1

    其中事务1先修改了,修改之后看了版本号是1.1 ,于是提交修改的数据,将版本号修改为1.2 其中事务2后修改的,修改之后准备提交的时候,发现版本号是1.2 ,和它最初读的版本号不一致。回滚。

    悲观锁:事务必须排队执行。数据锁住了,不允许并发。 (行级锁: select后面添加for update )

    乐观锁:支持并发,事务也不需要排队,只不过需要一个版本号。

  • 相关阅读:
    为运行 Parallels Ubuntu 20.04 虚拟机的 用户安装 PX4-Autopilot
    Image Sensor卷帘曝光(Rolling Shutter)基本原理
    PCA与梯度上升法
    python报错:ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1
    为什么用php的人越来越少了?
    安装DevEco Studio 3.0 Beta2
    计算机毕业设计(附源码)python张家口市小学教育交流网站
    Java零基础入门-关系运算符
    C# 第五章『面向对象』◆第5节:方法
    【21天学习挑战赛】快速排序
  • 原文地址:https://blog.csdn.net/m0_62078954/article/details/134541285