优质高等职业院校建设申报网站/打开百度网址
实验三 JDBC数据库操作编程(设计性)
- 实验目的
- 掌握JDBC的数据库编程方法。
- 掌握采用JDBC完成数据库链接、增删改查,以及操作封装的综合应用。
- 实验要求
- 本实验要求每个同学单独完成;
- 调试程序要记录调试过程中出现的问题及解决办法,并写入到实验总结和心得;
- 完成实验后直接在题目后面按要求给出本实验的实验报告。
- 实验设备、环境
奔腾以上计算机,装有Myeclipse 6.0以上。
- 实验内容
- 用JDBC完成数据操作层的封装,具体要求如下:
-
- 封装数据库连接
- 把数据库的增删改查封装成方法
- 完成一个基于自己实现方法的数据库带参数查询实例,要求查询参数不得少于3个,同时返回类型必须为一个具体的对象类型
- 查询所有信息,封装返回具体列表对象
- 自己建立数据库
- 图片信息的直接保存和读取。
根据以上要求,设计一个学生管理系统的数据库操作层StudentDao,系统可以有学生表student。
把程序运行界面截图贴在这里,源码贴到附录部分:
-
- 使用4.1完成的StudentDao,完成学生管理系统的增、删、改、查的场景。(可以用System.out.print在MyEclipse的 Console完成)
把程序运行界面截图贴在这里,源码贴到附录部分:
- 设计一个学生选课系统的数据库操作层CourseSelectionDao,系统可以有学生表student、课程表course和成绩表score,可以实现:
- save(Student s, Course c); //一个学生选了一门课程
- save(Student s, List<Course> courses); //一个学生选了多门课程
- save(List<Student> students, Course c);//多个学生都选了同一门课程
把程序运行界面截图贴在这里,源码贴到附录部分:
- 实验总结与心得(请详细叙述你通过该实验掌握的知识点和心得,比如对错误的解决办法等)
在实验过程中遇到了连接不到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 语法错误。通过仔细阅读错误信息和调试代码,翻阅网上资料,我学会了如何快速定位问题并进行修复。
- 源码附录
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数据库操作编程(设计性) 实验目的 掌握JDBC的数据库编程方法。掌握采用JDBC完成数据库链接、增删改查,以及操作封装的综合应用。实验要求 本实验要求每个同学单独完成;调试程序要记录调试过程中出现的问题及解决办法…...

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

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

初识Electron 进程通信
概述 Electron chromium nodejs native API,也就是将node环境和浏览器环境整合到了一起,这样就构成了桌面端(chromium负责渲染、node负责操作系统API等) 流程模型 预加载脚本:运行在浏览器环境下,但是…...

go语言中的通道(channel)详解
在 Go 语言中,通道(channel) 是一种用于在 goroutine(协程)之间传递数据的管道。通道具有类型安全性,即它只能传递一种指定类型的数据。通道是 Go 并发编程的重要特性,能够让多个 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 信息,表示临时响应并需要请求者继续执行操作 2xx 成功,操作被成功接收并处理 3xx 表示要完成请求,需要进一步操作。通常,这些状态码用来重定向 4xx 客户端错误,请求包含语法错误或无法完成请求 5xx 服务…...

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

Node.js——fs模块-路径补充说明
1、相对路径: ./座右铭.txt 当前目录下的座右铭.txt座右铭.txt 等效于上面的写法../座右铭.txt 当前目录的上一级目录中的座右铭.txt 2、绝对路径 D:/Program File Windows系统下的绝对路径/usr/bin Linux系统…...

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

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

Android中桌面小部件framework层使用到的设计模式
在Android中,桌面小部件(App Widget)的Framework层采用了多种设计模式,以实现模块化、可维护性和高效的交互。 以下是Android桌面小部件Framework层中常用的设计模式及其具体应用: 1. 观察者模式(Observe…...

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

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

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

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

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

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

window下安装rust 及 vscode配置
安装 安装mingw64 (c语言环境 选择posix-ucrt) ucrt:通用c运行时库配置mingw64/bin的路径到环境变量中在cmd窗口中输入命令 "gcc -v" 4. 下载Rust安装程序 安装 Rust - Rust 程序设计语言 5. 配置rustup和cargo目录 (cargo是包管…...

【数据结构】【线性表】单链表1—概念即创建(附C语言源码)
单链表的定义, 链表用链式存储的方式实现线性表,链表中每个结点元素中需要指向下一个结点的指针(有时候也要指向上一个结点的指针),链表中的每个结点指针只指向下一结点的被叫为单链表。 单链表的创建和初始化 先定…...

centos7的maven配置
首先进入conf配置文件夹下的setting.xml 要改两个地方 第一:设置镜像源 <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>https://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>c…...

day57 图论章节刷题Part08(拓扑排序、dijkstra(朴素版))
拓扑排序-117. 软件构建 思路:拓扑排序是经典的图论问题。给出一个有向图,把有向图转成线性的排序就叫拓扑排序,拓扑排序也要检测有向图是否有环,即存在循环依赖的情况,因为这种情况是不能做线性排序的,所…...

【Steam登录】protobuf协议逆向
https://api.steampowered.com/IAuthenticationService/GetPasswordRSAPublicKey/v1 搜索 input_protobuf_encoded定位 input_protobuf_encoded的值就是 o s r.SerializeBody() o i.iI(s) 精准定位 打上条件断点:t ‘Authentication.GetPasswordRSAPublicKey…...

git 对已提交的说明进行编辑
如果提交代码的时候,对上次提交代码的说明不准确的话,例如 1、可以使用 git log 查看代码提交的记录; 2、使用 git commit --amend 命令对上次提交的说明进行编辑: 当显示上次提交的内容的时候,按下键盘 i 键即可编辑…...

CTF —— 网络安全大赛
前言 💻随着大数据、人工智能的发展,人们步入了新的时代,逐渐走上科技的巅峰。 ⚔科技是一把双刃剑,网络安全不容忽视,人们的隐私在大数据面前暴露无遗,账户被盗、资金损失、网络诈骗、隐私泄露ÿ…...

【大数据测试spark+kafka-详细教程(附带实例)】
大数据测试:Spark Kafka 实时数据处理与窗口计算教程 1. 概述1.1 大数据技术概述1.2 Apache Kafka 与 Spark 的结合 2. 技术原理与流程2.1 Kafka 简介2.2 Spark Streaming 简介2.3 数据流动与处理流程 3. 环境配置3.1 安装依赖项 4. 实例:实时数据处理与…...

如何为 GitHub 和 Gitee 项目配置不同的 Git 用户信息20241105
🎯 如何为 GitHub 和 Gitee 项目配置不同的 Git 用户信息 引言 在多个代码托管平台(如 GitHub 和 Gitee)之间切换时,正确管理用户信息至关重要。频繁使用不同项目时,若用户配置不当,可能会导致意外提交或…...

【Lucene】原理学习路线
基于《Lucene原理与代码分析完整版》,借助chatgpt等大模型,制定了一个系统学习Lucene原理的计划,并将每个阶段的学习内容组织成专栏文章,zero2hero 手搓 Lucene的核心概念和实现细节。 深入的学习和专栏计划,覆盖Lucen…...