diff --git "a/work/com/java/minxi/java_20240524/java_2302_\351\231\210\346\257\205_2344310224/src/Main.java" "b/work/com/java/minxi/java_20240524/java_2302_\351\231\210\346\257\205_2344310224/src/Main.java" new file mode 100644 index 0000000000000000000000000000000000000000..98f513afbc7df3c7e80dedc16f231c8d81bb45c2 --- /dev/null +++ "b/work/com/java/minxi/java_20240524/java_2302_\351\231\210\346\257\205_2344310224/src/Main.java" @@ -0,0 +1,235 @@ +package com.java.minxi.java_20240524.java_2302_陈毅_2344310224; +import java.sql.*; + +public class Main { + //1.注册驱动 + // + //在 Driver 类静态代码块中 DriverManager 类执行了其 registerDriver() 方法用于注册驱动,当我们把类Driver 加载到内存中后,该静态代码块就会执行,此时就完成了驱动注册,我们就是使用这样的方法注册驱动的。查看 JDK 源码就不难理解: + // + //```java + //public class Driver extends NonRegisteringDriver implements java.sql.Driver { + //public Driver() throws SQLException {} + //static { + //try {DriverManager.registerDriver(new Driver()); + //} catch (SQLException var1) { + //throw new RuntimeException("Can't register driver!"); + //} + //} + //} + //``` + // + //2.获取连接 + // + //我们使用 DriverManager 类的 getConnection() 静态方法来获取数据库连接对象,其方法有三个参数,分别是 url,数据库的用户名和密码。url 有其固定的语法格式: + // + //```java + //jdbc:mysql://ip地址(域名):端口号/连接的数据库名?参数键值对1&参数键值对2 + // + //jdbc:mysql://连接的数据库名?参数键值对1&参数键值对2 //如果使用的是本地的 MySQL ,并且使用默认的端口号 3306 的,url 的值可以简写 + // + //URL由三部分组成:资源类型、存放资源的主机域名、资源文件名。 + //也可认为由4部分组成:协议、主机、端口、路径 + // + //String url = "jdbc:mysql://localhost:3306/test?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai"; + // + //各参数含义: + //1.url: 统一资源定位符 url格式-百度百科 + //2.jdbc:mysql 是协议名称 是指JDBC连接方式 + //3.localhost:3306 是主机:端口 还可以写作127.0.0.1:3306 + //4.test 数据库名 + //5.useSSL: MySQL在高版本需要指明是否进行SSL连接 在mysql连接字符串url中加入ssl=true或者false即可 SSL + //6.useUnicode: 是否使用Unicode字符集,如果参数characterEncoding设置为gb2312或gbk,本参数值必须设置为true + //7.characterEncoding: 当useUnicode设置为true,给定编码,常用utf8,默认是:autodetect + //8.serverTimezone: 设置时区 例如 serverTimezone=UTC(统一标准世界时间)或serverTimezone=Asia/Shanghai(中国时区) + // + // + //``` + // + //### Connection + // + //`Connection` ,数据库连接对象接口。在入门篇中使用了该类获取 sql 的执行对象 statement。 + // + //Connection 接口的作用有: + // + //1.获取执行 SQL 的对象 + // + //Connection 中的 createStatement() 方法可以获取执行 sql 的对象 Statement ,用于把 sql 发送到数据库服务端。使用 preparedStatement() 方法可以获取预编译 sql 的执行 sql 的对象,这个方法可以有效的防止 sql 注入的问题。 + // + //2.管理事务 + // + //在JDBC 中使用 Connection 对象进行事务管理,Connection 中定义了三个对应的方法: + // + //```java + ////开启事务: + //void setAutoCommit(boolean autoCommit) //将此连接的自动提交模式设置为给定状态 + // + ////回滚事务: + //void rollback() //撤消当前事务中所做的所有更改,并释放此 Connection对象当前持有的所有数据库锁 + // + ////提交事务: + //void commit() //使自上次提交/回滚以来所做的所有更改成为永久更改,并释放此 Connection对象当前持有的所有数据库锁 + // + //``` + // + //示例: + // + //```java + //public class JDBCDemo { + // + public static void main(String[] args) throws Exception { + Main1(); + Main2(); + Main3(); + } + + public static void Main1() throws Exception{ + // //1. 注册驱动 + Class.forName("com.mysql.cj.jdbc.Driver"); + // //2. 获取连接:如果连接的是本机mysql并且端口是默认的 3306 可以简化书写 + String url = "jdbc:mysql://127.0.0.1:3306/student?serverTimezone=Asia/Shanghai"; + String userName = "root"; + String passWord = "123456"; + Connection conn = DriverManager.getConnection(url, userName, passWord); + + + /**- 更新操作只需要展示 “执行成功”; + * - 查询操作需要展示查询出来的数据;**/ + + //1. 查询所有用户信息; + // 2. 查询id为1,且年龄为35岁的用户信息; + // 3. 把id为3的用户名称修改为小严; + + /**已知的信息:85~90为固定代码,无其他其他原因应直接照搬 + * **/ + + // //3. 定义sql + String sql1 = "select * from user_info;";/**单次操作,进行一次对sql的Str类型数据更新**/ + Statement stmt = conn.prepareStatement(sql1); + ResultSet resu1 = stmt.executeQuery(sql1); + while (resu1.next()) { + System.out.println( + "用户编号=" + resu1.getString("id") + ); + System.out.println( + "用户名=" + resu1.getString("user_name") + ); + System.out.println( + "用户密码=" + resu1.getString("user_pwd") + ); + System.out.println( + "用户年龄=" + resu1.getString("user_age") + ); + System.out.println( + "用户性别=" + resu1.getString("user_sex") + ); + System.out.println( + "用户电话=" + resu1.getString("user_phone") + ); + System.out.println( + "用户邮箱=" + resu1.getString("user_email") + ); + System.out.println( + "用户地址=" + resu1.getString("user_address") + ); + System.out.println( + "用户生日=" + resu1.getString("user_brtime") + ); + System.out.println( + "用户创建时间=" + resu1.getString("user_time") + ); + System.out.println("<----------------------------------------------------------->"); + } + + stmt.close(); + conn.close(); + resu1.close(); + } + + public static void Main2() throws Exception { + Class.forName("com.mysql.cj.jdbc.Driver"); + String url = "jdbc:mysql://127.0.0.1:3306/student?serverTimezone=Asia/Shanghai"; + String userName = "root"; + String passWord = "123456"; + Connection conn = DriverManager.getConnection(url, userName, passWord); + + + String sql2 = "select * from user_info where id=1 and user_age=35;"; + Statement stmt = conn.prepareStatement(sql2); + ResultSet resu2 = stmt.executeQuery(sql2); + while (resu2.next()) { + System.out.println( + "用户编号=" + resu2.getString("id") + ); + System.out.println( + "用户名=" + resu2.getString("user_name") + ); + System.out.println( + "用户密码=" + resu2.getString("user_pwd") + ); + System.out.println( + "用户年龄=" + resu2.getString("user_age") + ); + System.out.println( + "用户性别=" + resu2.getString("user_sex") + ); + System.out.println( + "用户电话=" + resu2.getString("user_phone") + ); + System.out.println( + "用户邮箱=" + resu2.getString("user_email") + ); + System.out.println( + "用户地址=" + resu2.getString("user_address") + ); + System.out.println( + "用户生日=" + resu2.getString("user_brtime") + ); + System.out.println( + "用户创建时间=" + resu2.getString("user_time") + ); + } + + + stmt.close(); + conn.close(); + resu2.close(); + } + + public static void Main3() throws Exception{ + Class.forName("com.mysql.cj.jdbc.Driver"); + // //2. 获取连接:如果连接的是本机mysql并且端口是默认的 3306 可以简化书写 + String url = "jdbc:mysql://127.0.0.1:3306/student?serverTimezone=Asia/Shanghai"; + String userName = "root"; + String passWord = "123456"; + Connection conn = DriverManager.getConnection(url, userName, passWord); + + String sql3 = "update user_info set user_name='小严' where id=3;"; + // //4. 获取执行sql的对象 Statement + Statement stmt = conn.prepareStatement(sql3); + int rs =stmt.executeUpdate(sql3); + // try { + // // 开启事务 + // //5. 执行sql + //受影响的行数 + // //6. 处理结果 + + // //5. 执行sql + + // //6. 处理结果 + + // // 提交事务 + if (rs>0){ + System.out.println("执行成功"); + }else { + System.out.println("执行失败"); + } + + // } catch (Exception e) { + // // 回滚事务 + // e.printStackTrace(); + // } + // //7. 释放资源 + stmt.close(); + conn.close(); + } +}