当前位置: 首页 > news >正文

【JAVA 笔记】12 带有数据库文件的完整的JDBC访问例子,命令行界面

【JAVA 笔记】12 带有数据库文件的完整的JDBC访问例子,命令行界面

在这里插入图片描述

代码结构解析

1. 导入必要的包
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.PreparedStatement;
import java.util.Scanner; // 导入Scanner类用于接收用户输入
2. 数据库连接类 DBConnection
class DBConnection {// 数据库连接相关配置String driver = "com.mysql.cj.jdbc.Driver";String url = "jdbc:mysql://localhost:3306/book?useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT%2B8";String user = "root";String password = "123456";Connection coon = null;// 构造函数,初始化数据库连接public DBConnection() {try {// 加载数据库驱动Class.forName(driver);// 建立数据库连接coon = (Connection) DriverManager.getConnection(url, user, password);if (!coon.isClosed()) {System.out.println("成功连接到数据库!");}} catch (Exception e) {e.printStackTrace();}}// 关闭数据库连接的方法public void close() {try {this.coon.close();System.out.println("数据库连接已关闭");} catch (Exception e) {e.printStackTrace();}}// 添加记录的方法public void add(String name, int age, String gender) {String sql = "INSERT INTO usrInfo(username, age, gender) VALUES (?, ?, ?)";try {PreparedStatement preStmt = this.coon.prepareStatement(sql);preStmt.setString(1, name);preStmt.setInt(2, age);preStmt.setString(3, gender);preStmt.executeUpdate();System.out.println("记录添加成功");preStmt.close();} catch (Exception e) {e.printStackTrace();}}// 查询记录的方法public void select() {String sql = "SELECT * FROM usrInfo";try {Statement stmt = this.coon.createStatement();ResultSet rs = stmt.executeQuery(sql);System.out.println("--------------------------------");System.out.println("姓名\t年龄\t性别");System.out.println("--------------------------------");while (rs.next()) {String name = rs.getString("username");int age = rs.getInt("age");String gender = rs.getString("gender");System.out.println(name + "\t" + age + "\t" + gender);}stmt.close();} catch (Exception e) {e.printStackTrace();}}// 更新记录的方法public void update(String name, int age) {String sql = "UPDATE usrInfo SET age=? WHERE username=?";try {PreparedStatement prestmt = this.coon.prepareStatement(sql);prestmt.setInt(1, age);prestmt.setString(2, name);prestmt.executeUpdate();System.out.println("记录更新成功");prestmt.close();} catch (Exception e) {e.printStackTrace();}}// 删除记录的方法public void del(String name) {String sql = "DELETE FROM usrInfo WHERE username=?";try {PreparedStatement prestmt = this.coon.prepareStatement(sql);prestmt.setString(1, name);prestmt.executeUpdate();System.out.println("记录删除成功");prestmt.close();} catch (Exception e) {e.printStackTrace();}}
}

主程序类 mysqlTest

public class mysqlTest {public static void main(String[] args) {Scanner in = new Scanner(System.in);DBConnection db = new DBConnection();// 查询当前记录System.out.println("当前usrInfo表中的记录如下:");db.select();// 添加记录System.out.println("请输入要添加的记录(姓名 年龄 性别):");System.out.print("姓名:");String name = in.next();System.out.print("年龄:");int age = in.nextInt();System.out.print("性别:");String gender = in.next();db.add(name, age, gender);// 再次查询记录System.out.println("当前usrInfo表中的记录如下:");db.select();// 更新记录System.out.println("请输入要更新的记录(姓名 新年龄):");System.out.print("姓名:");name = in.next();System.out.print("新年龄:");age = in.nextInt();db.update(name, age);// 再次查询记录System.out.println("当前usrInfo表中的记录如下:");db.select();// 删除记录System.out.println("请输入要删除的记录的姓名:");name = in.next();db.del(name);// 再次查询记录System.out.println("当前usrInfo表中的记录如下:");db.select();// 关闭数据库连接db.close();}
}

详细思路解析

  1. 数据库连接类 DBConnection

    • 构造函数:加载数据库驱动并建立连接。如果连接成功,输出成功消息。
    • 关闭连接方法:关闭数据库连接,并输出关闭消息。
    • 添加记录方法:使用PreparedStatement插入新记录,防止SQL注入攻击。
    • 查询记录方法:使用Statement执行查询,并打印结果集中的所有记录。
    • 更新记录方法:使用PreparedStatement更新记录。
    • 删除记录方法:使用PreparedStatement删除记录。
  2. 主程序类 mysqlTest

