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

实验三 JDBC数据库操作编程(设计性)

实验  JDBC数据库操作编程(设计性)
  1. 实验目的
    1. 掌握JDBC的数据库编程方法
    2. 掌握采用JDBC完成数据库链接、增删改查,以及操作封装的综合应用。
  2. 实验要求
    1. 本实验要求每个同学单独完成;
    2. 调试程序要记录调试过程中出现的问题及解决办法,并写入到实验总结和心得;
    3. 完成实验后直接在题目后面按要求给出本实验的实验报告。
  3. 实验设备、环境

奔腾以上计算机,装有Myeclipse 6.0以上

  1. 实验内容
    1. 用JDBC完成数据操作层的封装,具体要求如下:
    1. 封装数据库连接
    2. 把数据库的增删改查封装成方法
    3. 完成一个基于自己实现方法的数据库带参数查询实例,要求查询参数不得少于3个,同时返回类型必须为一个具体的对象类型
    4. 查询所有信息,封装返回具体列表对象
    5. 自己建立数据库
    6. 图片信息的直接保存和读取。

根据以上要求,设计一个学生管理系统的数据库操作层StudentDao,系统可以有学生表student。

把程序运行界面截图贴在这里,源码贴到附录部分

    1. 使用4.1完成的StudentDao,完成学生管理系统的增、删、改、查的场景(可以用System.out.print在MyEclipse的 Console完成)

把程序运行界面截图贴在这里,源码贴到附录部分

  1. 设计一个学生选课系统的数据库操作层CourseSelectionDao,系统可以有学生表student、课程表course和成绩表score,可以实现:
  2. save(Student s, Course c); //一个学生选了一门课程
  3. save(Student s, List<Course> courses); //一个学生选了多门课程
  4. save(List<Student> students, Course c);//多个学生都选了同一门课程

把程序运行界面截图贴在这里,源码贴到附录部分

  1. 实验总结与心得请详细叙述你通过该实验掌握的知识点和心得,比如对错误的解决办法等)

  在实验过程中遇到了连接不到sqlserve的问题:com.microsoft.sqlserver.jdbc.SQLServerException: 通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。错误:“Connection refused: no further information。请验证连接属性。确保 SQL Server 的实例正在主机上运行,且在此端口接受 TCP/IP 连接,还要确保防火墙没有阻止到此端口的 TCP 连接。”。
at mssql.jdbc@12.8.1.jre8/com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:242)
at

打开这个配置管理器

把这个TCP/IP启动就好了

接着又遇到这个问题:com.microsoft.sqlserver.jdbc.SQLServerException: “Encrypt”属性设置为“true”且 “trustServerCertificate”属性设置为“false”,但驱动程序无法使用安全套接字层 (SSL) 加密与 SQL Server 建立安全连接:错误:PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target。 ClientConnectionId:235f4c8c-84dd-41c5-9e44-f39b34dca841
at mssql.jdbc@12.8.1.jre8/com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:4271)
at mssql.jdbc@12.8.1.jre8/com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1965)
at

private static final String URL = "jdbc:sqlserver://localhost:1433;databaseName=StudentDB_New;encrypt=false";

在引入URL时加上encrypt=false就解决问题了

INSERT 语句与 FOREIGN KEY 约束"FK__score__course_id__70DDC3D8"冲突。该冲突发生于数据库"StudentDB",表"dbo.course", column 'id'

新建了一个数据库与之前的StudentDB数据库分开,重新创建多张表并插入数据,最终解决问题

这个实验做完,通过实际操作,我对 SQL 语言有了更深入的理解,特别是在数据插入和查询方面。学习如何使用 INSERT、SELECT、DELETE 等基本 SQL 语句。在实验中,我意识到数据的完整性和一致性是非常重要的。在插入数据之前,我们需要确保没有重复的主键,这样才能避免违反约束条件。在实验过程中,我遇到了一些错误,比如主键冲突和 SQL 语法错误。通过仔细阅读错误信息和调试代码,翻阅网上资料,我学会了如何快速定位问题并进行修复。

  1. 源码附录

4.1

封装数据库连接代码:

package com.studentmanagement;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

public class DBUtil {

    private static final String URL = "jdbc:sqlserver://localhost:1433;databaseName=StudentDB;encrypt=false";