    • 初始化:创建Scanner对象用于接收用户输入,创建DBConnection对象建立数据库连接。
    • 查询记录:首次查询并显示当前表中的所有记录。
    • 添加记录:提示用户输入新记录的信息,并调用add方法插入记录。
    • 再次查询记录:显示更新后的记录列表。
    • 更新记录:提示用户输入要更新的记录信息,并调用update方法更新记录。
    • 再次查询记录:显示更新后的记录列表。
    • 删除记录:提示用户输入要删除的记录信息,并调用del方法删除记录。
    • 再次查询记录:显示最终的记录列表。
    • 关闭连接:调用close方法关闭数据库连接。

详细解析 DBConnection

1. 成员变量
String driver = "com.mysql.cj.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/book?useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT%2B8";
String user = "root";
String password = "123456";
Connection coon = null;
  • driver: JDBC驱动类名,用于加载MySQL的JDBC驱动。
  • url: 连接数据库的URL,包含数据库服务器地址、端口号、数据库名以及一些连接参数。
  • user: 数据库用户名。
  • password: 数据库密码。
  • coon: 数据库连接对象。
2. 构造函数
public DBConnection() {try {// 加载数据库驱动Class.forName(driver);// 建立数据库连接coon = (Connection) DriverManager.getConnection(url, user, password);if (!coon.isClosed()) {System.out.println("成功连接到数据库!");}} catch (Exception e) {e.printStackTrace();}
}
  • Class.forName(driver): 动态加载数据库驱动类。
  • DriverManager.getConnection(url, user, password): 使用提供的URL、用户名和密码建立数据库连接。
  • if (!coon.isClosed()): 检查连接是否成功,如果成功则输出成功消息。
3. 关闭数据库连接的方法
public void close() {try {this.coon.close();System.out.println("数据库连接已关闭");} catch (Exception e) {e.printStackTrace();}
}
  • coon.close(): 关闭数据库连接。
  • System.out.println(“数据库连接已关闭”): 输出关闭连接的消息。
4. 添加记录的方法
public void add(String name, int age, String gender) {String sql = "INSERT INTO usrInfo(username, age, gender) VALUES (?, ?, ?)";try {PreparedStatement preStmt = this.coon.prepareStatement(sql);preStmt.setString(1, name);preStmt.setInt(2, age);preStmt.setString(3, gender);preStmt.executeUpdate();System.out.println("记录添加成功");preStmt.close();} catch (Exception e) {e.printStackTrace();}
}
  • sql: 插入记录的SQL语句,使用占位符?
  • preparedStatement: 预编译的SQL语句对象。
  • preStmt.setString(1, name): 设置第一个占位符的值为name
  • preStmt.setInt(2, age): 设置第二个占位符的值为age
  • preStmt.setString(3, gender): 设置第三个占位符的值为gender
  • preStmt.executeUpdate(): 执行插入操作。
  • System.out.println(“记录添加成功”): 输出添加成功的消息。
  • preStmt.close(): 关闭预编译的SQL语句对象。
5. 查询记录的方法
public void select() {String sql = "SELECT * FROM usrInfo";try {Statement stmt = this.coon.createStatement();ResultSet rs = stmt.executeQuery(sql);System.out.println("--------------------------------");System.out.println("姓名\t年龄\t性别");System.out.println("--------------------------------");while (rs.next()) {String name = rs.getString("username");int age = rs.getInt("age");String gender = rs.getString("gender");System.out.println(name + "\t" + age + "\t" + gender);}stmt.close();} catch (Exception e) {e.printStackTrace();}
}
  • sql: 查询所有记录的SQL语句。
  • Statement stmt: SQL语句对象。
  • ResultSet rs: 查询结果集。
  • while (rs.next()): 遍历结果集中的每一行记录。
  • rs.getString(“username”): 获取字段username的值。
  • rs.getInt(“age”): 获取字段age的值。
  • rs.getString(“gender”): 获取字段gender的值。
  • System.out.println(name + “\t” + age + “\t” + gender): 输出每条记录的信息。
  • stmt.close(): 关闭SQL语句对象。
6. 更新记录的方法
public void update(String name, int age) {String sql = "UPDATE usrInfo SET age=? WHERE username=?";try {PreparedStatement prestmt = this.coon.prepareStatement(sql);prestmt.setInt(1, age);prestmt.setString(2, name);prestmt.executeUpdate();System.out.println("记录更新成功");prestmt.close();} catch (Exception e) {e.printStackTrace();}
}
  • sql: 更新记录的SQL语句,使用占位符?
  • preparedStatement: 预编译的SQL语句对象。
  • prestmt.setInt(1, age): 设置第一个占位符的值为age
  • prestmt.setString(2, name): 设置第二个占位符的值为name
  • prestmt.executeUpdate(): 执行更新操作。
  • System.out.println(“记录更新成功”): 输出更新成功的消息。
  • prestmt.close(): 关闭预编译的SQL语句对象。
7. 删除记录的方法
public void del(String name) {String sql = "DELETE FROM usrInfo WHERE username=?";try {PreparedStatement prestmt = this.coon.prepareStatement(sql);prestmt.setString(1, name);prestmt.executeUpdate();System.out.println("记录删除成功");prestmt.close();} catch (Exception e) {e.printStackTrace();}
}
  • sql: 删除记录的SQL语句,使用占位符?
  • preparedStatement: 预编译的SQL语句对象。
  • prestmt.setString(1, name): 设置占位符的值为name
  • prestmt.executeUpdate(): 执行删除操作。
  • System.out.println(“记录删除成功”): 输出删除成功的消息。
  • prestmt.close(): 关闭预编译的SQL语句对象。

主程序类 mysqlTest

1. 主方法
public static void main(String[] args) {Scanner in = new Scanner(System.in);DBConnection db = new DBConnection();// 查询当前记录System.out.println("当前usrInfo表中的记录如下:");db.select();// 添加记录System.out.println("请输入要添加的记录(姓名 年龄 性别):");System.out.print("姓名:");String name = in.next();System.out.print("年龄:");int age = in.nextInt();System.out.print("性别:");String gender = in.next();db.add(name, age, gender);// 再次查询记录System.out.println("当前usrInfo表中的记录如下:");db.select();// 更新记录System.out.println("请输入要更新的记录(姓名 新年龄):");System.out.print("姓名:");name = in.next();System.out.print("新年龄:");age = in.nextInt();db.update(name, age);// 再次查询记录System.out.println("当前usrInfo表中的记录如下:");db.select();// 删除记录System.out.println("请输入要删除的记录的姓名:");name = in.next();db.del(name);// 再次查询记录System.out.println("当前usrInfo表中的记录如下:");db.select();// 关闭数据库连接db.close();
}
  • Scanner in = new Scanner(System.in): 创建一个Scanner对象用于接收用户输入。
  • DBConnection db = new DBConnection(): 创建一个DBConnection对象,建立数据库连接。
  • 查询当前记录: 调用select方法显示当前表中的所有记录。
  • 添加记录: 提示用户输入新记录的信息,并调用add方法插入记录。
  • 再次查询记录: 调用select方法显示更新后的记录列表。
  • 更新记录: 提示用户输入要更新的记录信息,并调用update方法更新记录。
  • 再次查询记录: 调用select方法显示更新后的记录列表。
  • 删除记录: 提示用户输入要删除的记录信息,并调用del方法删除记录。
  • 再次查询记录: 调用select方法显示最终的记录列表。
  • 关闭数据库连接: 调用close方法关闭数据库连接。

好的,我们继续深入解析代码中的每个部分,确保每个细节都清晰明了。

继续解析 DBConnection

8. 异常处理

在上述代码中,每个方法都使用了try-catch块来捕获可能发生的异常。这是非常重要的,因为数据库操作可能会遇到各种错误,例如连接失败、SQL语法错误等。

try {// 数据库操作代码
} catch (Exception e) {e.printStackTrace();
}
  • try: 尝试执行数据库操作。
  • catch (Exception e): 捕获所有类型的异常。
  • e.printStackTrace(): 打印异常的堆栈跟踪,帮助调试。
9. 资源管理

每次操作完成后,都需要关闭相关的数据库资源,如PreparedStatementStatementResultSet。这不仅有助于释放系统资源,还可以避免内存泄漏。

preStmt.close();
stmt.close();
rs.close();

继续解析 mysqlTest

1. 用户输入

在主程序中,使用Scanner类来接收用户的输入。Scanner类提供了多种方法来读取不同类型的输入。

Scanner in = new Scanner(System.in);
  • in.next(): 读取下一个字符串。
  • in.nextInt(): 读取下一个整数。
2. 主方法的详细流程
初始化
public static void main(String[] args) {Scanner in = new Scanner(System.in);DBConnection db = new DBConnection();
  • Scanner in = new Scanner(System.in): 创建一个Scanner对象,用于从控制台读取用户输入。
  • DBConnection db = new DBConnection(): 创建一个DBConnection对象,建立数据库连接。
查询当前记录
    // 查询当前记录System.out.println("当前usrInfo表中的记录如下:");db.select();
  • System.out.println(“当前usrInfo表中的记录如下:”): 输出提示信息。
  • db.select(): 调用select方法查询并显示当前表中的所有记录。
添加记录
    // 添加记录System.out.println("请输入要添加的记录(姓名 年龄 性别):");System.out.print("姓名:");String name = in.next();System.out.print("年龄:");int age = in.nextInt();System.out.print("性别:");String gender = in.next();db.add(name, age, gender);
  • System.out.println(“请输入要添加的记录(姓名 年龄 性别):”): 输出提示信息。
  • System.out.print(“姓名:”): 提示用户输入姓名。
  • String name = in.next(): 读取用户输入的姓名。
  • System.out.print(“年龄:”): 提示用户输入年龄。
  • int age = in.nextInt(): 读取用户输入的年龄。
  • System.out.print(“性别:”): 提示用户输入性别。
  • String gender = in.next(): 读取用户输入的性别。
  • db.add(name, age, gender): 调用add方法将新记录添加到数据库中。
再次查询记录
    // 再次查询记录System.out.println("当前usrInfo表中的记录如下:");db.select();
  • System.out.println(“当前usrInfo表中的记录如下:”): 输出提示信息。
  • db.select(): 调用select方法查询并显示当前表中的所有记录。
更新记录
    // 更新记录System.out.println("请输入要更新的记录(姓名 新年龄):");System.out.print("姓名:");name = in.next();System.out.print("新年龄:");age = in.nextInt();db.update(name, age);
  • System.out.println(“请输入要更新的记录(姓名 新年龄):”): 输出提示信息。
  • System.out.print(“姓名:”): 提示用户输入要更新的姓名。
  • String name = in.next(): 读取用户输入的姓名。
  • System.out.print(“新年龄:”): 提示用户输入新的年龄。
  • int age = in.nextInt(): 读取用户输入的新年龄。
  • db.update(name, age): 调用update方法更新指定记录的年龄。
再次查询记录
    // 再次查询记录System.out.println("当前usrInfo表中的记录如下:");db.select();
  • System.out.println(“当前usrInfo表中的记录如下:”): 输出提示信息。
  • db.select(): 调用select方法查询并显示当前表中的所有记录。
删除记录
    // 删除记录System.out.println("请输入要删除的记录的姓名:");name = in.next();db.del(name);
  • System.out.println(“请输入要删除的记录的姓名:”): 输出提示信息。
  • String name = in.next(): 读取用户输入的姓名。
  • db.del(name): 调用del方法删除指定记录。
再次查询记录
    // 再次查询记录System.out.println("当前usrInfo表中的记录如下:");db.select();
  • System.out.println(“当前usrInfo表中的记录如下:”): 输出提示信息。
  • db.select(): 调用select方法查询并显示当前表中的所有记录。
关闭数据库连接
    // 关闭数据库连接db.close();
  • db.close(): 调用close方法关闭数据库连接。

总结

通过以上详细的解析,我们可以看到整个程序的工作流程如下:

  1. 初始化:创建数据库连接。
  2. 查询记录:显示当前表中的所有记录。
  3. 添加记录:根据用户输入添加新记录。
  4. 再次查询记录:显示更新后的记录列表。
  5. 更新记录:根据用户输入更新指定记录。
  6. 再次查询记录:显示更新后的记录列表。
  7. 删除记录:根据用户输入删除指定记录。
  8. 再次查询记录:显示最终的记录列表。
  9. 关闭连接:关闭数据库连接。

这个程序有哪些常见的异常处理?

在数据库操作中,常见的异常类型包括但不限于以下几种。我们可以通过捕获这些异常来处理不同的错误情况,确保程序的健壮性和稳定性。

常见的异常类型及其处理

  1. ClassNotFoundException

    • 原因:无法找到指定的数据库驱动类。
    • 处理:检查驱动类名是否正确,确保驱动类文件存在于类路径中。
  2. SQLException

    • 原因:数据库操作过程中发生错误,如SQL语法错误、连接失败、事务处理错误等。
    • 处理:捕获SQLException,并根据具体的错误代码和消息进行相应的处理。
  3. NullPointerException

    • 原因:尝试访问空对象的属性或方法。
    • 处理:在访问对象之前,检查对象是否为null
  4. InputMismatchException

    • 原因:使用Scanner读取输入时,用户输入的数据类型与预期不符。
    • 处理:捕获InputMismatchException,提示用户输入正确的数据类型,并重新读取输入。
  5. IOException

    • 原因:输入/输出操作失败。
    • 处理:捕获IOException,并根据具体情况处理,如关闭文件流等。

示例代码中的异常处理

1. DBConnection 类中的异常处理
public class DBConnection {// 数据库连接相关配置String driver = "com.mysql.cj.jdbc.Driver";String url = "jdbc:mysql://localhost:3306/book?useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT%2B8";String user = "root";String password = "123456";Connection coon = null;// 构造函数,初始化数据库连接public DBConnection() {try {// 加载数据库驱动Class.forName(driver);// 建立数据库连接coon = (Connection) DriverManager.getConnection(url, user, password);if (!coon.isClosed()) {System.out.println("成功连接到数据库!");}} catch (ClassNotFoundException e) {System.err.println("找不到数据库驱动类:" + e.getMessage());} catch (SQLException e) {System.err.println("数据库连接失败:" + e.getMessage());} catch (Exception e) {e.printStackTrace();}}// 关闭数据库连接的方法public void close() {try {if (coon != null && !coon.isClosed()) {coon.close();System.out.println("数据库连接已关闭");}} catch (SQLException e) {System.err.println("关闭数据库连接失败:" + e.getMessage());}}// 添加记录的方法public void add(String name, int age, String gender) {String sql = "INSERT INTO usrInfo(username, age, gender) VALUES (?, ?, ?)";try {PreparedStatement preStmt = this.coon.prepareStatement(sql);preStmt.setString(1, name);preStmt.setInt(2, age);preStmt.setString(3, gender);preStmt.executeUpdate();System.out.println("记录添加成功");} catch (SQLException e) {System.err.println("添加记录失败:" + e.getMessage());} finally {try {if (preStmt != null) {preStmt.close();}} catch (SQLException e) {System.err.println("关闭PreparedStatement失败:" + e.getMessage());}}}// 查询记录的方法public void select() {String sql = "SELECT * FROM usrInfo";try {Statement stmt = this.coon.createStatement();ResultSet rs = stmt.executeQuery(sql);System.out.println("--------------------------------");System.out.println("姓名\t年龄\t性别");System.out.println("--------------------------------");while (rs.next()) {String name = rs.getString("username");int age = rs.getInt("age");String gender = rs.getString("gender");System.out.println(name + "\t" + age + "\t" + gender);}} catch (SQLException e) {System.err.println("查询记录失败:" + e.getMessage());} finally {try {if (stmt != null) {stmt.close();}} catch (SQLException e) {System.err.println("关闭Statement失败:" + e.getMessage());}}}// 更新记录的方法public void update(String name, int age) {String sql = "UPDATE usrInfo SET age=? WHERE username=?";try {PreparedStatement prestmt = this.coon.prepareStatement(sql);prestmt.setInt(1, age);prestmt.setString(2, name);prestmt.executeUpdate();System.out.println("记录更新成功");} catch (SQLException e) {System.err.println("更新记录失败:" + e.getMessage());} finally {try {if (prestmt != null) {prestmt.close();}} catch (SQLException e) {System.err.println("关闭PreparedStatement失败:" + e.getMessage());}}}// 删除记录的方法public void del(String name) {String sql = "DELETE FROM usrInfo WHERE username=?";try {PreparedStatement prestmt = this.coon.prepareStatement(sql);prestmt.setString(1, name);prestmt.executeUpdate();System.out.println("记录删除成功");} catch (SQLException e) {System.err.println("删除记录失败:" + e.getMessage());} finally {try {if (prestmt != null) {prestmt.close();}} catch (SQLException e) {System.err.println("关闭PreparedStatement失败:" + e.getMessage());}}}
}
2. mysqlTest 类中的异常处理
public class mysqlTest {public static void main(String[] args) {Scanner in = new Scanner(System.in);DBConnection db = null;try {db = new DBConnection();// 查询当前记录System.out.println("当前usrInfo表中的记录如下:");db.select();// 添加记录System.out.println("请输入要添加的记录(姓名 年龄 性别):");System.out.print("姓名:");String name = in.next();System.out.print("年龄:");int age = in.nextInt();System.out.print("性别:");String gender = in.next();db.add(name, age, gender);// 再次查询记录System.out.println("当前usrInfo表中的记录如下:");db.select();// 更新记录System.out.println("请输入要更新的记录(姓名 新年龄):");System.out.print("姓名:");name = in.next();System.out.print("新年龄:");age = in.nextInt();db.update(name, age);// 再次查询记录System.out.println("当前usrInfo表中的记录如下:");db.select();// 删除记录System.out.println("请输入要删除的记录的姓名:");name = in.next();db.del(name);// 再次查询记录System.out.println("当前usrInfo表中的记录如下:");db.select();} catch (InputMismatchException e) {System.err.println("输入类型错误,请输入正确的数据类型:" + e.getMessage());} catch (Exception e) {e.printStackTrace();} finally {if (db != null) {db.close();}in.close();}}
}

解释

  1. ClassNotFoundException:

    • 在加载数据库驱动时,如果找不到指定的驱动类,会抛出ClassNotFoundException
    • 处理方式:输出错误信息,提示用户检查驱动类名和驱动文件路径。
  2. SQLException:

    • 在执行数据库操作时,如果发生SQL语法错误、连接失败等问题,会抛出SQLException
    • 处理方式:捕获SQLException,输出错误信息,帮助用户定位问题。
  3. NullPointerException:

    • 在访问对象属性或方法时,如果对象为null,会抛出NullPointerException
    • 处理方式:在访问对象之前,检查对象是否为null,并在必要时输出错误信息。
  4. InputMismatchException:

    • 使用Scanner读取输入时,如果用户输入的数据类型与预期不符,会抛出InputMismatchException
    • 处理方式:捕获InputMismatchException,提示用户输入正确的数据类型,并重新读取输入。
  5. IOException:

    • 在进行文件操作或其他I/O操作时,如果发生错误,会抛出IOException
    • 处理方式:捕获IOException,输出错误信息,并根据具体情况处理。

相关文章:

【JAVA 笔记】12 带有数据库文件的完整的JDBC访问例子,命令行界面

【JAVA 笔记】12 带有数据库文件的完整的JDBC访问例子,命令行界面 代码结构解析 1. 导入必要的包 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.sql.PreparedStatement; impo…...

基于java+SpringBoot+Vue的在线宠物用品交易网站设计与实现

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: Springboot mybatis Maven mysql5.7或8.0等等组成&#x…...

智慧社区管理系统平台提升物业运营效率与用户体验

内容概要 智慧社区管理系统平台是一个集成了多项功能的综合性解决方案,旨在通过先进的技术手段提升物业管理的效率和居民的生活质量。该平台不仅关注物业运营的各个方面,还强调用户体验的重要性。随着科技的发展,社区管理方式正发生着翻天覆…...

el-table-column自动生成序号在序号前插入图标

实现效果&#xff1a; 代码如下&#xff1a; 在el-table里加入这个就可以了&#xff0c;需要拿到值可以用scope.$index ​​​​​​​<el-table-column type"index" label"序号" show-overflow-tooltip"true" min-width"40">…...

深度学习之目标检测的常用标注工具

1 LabelImg ​ LabelImg 是一款开源的图像标注工具&#xff0c;标签可用于分类和目标检测&#xff0c;它是用 Python 编写的&#xff0c;并使用Qt作为其图形界面&#xff0c;简单好用。注释以 PASCAL VOC 格式保存为 XML 文件&#xff0c;这是 ImageNet 使用的格式。 此外&…...

「Mac玩转仓颉内测版21」基础篇1 - 仓颉程序的基本组成

本篇将系统介绍Cangjie编程语言中程序的基本组成部分&#xff0c;涵盖 main 函数的定义、包与模块的使用、变量类型、作用域和代码结构原则&#xff0c;帮助开发者理解Cangjie程序的整体结构。 关键词 程序入口点main函数包与模块变量类型与作用域值类型与引用类型代码结构与规…...

【计算机网络】解决bind error

服务器有时可以立即重启&#xff0c;有时候无法立即重启 — bind error 首先要知道&#xff1a;四次挥手动作完成之后&#xff0c;主动断开连接的一方要维持一段时间的TIME_WAIT bind error原因&#xff1a;因为是服务器主动断开的&#xff0c;所以服务器要去维持TIME_WAIT状…...

【SVN和GIT】版本控制系统详细下载使用教程

文章目录 ** 参考文章一、什么是SVN和GIT二、软件使用介绍1 SVN安装1.1 服务端SVN下载地址1.2 客户端SVN下载地址2 SVN使用2.1 服务端SVN基础使用2.1.1 创建存储库和用户成员2.1.2 为存储库添加访问人员2.2 客户端SVN基础使用2.2.1 在本地下载库中的内容2.2.2 版本文件操作--更…...

初识 Pynecone:构建现代化 Web 应用的 Python 框架

初识 Pynecone&#xff1a;构建现代化 Web 应用的 Python 框架 引言 在 Web 开发的世界里&#xff0c;Python 是后端开发的常客&#xff0c;但如果想用 Python 直接构建现代化的前端应用会怎样&#xff1f;这正是 Pynecone 框架的用武之地&#xff01;Pynecone 是一个全栈 Pyt…...

Go-RPC关键指标分析与企业实践

1.稳定性-保障策略 熔断&#xff1a;保护调用方 限流&#xff1a;保护被调用方 超时控制&#xff1a;避免浪费 2.稳定性-请求成功率&#xff08;用重复发送 负载均衡&#xff09; 3.稳定性-长尾请求&#xff08;用备份请求&#xff09; 4.稳定性-注册中间件 易用性&#xff1a…...

社交电商专业赋能高校教育与产业协同发展:定制开发AI智能名片及2+1链动商城小程序的创新驱动

摘要&#xff1a;本文围绕社交电商有望成为高校常态专业这一趋势展开深入探讨&#xff0c;剖析国家政策认可下其学科发展前景&#xff0c;着重阐述在专业建设进程中面临的师资短缺及实践教学难题。通过引入定制开发AI智能名片与21链动商城小程序&#xff0c;探究如何借助这些新…...

Ubuntu下安装Qt

1.如图1所示&#xff0c;在Index of /archive上下载安装包&#xff1b; 图1 2.将图1安装包下载好之后&#xff0c;通过共享文件夹的方式拷贝到ubutntu&#xff0c;如图2所示&#xff1b; 图2 3.如图3所示&#xff0c;执行chmod x qt-creator-opensource-linux-x86_64-10.0.2.…...

《FreeRTOS任务删除篇》

任务删除函数 源码1. 进入临界区1.1 第一步1.2 第二步1.3 第三步1.4 第四步 2. 获取待删除任务的任务控制块TCB3. 从就绪/延迟列表中删除任务4. 从事件列表中删除任务5. 如果待删除任务是当前运行的任务6. 如果待删除任务是其它任务7. 退出临界区7.1 第一步7.2 第二步7.3 第三步…...

取电快充协议芯片,支持全协议、内部集成LDO支持从UART串口读取电压电流消息

H004D 是一款支持全协议的受电端诱骗取电协议芯片&#xff0c;支持宽电压输入 3.3V~30V&#xff0c;芯片内部集成LDO&#xff0c;可输出 3.3V电压, 支持 通过UART 串口读取电压电流&#xff0c;支持定制功能&#xff0c;芯片采用QFN_20封装&#xff0c;线路简单&#xff0c;芯片…...

Linux:自定义Shell

本文旨在通过自己完成一个简单的Shell来帮助理解命令行Shell这个程序。 目录 一、输出“提示” 二、获取输入 三、切割字符串 四、执行指令 1.子进程替换 2.内建指令 一、输出“提示” 这个项目基于虚拟机Ubuntu22.04.5实现。 打开终端界面如图所示。 其中。 之前&#x…...

git 基础之 merge 和 rebase 的比较

在团队软件开发过程中&#xff0c;代码合并是一个基本且频繁执行的任务。 Git 提供了多种合并代码的策略&#xff0c;其中最常用的是 merge 和 rebase。 尽管二者的终极目标是相同的——整合代码变更——它们的方法和推荐的使用场景却有所区别。本文将详细介绍和比较这两种策…...

pve 磁盘选错位置修改

选中磁盘选择磁盘操作&#xff0c;移动存储 改到你要迁移的位置&#xff0c;迁移后原来的文件如果没选择删除源不会删除&#xff0c;需要确认数据没问题后选择相应的文件&#xff0c;如果有快照&#xff0c;快照可能也需要提前删除&#xff0c;删除前请做好备份。...

C语言第十二周课——有趣的小程序

目录 1.我是猪关机程序 1.1dos命令&#xff08;强制关机&#xff09; 1.2思路 1.3源码 2.猜数字 2.1介绍 2.2思路 2.3源码 1.我是猪关机程序 效果:运行程序后电脑在60s后关机&#xff0c;如果输入“我是猪”则取消关机&#xff1b;如果输入“你是猪”则立即关机&…...

【Linux学习】【Ubuntu入门】1-7 ubuntu下磁盘管理

1.准备一个U盘或者SD卡&#xff08;插上读卡器&#xff09;&#xff0c;将U盘插入主机电脑&#xff0c;右键点击属性&#xff0c;查看U盘的文件系统确保是FAT32格式 2.右键单击ubuntu右下角图标&#xff0c;将U盘与虚拟机连接 参考链接 3. Ubuntu磁盘文件&#xff1a;/dev/s…...

解决Windows + Chrome 使用Blob下载大文件时,部分情况下报错net:ERR_FAILED 200 (OK)的问题

背景&#xff1a; 部分线上用户反馈&#xff0c;下载文件会报错&#xff0c;但重启电脑又好了。测试无法复现。遂远程客户&#xff0c;发现在下载超过一定阈值大小的文件时&#xff0c;会报错。 但直接点击下载链接&#xff0c;可以正常下载 查阅代码&#xff0c;以前的写法是…...

SpringBoot多文件上传

多文件上传是在单文件上传的基础上修改而来&#xff0c;不了解单文件上传可以参考上一篇。以下在将修改部分展示如下&#xff1a; 一、修改upload.html文件&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title&g…...

Jenkins修改LOGO

重启看的LOGO和登录页面左上角的LOGO 进入LOGO存在的目录 [roottest-server01 svgs]# pwd /opt/jenkins_data/war/images/svgs [roottest-server01 svgs]# ll logo.svg -rw-r--r-- 1 jenkins jenkins 29819 Oct 21 10:58 logo.svg #jenkins_data目录是我挂载到了/opt目录&…...

幼儿园管理系统|Java|SSM|Vue| 前后端分离

【重要①】前后端源码万字文档部署文档 【重要②】正版源码有问题包售后 【包含内容】 【一】项目提供非常完整的源码注释 【二】相关技术栈文档 【三】源码讲解视频 【其它服务】 【一】可以提供远程部署安装&#xff0c;包扩环境 【…...

Unity 实现界面拖拽功能的脚本,通过IDragHandler 实现

using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems;namespace Assets.Scripts._1024 {class EVENTdome : MonoBehaviour, IPointerDownHandler, IBeginDragHandler, IDragHandler{//Unity 事件处理的几种方式//1 通过编辑…...

【042A】基于51单片机门禁系统【Proteus仿真+Keil程序+报告+原理图】

☆、设计硬件组成&#xff1a;51单片机最小系统RFID读卡器继电器蜂鸣器LED灯。 1、设计采用STC89C51/52、AT89C51/52、AT89S51/52作为主控芯片&#xff1b; 2、通过RC522读卡器读取IC卡信息&#xff0c;信息匹配继电器吸合门锁打开&#xff1b; 3、可通过上位机对IC卡进行注…...

数据库中的增删改查操作、聚合函数、内置函数、分组查询

数据库中的增删改查操作、聚合函数、内置函数、分组查询 CRUD简介Create 新增语法示例单⾏数据全列插⼊单⾏数据指定列插⼊多⾏数据指定列插⼊ Retrieve 检索语法⽰例构造数据 Select全列查询指定列查询查询字段为表达式为查询结果指定别名语法⽰例 结果去重查询 Order by 排序…...

递归------深度优先搜索

深度优先搜索&#xff08;Depth-First Search&#xff0c;简称DFS&#xff09;是一种用于遍历或搜索树或图的算法。它从一个顶点开始&#xff0c;尽可能深地搜索树的分支。深度优先搜索沿着一条路径深入&#xff0c;直到无法继续为止&#xff0c;然后回溯并尝试其他路径。这种搜…...

三十一、构建完善微服务——API 网关

一、API 网关基础 系统拆分为微服务后&#xff0c;内部的微服务之间是互联互通的&#xff0c;相互之间的访问都是点对点的。如果外部系统想调用系统的某个功能&#xff0c;也采取点对点的方式&#xff0c;则外部系统会非常“头大”。因为在外部系统看来&#xff0c;它不需要也没…...

【大语言模型】ACL2024论文-20 SCIMON:面向新颖性的科学启示机器优化

【大语言模型】ACL2024论文-20 SCIMON&#xff1a;面向新颖性的科学启示机器优化 目录 文章目录 【大语言模型】ACL2024论文-20 SCIMON&#xff1a;面向新颖性的科学启示机器优化目录摘要研究背景问题与挑战如何解决创新点算法模型实验效果推荐阅读指数&#xff1a;★★★★☆ …...

GRU (门控循环单元 - 基于RNN - 简化LSTM又快又好 - 体现注意力的思想) + 代码实现 —— 笔记3.5《动手学深度学习》

目录 0. 前言 1. 门控隐状态 1.1 重置门和更新门 1.2 候选隐状态 1.3 隐状态 2. 从零开始实现 2.1 初始化模型参数 2.2 定义模型 2.3 训练与预测 3 简洁实现 4. 小结 0. 前言 课程全部代码&#xff08;pytorch版&#xff09;已上传到附件看懂上一篇RNN的所有细节&am…...

C++头文件大全(要是还有请帮忙)

以下是 C 中常见的各类头文件分类列举&#xff08;但实际远不止这些&#xff0c;随着标准库扩充及第三方库使用会有更多&#xff09;&#xff1a; 输入 / 输出流相关头文件 <iostream>&#xff1a;用于标准输入输出&#xff0c;定义了 cin、cout 等对象。<fstream>…...

免费好用的静态网页托管平台全面对比介绍

5个免费好用的静态网页托管平台全面对比 前言 作为一名前端开发者&#xff0c;经常会遇到需要部署静态网页的场景。无论是个人项目展示、简单的游戏demo还是作品集网站&#xff0c;选择一个合适的托管平台都很重要。本文将详细介绍5个免费的静态网页托管平台&#xff0c;帮助…...

【电路笔记 TMS320F28335DSP】开发环境 CCSTUDIO IDE配置+工程配置

下载 CCSTUDIO IDE 安装 CCSTUDIO IDE 直接点击下一步即可 controlSUITE™&#xff08;可选&#xff09; controlSUITE™ 软件套件&#xff1a;C2000™ 微控制器的必备软件和开发工具CCS 的 controlSUITE™ 是 Texas Instruments (TI) 提供的一个综合软件平台&…...

org.apache.log4j的日志记录级别和基础使用Demo

org.apache.log4j的日志记录级别和基础使用Demo&#xff0c;本次案例展示&#xff0c;使用是的maven项目&#xff0c;搭建的一个简单的爬虫案例。里面采用了大家熟悉的日志记录插件&#xff0c;log4j。来自apache公司的开源插件。 package com.qian.test;import org.apache.log…...

设计LRU缓存

LRU缓存 LRU缓存的实现思路LRU缓存的操作C11 STL实现LRU缓存自行设计双向链表 哈希表 LRU&#xff08;Least Recently Used&#xff0c;最近最少使用&#xff09;缓存是一种常见的缓存淘汰算法&#xff0c;其基本思想是&#xff1a;当缓存空间已满时&#xff0c;移除最近最少使…...

shell(7)forwhile

for循环&#xff1a; for i in seq 1 100 do echo $i donefor i in seq 1 100 do 部分&#xff1a; for 是 bash 中的循环关键字&#xff0c;用于开启一个循环结构。 i 是定义的循环变量&#xff0c;在每次循环过程中&#xff0c;它会被赋予不同的值。 seq 1 100 这部分&a…...

VSCode打开c#项目报错:DotnetAcquisitionTimeoutError

VSCode打开c#项目&#xff0c;会自动下载.NET环境&#xff0c;下载不了报超时&#xff0c;详情如下&#xff1a; ms-dotnettools.csharp tried to install .NET 8.0.11~x64 but that install had already been requested. No downloads or changes were made. ms-dotnettools.…...

《生成式 AI》课程 作业6 大语言模型(LLM)的训练微调 Fine Tuning -- part1

资料来自李宏毅老师《生成式 AI》课程&#xff0c;如有侵权请通知下线 Introduction to Generative AI 2024 Spring 该文档主要介绍了国立台湾大学&#xff08;NTU&#xff09;2024 年春季 “生成式人工智能&#xff08;GenAI&#xff09;” 课程的作业 5&#xff08;GenAI HW…...

SQLynx让数据库变得简单!

SQLynx让数据库管理和开发变得更简单&#xff0c;SQLynx是一款旨在简化飞客使用体验的创新型工具&#xff0c;它为数据库管理者、数据库分析师和开发人员提供了一个直观、易用、高效的平台&#xff0c;首先&#xff0c;SQLynx拥有直观友好的用户界面。无论您是新建还是导表&…...

#Uniapp篇:变量v-if 和 v-show 区别.sync 修饰符宽屏适配指南Pinia内置了

let that this 如果在某些methods中this被指向了其他内容&#xff0c;则需要提前把this赋值给另一个变量&#xff0c;比如let that this。 <script>export default {data() {return {connectedWifi:""}},methods: {buttonClick: function () {const that …...

EMD-KPCA-Transformer多变量回归预测!分解+降维+预测!多重创新!直接写核心!

EMD-KPCA-Transformer多变量回归预测&#xff01;分解降维预测&#xff01;多重创新&#xff01;直接写核心&#xff01; 目录 EMD-KPCA-Transformer多变量回归预测&#xff01;分解降维预测&#xff01;多重创新&#xff01;直接写核心&#xff01;效果一览基本介绍程序设计参…...

【数据结构】二叉树(2)

目录 1. 二叉树的遍历 前序遍历 中序遍历 后序遍历 2. 计算二叉树中的节点个数 3. 计算二叉树中叶子节点个数 4. 计算二叉树的深度 5. 计算二叉树第k层节点个数 6. 二叉树基础练习 7. 二叉树的创建 8. 二叉树的销毁 9. 层序遍历 10. 判断二叉树是否为完全二叉树 1…...

常用服务器运维软件之 WGCLOUD(国产)介绍

WGCLOUD是一款免费开源的运维监控软件&#xff0c;轻量高效&#xff0c;部署方便&#xff0c;上手简单&#xff0c;界面简单流畅 WGCLOUD是国产运维软件&#xff0c;可以适配大部分的信创环境&#xff0c;比如麒麟、统信等操作系统 WGCLOUD具体支持监控的操作系统如下&#x…...

shell

第四章 shell中的变量 4.1 系统变量 1.常用系统变量 $HOME ,$PWD,$SHELL ,$USER 4.2 自定义变量 1.变量值&#xff08;等号两边没有空格&#xff09; 2.撤销变量&#xff1a;unset变量 3.声明静态变量&#xff1a;readonly 变量&#xff0c;注意&#xff1a;不能unset 4.变…...

Target-absent Human Attention

Abstract 预测人类注视行为对于构建能够预测用户注意力的人机交互系统非常重要。已经开发出计算机视觉模型来预测人们在搜索目标物体时的注视点。但当目标不存在于图像中时,又该如何处理呢?同样重要的是要了解当人们找不到目标时,他们如何进行搜索,以及何时停止搜索。在本文…...

Objective-C 1.0和2.0有什么区别?

Objective-C ObjC比较小众&#xff0c;在1980年左右由Stepstone公司的Brad Cox和Tom Love发明。后来NeXT公司获得ObjC语言使用权&#xff0c;再后来到1996年NeXT被苹果公司收购也变成苹果公司使用&#xff0c;Mac市场占有率本身就不高&#xff0c;ObjC没有太多程序员。在移动互…...

06 —— Webpack优化—压缩过程

css代码提取后想要压缩 —— 使用css-minimizer-webpack-plugin插件 下载 css-minimizer-webpack-plugin 本地软件包 npm install css-minimizer-webpack-plugin --save-dev 配置 webpack.config.js 让webpack拥有该功能 const CssMinimizerPlugin require(css-minimizer-…...

【探寻密码的奥秘】-000:密码相关概念定义及介绍(持续更新~~)

密码相关概念 1、密码学 1、密码学 密码学是研究密码与密码活动本质和规律&#xff0c;以及指导密码实践的科学&#xff0c;主要探索密码编码和密码分析的一般规律&#xff0c;它是一门结合数学、计算机科学、信息通信系统等多门学科为一体的综合性学科。 密码学的常见应用场景…...

大模型(LLMs)推理篇

大模型&#xff08;LLMs&#xff09;推理篇 1. 为什么大模型推理时显存涨的那么多还一直占着&#xff1f; 首先&#xff0c;序列太长了&#xff0c;有很多Q/K/V&#xff1b;其次&#xff0c;因为是逐个预测next token&#xff0c;每次要缓存K/V加速解码。 大模型在gpu和cpu上…...

算法学习笔记(十):位运算、数论等

一.位运算基础 集合与集合之间的位运算 集合和元素 常用函数 1.使两个整数相等的位更改次数 给你两个正帧数 n 和 k&#xff0c;你可以选择 n 的二进制表示 中任意一个值为 1 的位&#xff0c; 并将其改为0&#xff0c;返回使得 n 等于 k 所需要的更改次数&#xff0c;如无法实…...