    private static final String USER = "sa"; // 替换为你的数据库用户名

    private static final String PASSWORD = "123456"; // 替换为你的数据库密码

    public static Connection getConnection() {

        Connection conn = null;

        try {

            conn = DriverManager.getConnection(URL, USER, PASSWORD);

        } catch (SQLException e) {

            e.printStackTrace();

        }

        return conn;

    }

    public static void closeConnection(Connection conn) {

        if (conn != null) {

            try {

                conn.close();

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

    }

}

数据库的增删改查封装成StudentDao方法

package com.studentmanagement;

import java.sql.*;

import java.util.ArrayList;

import java.util.List;

public class StudentDao {

    public int addStudent(Student student) {

        String sql = "INSERT INTO student (id, name, age, gender, photo) VALUES (?, ?, ?, ?, ?)";

        try (Connection conn = DBUtil.getConnection();

             PreparedStatement ps = conn.prepareStatement(sql)) {

            ps.setInt(1, student.getId());

            ps.setString(2, student.getName());

            ps.setInt(3, student.getAge());

            ps.setString(4, student.getGender());

            ps.setBytes(5, student.getPhoto());

            return ps.executeUpdate();

        } catch (SQLException e) {

            e.printStackTrace();

        }

        return 0;

    }

    public int deleteStudent(int id) {

        String sql = "DELETE FROM student WHERE id = ?";

        try (Connection conn = DBUtil.getConnection();

             PreparedStatement ps = conn.prepareStatement(sql)) {

            ps.setInt(1, id);

            return ps.executeUpdate();

        } catch (SQLException e) {

            e.printStackTrace();

        }

        return 0;

    }

    public int updateStudent(Student student) {

        String sql = "UPDATE student SET name = ?, age = ?, gender = ?, photo = ? WHERE id = ?";

        try (Connection conn = DBUtil.getConnection();

             PreparedStatement ps = conn.prepareStatement(sql)) {

            ps.setString(1, student.getName());

            ps.setInt(2, student.getAge());

            ps.setString(3, student.getGender());

            ps.setBytes(4, student.getPhoto());

            ps.setInt(5, student.getId());

            return ps.executeUpdate();

        } catch (SQLException e) {

            e.printStackTrace();

        }

        return 0;

    }

    public Student findStudentByIdAndNameAndAge(int id, String name, int age) {

        String sql = "SELECT * FROM student WHERE id = ? AND name = ? AND age = ?";

        try (Connection conn = DBUtil.getConnection();

             PreparedStatement ps = conn.prepareStatement(sql)) {

            ps.setInt(1, id);

            ps.setString(2, name);

            ps.setInt(3, age);

            try (ResultSet rs = ps.executeQuery()) {

                if (rs.next()) {

                    return new Student(rs.getInt("id"), rs.getString("name"),

                            rs.getInt("age"), rs.getString("gender"), rs.getBytes("photo"));

                }

            }

        } catch (SQLException e) {

            e.printStackTrace();

        }

        return null;

    }

    public List<Student> findAllStudents() {

        List<Student> students = new ArrayList<>();

        String sql = "SELECT * FROM student";

        try (Connection conn = DBUtil.getConnection();

             PreparedStatement ps = conn.prepareStatement(sql);

             ResultSet rs = ps.executeQuery()) {

            while (rs.next()) {

                students.add(new Student(rs.getInt("id"), rs.getString("name"),

                        rs.getInt("age"), rs.getString("gender"), rs.getBytes("photo")));

            }

        } catch (SQLException e) {

            e.printStackTrace();

        }

        return students;

    }

    public int saveStudentPhoto(int id, byte[] photo) {

        String sql = "UPDATE student SET photo = ? WHERE id = ?";

        try (Connection conn = DBUtil.getConnection();

             PreparedStatement ps = conn.prepareStatement(sql)) {

            ps.setBytes(1, photo);

            ps.setInt(2, id);

            return ps.executeUpdate();

        } catch (SQLException e) {

            e.printStackTrace();

        }

        return 0;

    }

    public byte[] getStudentPhoto(int id) {

        String sql = "SELECT photo FROM student WHERE id = ?";

        try (Connection conn = DBUtil.getConnection();

             PreparedStatement ps = conn.prepareStatement(sql)) {

            ps.setInt(1, id);

            try (ResultSet rs = ps.executeQuery()) {

                if (rs.next()) {

                    return rs.getBytes("photo");

                }

            }

        } catch (SQLException e) {

            e.printStackTrace();

        }

        return null;

    }

}

一个具体的student学生类,可以创建具体对象,并且有对应的图片信息

package com.studentmanagement;

public class Student {

    private int id;

    private String name;

    private int age;

    private String gender;

    private byte[] photo;

    public Student(int id, String name, int age, String gender, byte[] photo) {

        this.id = id;

        this.name = name;

        this.age = age;

        this.gender = gender;

        this.photo = photo;

    }

    // Getter 和 Setter 方法

    public int getId() {

        return id;

    }

    public void setId(int id) {

        this.id = id;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public int getAge() {

        return age;

    }

    public void setAge(int age) {

        this.age = age;

    }

    public String getGender() {

        return gender;

    }

    public void setGender(String gender) {

        this.gender = gender;

    }

    public byte[] getPhoto() {

        return photo;

    }

    public void setPhoto(byte[] photo) {

        this.photo = photo;

    }

}

图片信息的保存和读取:

package com.studentmanagement;

import java.nio.file.Files;

import java.nio.file.Paths;

import java.util.List;

import java.io.IOException;

import java.nio.file.Path;

public class Main {

    public static void main(String[] args) {

        StudentDao studentDao = new StudentDao();

        // 1. 添加学生

        byte[] photo1 = null; // 假设这是学生1的图片

        try {

            photo1 = Files.readAllBytes(Paths.get("src/6458.jpg_wh860.jpg")); // 读取 src 目录下的图片文件

        } catch (Exception e) {

            e.printStackTrace();

        }

        Student student1 = new Student(1, "Alice", 20, "Female", photo1);

        studentDao.addStudent(student1);

        // 2. 保存图片

        int savePhotoResult = studentDao.saveStudentPhoto(1, photo1);

        System.out.println("保存学生 Alice 的图片,结果:" + (savePhotoResult > 0 ? "成功" : "失败"));

        // 3. 读取图片

        byte[] retrievedPhoto = studentDao.getStudentPhoto(1);

        System.out.println("读取学生 Alice 的图片,结果:" + (retrievedPhoto != null ? "成功" : "失败"));

        // 确保目标目录存在

        Path outputPath = Paths.get("src/retrieved_photo.jpg");

        try {

            // 如果父目录不存在,创建它

            if (!Files.exists(outputPath.getParent())) {

                Files.createDirectories(outputPath.getParent());

            }

            Files.write(outputPath, retrievedPhoto); // 保存到 src 目录

            System.out.println("已将读取的图片保存为 retrieved_photo.jpg");

        } catch (IOException e) {

            e.printStackTrace();

        }

        // 4. 查询所有学生信息

        List<Student> allStudents = studentDao.findAllStudents();

        System.out.println("当前所有学生:");

        for (Student student : allStudents) {

            System.out.println("学生 ID: " + student.getId() + ", 姓名: " + student.getName());

        }

    }

}

对于学生的增删查改:

package com.studentmanagement;

import java.nio.file.Files;

import java.nio.file.Paths;

import java.util.List;

public class Main {

public static void main(String[] args) {

        StudentDao studentDao = new StudentDao();

        // 1. 添加学生

        byte[] photo1 = null; // 假设这是学生1的图片

        try {

            photo1 = Files.readAllBytes(Paths.get("src/6458.jpg_wh860.jpg")); // 读取图片文件

        } catch (Exception e) {

            e.printStackTrace();

        }

        Student student1 = new Student(1, "Alice", 20, "Female", photo1);

        studentDao.addStudent(student1);

        // 2. 保存图片

        int savePhotoResult = studentDao.saveStudentPhoto(1, photo1);

        System.out.println("保存学生 Alice 的图片,结果:" + (savePhotoResult > 0 ? "成功" : "失败"));

        // 3. 读取图片

        byte[] retrievedPhoto = studentDao.getStudentPhoto(1);

        System.out.println("读取学生 Alice 的图片,结果:" + (retrievedPhoto != null ? "成功" : "失败"));

        // 可以将 retrievedPhoto 写入文件进行查看

        try {

            Files.write(Paths.get("path/to/retrieved_photo.jpg"), retrievedPhoto); // 保存到文件

            System.out.println("已将读取的图片保存为 retrieved_photo.jpg");

        } catch (Exception e) {

            e.printStackTrace();

        }

        // 4. 查询所有学生信息

        List<Student> allStudents = studentDao.findAllStudents();

        System.out.println("当前所有学生:");

        for (Student student : allStudents) {

            System.out.println("学生 ID: " + student.getId() + ", 姓名: " + student.getName());

        }

    }

}

4.3CourseSelectionDao的实现

Main测试函数

package com.studentmanagement;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

public class Main {

    public static void main(String[] args) {

        String url = "jdbc:sqlserver://localhost:1433;databaseName=StudentDB_New;encrypt=false;user=sa;password=123456";

        

        try (Connection conn = DriverManager.getConnection(url)) {

            // 清理现有数据

            String deleteScoreSQL = "DELETE FROM score";

            String deleteCourseSQL = "DELETE FROM course";

            String deleteStudentSQL = "DELETE FROM student";

            try (PreparedStatement pstmt = conn.prepareStatement(deleteScoreSQL)) {

                pstmt.executeUpdate();

            }

            try (PreparedStatement pstmt = conn.prepareStatement(deleteCourseSQL)) {

                pstmt.executeUpdate();

            }

            try (PreparedStatement pstmt = conn.prepareStatement(deleteStudentSQL)) {

                pstmt.executeUpdate();

            }

            // 插入学生数据

            String insertStudentSQL = "INSERT INTO student (id, name, age, gender) VALUES (?, ?, ?, ?)";

            try (PreparedStatement pstmt = conn.prepareStatement(insertStudentSQL)) {

                pstmt.setInt(1, 1);

                pstmt.setString(2, "Alice");

                pstmt.setInt(3, 20);

                pstmt.setString(4, "Female");

                pstmt.executeUpdate();

                pstmt.setInt(1, 2);

                pstmt.setString(2, "Bob");

                pstmt.setInt(3, 22);

                pstmt.setString(4, "Male");

                pstmt.executeUpdate();

            }

            // 插入课程数据

            String insertCourseSQL = "INSERT INTO course (id, name, credits) VALUES (?, ?, ?)";

            try (PreparedStatement pstmt = conn.prepareStatement(insertCourseSQL)) {

                pstmt.setInt(1, 101);

                pstmt.setString(2, "Mathematics");

                pstmt.setInt(3, 3);

                pstmt.executeUpdate();

                pstmt.setInt(1, 102);

                pstmt.setString(2, "Physics");

                pstmt.setInt(3, 4);

                pstmt.executeUpdate();

            }

            // 插入成绩数据

            String insertScoreSQL = "INSERT INTO score (student_id, course_id) VALUES (?, ?)";

            try (PreparedStatement pstmt = conn.prepareStatement(insertScoreSQL)) {

                pstmt.setInt(1, 1); // Alice

                pstmt.setInt(2, 101); // Mathematics

                pstmt.executeUpdate();

                pstmt.setInt(1, 2); // Bob

                pstmt.setInt(2, 102); // Physics

                pstmt.executeUpdate();

            }

            System.out.println("数据插入成功!");

            // 查询并展示学生数据

            System.out.println("学生数据:");

            String selectStudentSQL = "SELECT * FROM student";

            try (PreparedStatement pstmt = conn.prepareStatement(selectStudentSQL);

                 ResultSet rs = pstmt.executeQuery()) {

                while (rs.next()) {

                    int id = rs.getInt("id");

                    String name = rs.getString("name");

                    int age = rs.getInt("age");

                    String gender = rs.getString("gender");

                    System.out.printf("ID: %d, Name: %s, Age: %d, Gender: %s%n", id, name, age, gender);

                }

            }

            // 查询并展示课程数据

            System.out.println("课程数据:");

            String selectCourseSQL = "SELECT * FROM course";

            try (PreparedStatement pstmt = conn.prepareStatement(selectCourseSQL);

                 ResultSet rs = pstmt.executeQuery()) {

                while (rs.next()) {

                    int id = rs.getInt("id");

                    String name = rs.getString("name");

                    int credits = rs.getInt("credits");

                    System.out.printf("ID: %d, Name: %s, Credits: %d%n", id, name, credits);

                }

            }

            // 查询并展示成绩数据

            System.out.println("成绩数据:");

            String selectScoreSQL = "SELECT * FROM score";

            try (PreparedStatement pstmt = conn.prepareStatement(selectScoreSQL);

                 ResultSet rs = pstmt.executeQuery()) {

                while (rs.next()) {

                    int studentId = rs.getInt("student_id");

                    int courseId = rs.getInt("course_id");

                    System.out.printf("Student ID: %d, Course ID: %d%n", studentId, courseId);

                }

            }

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

}

定义一个course类

package com.studentmanagement;

public class Course {

    private int id;

    private String name;

    private int credits;

    public Course(int id, String name, int credits) {

        this.id = id;

        this.name = name;

        this.credits = credits;

    }

    // Getter 和 Setter 方法

    public int getId() {

        return id;

    }

    public void setId(int id) {

        this.id = id;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public int getCredits() {

        return credits;

    }

    public void setCredits(int credits) {

        this.credits = credits;

    }

}

核心CourseSelectionDao.java

package com.studentmanagement;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.SQLException;

import java.util.List;

public class CourseSelectionDao {

    // 保存单个学生选一门课程

    public int save(Student student, Course course) {

        String sql = "INSERT INTO score (student_id, course_id) VALUES (?, ?)";

        try (Connection conn = DBUtil.getConnection();

             PreparedStatement ps = conn.prepareStatement(sql)) {

            ps.setInt(1, student.getId());

            ps.setInt(2, course.getId());

            return ps.executeUpdate();

        } catch (SQLException e) {

            e.printStackTrace();

        }

        return 0;

    }

    // 保存单个学生选多门课程

    public int save(Student student, List<Course> courses) {

        int totalRows = 0;

        for (Course course : courses) {

            totalRows += save(student, course); // 调用上面的save方法

        }

        return totalRows;

    }

    // 保存多个学生选同一门课程

    public int save(List<Student> students, Course course) {

        int totalRows = 0;

        for (Student student : students) {

            totalRows += save(student, course); // 调用上面的save方法

        }

        return totalRows;

    }

}

数据库连接代码封装在类里面

package com.studentmanagement;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

public class DBUtil {

    private static final String URL = "jdbc:sqlserver://localhost:1433;databaseName=StudentDB_New;encrypt=false";

    private static final String USER = "sa"; // 替换为你的数据库用户名

    private static final String PASSWORD = "123456"; // 替换为你的数据库密码

    public static Connection getConnection() {

        Connection conn = null;

        try {

            conn = DriverManager.getConnection(URL, USER, PASSWORD);

        } catch (SQLException e) {

            e.printStackTrace();

        }

        return conn;

    }

    public static void closeConnection(Connection conn) {

        if (conn != null) {

            try {

                conn.close();

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

    }

}

学生student类的创建:

package com.studentmanagement;

public class Student {

    private int id;

    private String name;

    private int age;

    private String gender;

    private byte[] photo;

    public Student(int id, String name, int age, String gender, byte[] photo) {

        this.id = id;

        this.name = name;

        this.age = age;

        this.gender = gender;

        this.photo = photo;

    }

    // Getter 和 Setter 方法

    public int getId() {

        return id;

    }

    public void setId(int id) {

        this.id = id;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public int getAge() {

        return age;

    }

    public void setAge(int age) {

        this.age = age;

    }

    public String getGender() {

        return gender;

    }

    public void setGender(String gender) {

        this.gender = gender;

    }

    public byte[] getPhoto() {

        return photo;

    }

    public void setPhoto(byte[] photo) {

        this.photo = photo;

    }

}

相关文章:

实验三 JDBC数据库操作编程(设计性)

实验三 JDBC数据库操作编程&#xff08;设计性&#xff09; 实验目的 掌握JDBC的数据库编程方法。掌握采用JDBC完成数据库链接、增删改查&#xff0c;以及操作封装的综合应用。实验要求 本实验要求每个同学单独完成&#xff1b;调试程序要记录调试过程中出现的问题及解决办法…...

各种环境换源教程

目录 pip 换源相关命令永久换源1. 命令行换源2. 配置文件换源 临时换源使用官方源使用镜像源 报错参考 npm换源相关命令永久换源1. 命令行换源2. 配置文件换源 pip 换源 相关命令 更新 pip 本身 首先&#xff0c;为了确保你使用的是最新版本的 pip&#xff0c;可以通过以下命…...

Rust项目中的Labels

姊妹篇: Go项目中的Labels 按照issue数量从多到少排序: https://github.com/rust-lang/rust/labels?page2&sortcount-desc https://github.com/rust-lang/rust/labels/A-contributor-roadblock 第1页: 标签/中文说明数字T-compiler/编译器Relevant to the compiler tea…...

Jmeter的安装和使用

使用场景&#xff1a; 我们需要对某个接口进行压力测试&#xff0c;在多线程环境下&#xff0c;服务的抗压能力&#xff1b;还有就是关于分布式开发需要测试多线程环境下数据的唯一性。 解决方案: jmeter官网连接&#xff1a;Apache JMeter - Apache JMeter™ 下载安装包 配…...

初识Electron 进程通信

概述 Electron chromium nodejs native API&#xff0c;也就是将node环境和浏览器环境整合到了一起&#xff0c;这样就构成了桌面端&#xff08;chromium负责渲染、node负责操作系统API等&#xff09; 流程模型 预加载脚本&#xff1a;运行在浏览器环境下&#xff0c;但是…...

go语言中的通道(channel)详解

在 Go 语言中&#xff0c;通道&#xff08;channel&#xff09; 是一种用于在 goroutine&#xff08;协程&#xff09;之间传递数据的管道。通道具有类型安全性&#xff0c;即它只能传递一种指定类型的数据。通道是 Go 并发编程的重要特性&#xff0c;能够让多个 goroutine 之间…...

【JS】内置类型的相关问题

我是目录 引言内置类型undefined与nullnull和undefined的区别字符串转换为字符串数字0.1+0.2不等于0.3NaNBigInt大数相加问题原生函数(封箱与解封)判断类型的方法typeofinstanceofObject.prototype.toString.callconstructor类型转换toStringtoNumbertoBoolean显式强制类型转…...

Mac上无法访问usr/local的文件

sudo chmod 755 /usr/loca 最后用百度提供的方法解决了...

http 常见状态码

1xx 信息&#xff0c;表示临时响应并需要请求者继续执行操作 2xx 成功&#xff0c;操作被成功接收并处理 3xx 表示要完成请求&#xff0c;需要进一步操作。通常&#xff0c;这些状态码用来重定向 4xx 客户端错误&#xff0c;请求包含语法错误或无法完成请求 5xx 服务…...

代码训练营 day59|并查集

前言 这里记录一下陈菜菜的刷题记录&#xff0c;主要应对25秋招、春招 个人背景 211CS本CUHK计算机相关硕&#xff0c;一年车企软件开发经验 代码能力&#xff1a;有待提高 常用语言&#xff1a;C 系列文章目录 第59天 &#xff1a;第十一章&#xff1a;图论part05 文章目录…...

Node.js——fs模块-路径补充说明

1、相对路径&#xff1a; ./座右铭.txt 当前目录下的座右铭.txt座右铭.txt 等效于上面的写法../座右铭.txt 当前目录的上一级目录中的座右铭.txt 2、绝对路径 D&#xff1a;/Program File Windows系统下的绝对路径/usr/bin Linux系统…...

华为ENSP--ISIS路由协议

项目背景 为了确保资源共享、办公自动化和节省人力成本&#xff0c;公司E申请两条专线将深圳总部和广州、北京两家分公司网络连接起来。公司原来运行OSFP路由协议&#xff0c;现打算迁移到IS-IS路由协议&#xff0c;张同学正在该公司实习&#xff0c;为了提高实际工作的准确性和…...

论软件可靠性设计及其应用

摘要 2023 年 3 月&#xff0c;我所在的公司承接了某智慧加油站平台的建设工作。该项目旨在帮助加油站提升运营效率、降低运营成本和提高销售额。我在该项目中担任系统架构设计师&#xff0c;负责整个项目的架构设计工作。 本文结合我在该项目中的实践&#xff0c;详细论述了…...

Android中桌面小部件framework层使用到的设计模式

在Android中&#xff0c;桌面小部件&#xff08;App Widget&#xff09;的Framework层采用了多种设计模式&#xff0c;以实现模块化、可维护性和高效的交互。 以下是Android桌面小部件Framework层中常用的设计模式及其具体应用&#xff1a; 1. 观察者模式&#xff08;Observe…...

【JavaEE进阶】HTML

本节⽬标 认识 HTML 的基本结构, 学习常⽤的 HTML 标签. 一 HTML基础 1.什么是HTML HTML(Hyper Text Markup Language), 超⽂本标记语⾔. 超⽂本: ⽐⽂本要强⼤. 通过链接和交互式⽅式来组织和呈现信息的⽂本形式. 不仅仅有⽂本, 还可能包含图⽚, ⾳频, 或者⾃已经审阅过它…...

ElasticSearch 添加IK分词器

ElasticSearch 添加IK分词器 前言一、IK分词器的算法二、Ik分词器的下载安装&#xff08;Winows 版本&#xff09;三、Ik分词器的下载安装&#xff08;Linux 版本&#xff09;四、验证测试&#xff08;postman工具&#xff09;测试 ik_smart 分词算法测试 ik_max_word 分词算法…...

可视化建模与UML《顺序图实验报告》

旷野的规则是永不回头。 一、实验目的&#xff1a; 1、熟悉顺序图的构件事物。 2、熟悉发送者与接受者的关系 3、熟练掌握描绘顺序图 4、加深对顺序图的理解和应用能力 二、实验环境&#xff1a; window7 | 10 | 11 EA15 三、实验内容&#xff1a; 据如下描述绘制顺序图&…...

Mac的极速文件搜索工具,高效管理文件

Mac的资源管理可以说是许多转Mac的朋友用不明白的一点了&#xff0c;访达怎么用&#xff0c;文件怎么找&#xff0c;为什么找不到&#xff0c;非常的头大 All作为Mac上的极速文件搜索管理工具&#xff0c;有效的为文件查找困难的用户解决难题 基于极速搜索引擎&#xff0c;快…...

公开仓库改私有再配置公钥后Git拉取仍需要输入用户名的问题

问题描述&#xff1a;git拉取私有仓库需要输入用户名和密码 我之前写了一个脚本用来定时自动拉取远程仓库更新本地仓库&#xff0c;后来将这个远程仓库改成私有后执行脚本就会需要输入用户名和密码。 [rootLH2020 ~]# ./sync_repo.sh 正在从远程仓库拉取最新更改… Username f…...

工作流初始错误 泛微提交流程提示_泛微协同办公平台E-cology8.0版本后台维护手册(11)–系统参数设置

工作流初始错误 泛微提交流程提示_泛微协同办公平台E-cology8.0版本后台维护手册(11)–系统参数设置...-CSDN博客 工作流初始错误 泛微提交流程提示_泛微OA 工作流WebService接口使用说明 工作流初始错误 泛微提交流程提示_泛微OA 工作流WebService接口使用说明-CSDN博客 工作…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

6.9本日总结

一、英语 复习默写list11list18&#xff0c;订正07年第3篇阅读 二、数学 学习线代第一讲&#xff0c;写15讲课后题 三、408 学习计组第二章&#xff0c;写计组习题 四、总结 明天结束线代第一章和计组第二章 五、明日计划 英语&#xff1a;复习l默写sit12list17&#…...

华为云Flexus+DeepSeek征文 | 基于Dify构建具备联网搜索能力的知识库问答助手

华为云FlexusDeepSeek征文 | 基于Dify构建具备联网搜索能力的知识库问答助手 一、构建知识库问答助手引言二、构建知识库问答助手环境2.1 基于FlexusX实例的Dify平台2.2 基于MaaS的模型API商用服务 三、构建知识库问答助手实战3.1 配置Dify环境3.2 创建知识库问答助手3.3 使用知…...

LINUX编译vlc

下载 VideoLAN / VLC GitLab 选择最新的发布版本 准备 sudo apt install -y xcb bison sudo apt install -y autopoint sudo apt install -y autoconf automake libtool编译ffmpeg LINUX FFMPEG编译汇总&#xff08;最简化&#xff09;_底部的附件列表中】: ffmpeg - lzip…...