数据库实验报告【表数据的插入、修改和删除】

一、 实验目的及实验环境
(1) 掌握使用T-SQL语句和企业管理器对数据表进行插入数据操作
(2) 掌握使用T-SQL语句和企业管理器对数据表进行修改数据操作
(3) 掌握使用T-SQL语句和企业管理器对数据表进行删除数据操作
(4) 体会数据完整性约束的作用,加深对数据完整性及其约束的理解
通过本实验,要熟练掌握INSERT、UPDATE、DELETE语句的语法和使用方法

二、 实验内容及结果
-本次实验基于实验1所建的数据库和实验2所建的各表

在这里插入图片描述
使用T-SQL语句向数据库中的表输入一些(如10条)记录
在实验二里建立的Student表中有学生的学号、姓名、性别、年龄、电话号码以及其所在系(其中电话号码可以为空),基本语句格式为INSERT INTO<表名> VALUES(‘…’);
在这里插入图片描述

理解系统是如何保证完整性的?在这里插入其中任何一条记录,若其中某一个属性出现漏输入,或者是定义与原表定义大小形式有偏差,则在执行该程序时会报错。
注意:与需要插入的表要一一对应,若在此条记录中无所需要插入的数据且对应表允许NULL值,需要在VALUE语句对应位置写上NULL。
查看插入数据后表所含的所有数据
在资源管理器选择表,单击右键,点击选择前1000行,即可查看刚插入的一行记录。
在这里插入图片描述

使用企业管理器向数据库中的表输入一些(如10条)记录
若使用资源管理器插入一条记录,(这个前提是我们所需要插入的记录条数并不是特别多),在资源管理器中选择所需要插入记录的表格,单击右键,点击编辑前200行,插入记录对应数据即可。
在这里插入图片描述

理解系统是如何保证完整性的?在这里需要一行一行得把该行所有属性都填写完毕才能继续录入下一行信息。如上图,在我刚输入完980015后,我直接跳到下一行输入另外一个学生的信息,则会弹出窗口告知我无法执行此类操作,必须将上一个学号为“980015”的信息填写完毕才能填写下一行。

【使用上述两种语句共插入10条记录后结果如下】
在这里插入图片描述

使用T-SQL语句修改数据库中表的某些数据
① 对Student表修改,假定到了新的学期,我们需要将所有学生年龄加1。TSQL语句如下:
在这里插入图片描述

【基于上述Student表,执行上图语句后表中显示如下】
在这里插入图片描述

② 对SC表进行修改,在这里我们将所有计算机系的学生成绩置为0。TSQL语句如下:
在这里插入图片描述
【基于SC表,执行上图语句后表中显示如下】
在这里插入图片描述

在这里可能会发现只有前两行的学生的成绩置为了0,后面并未置为0,这实际上是我们要求将所有计算机系学生成绩置为0,而计算机系这一系别的属性需要从Student表中查找确认该学生是否为“CS”。在这里列出980012学号到980013到980016学生分别所在系别。
在这里插入图片描述

这就是为什么只有980012和980013学号的学生成绩被置为0而其他学生并未置0的原因了。

使用T-SQL语句删除数据库中表的某些数据
① 在这里我删除了所有选择02号课程的学生选课记录。即删除所有Cno=02的学生的记录,TSQL语句如下:
在这里插入图片描述

【基于上述定义好的SC表,执行上述语句后结果如下】
在这里插入图片描述

② 删除了所有计算机系学生选课成绩,这一步操作基于上一步操作之上。TSQL语句如下:
在这里插入图片描述

【基于上述定义好的Student表,通过找到所在系为CS的学生可以进行校验。执行上述语句后结果如下】

在这里插入图片描述

三、 非正常运行结果及原因
① 单纯按照书上的语句编写时候,一开始我理解的是电话号码可以为空则不需要填写任何东西,但执行了多次发现还是下图这个结果。询问老师后,发现即使所需要填写的属性为空,仍要填写NULL表示此属性为空。否则就与定义相违背了。
在这里插入图片描述

② 在修改数据时,所有学生年龄加1的操作时,一开始只是单纯按照书上的语句编写,则在还没执行时就出现红色波浪线。
在这里插入图片描述

这里出现的错误是,我们的Student表中对年龄的定义是Age而非Sage,若对Sage更改程序无法找到对应列,一定要根据定义表的年龄列名进行操作更改。

四、 对设计及调试过程的心得体会
在编写TSQL语句时,报错的情况我觉得和Python语句报错的这个逻辑是很相似的,但各自又有不同。在学习数据库时候,会更加通俗易懂一些,而之所以出错,通过仔细琢磨也可以琢磨出来,并能说出来为什么,这给了我很大的信心,以后的学习当中我将更加认真仔细,并要究其根本,明白为什么这么操作这才是良好的学习方法。

<think>嗯,用户遇到了ROS2中mipi_cam节点因为rclcpp异常导致进程崩溃的问题,具体错误是“could not create publisher context invalid”。我需要分析可能的原因并提供解决方案。 首先,根据引用[1],rclcpp的依赖管理很重要。用户可能没有正确声明依赖项,或者在CMakeLists.txt中没有正确添加ament_target_dependencies。需要检查CMakeLists.txt是否包含find_package(rclcpp REQUIRED)和ament_target_dependencies中的rclcpp。 然后,引用[3]提到创建发布者需要相关的头文件和命名空间。用户代码中可能没有正确包含头文件,比如#include <rclcpp/rclcpp.hpp>,或者命名空间使用不正确,导致无法创建发布者上下文。需要确保代码中的包含和命名空间正确。 另外,发布者的创建参数可能有问题。引用[3]还指出发布者需要正确的节点接口、QoS设置等。如果创建发布者时参数无效,比如QoS配置错误或主题名称无效,也可能导致该错误。需要检查发布者的创建代码,确保参数正确。 节点生命周期管理也是一个因素。如果节点没有正确初始化或已经被销毁,尝试创建发布者时会失败。需要确保节点实例有效,并且在创建发布者之前已经初始化。 还有ROS2环境配置问题。例如,工作空间没有正确编译或source,或者rclcpp版本不兼容。用户需要重新编译工作空间,并确认安装的ROS2版本和rclcpp是否匹配。 最后,建议用户查看详细的错误日志,使用RCLCPP_DEBUG环境变量或检查日志文件,以获取更具体的错误信息。同时,参考ROS2官方文档和社区资源,比如引用[2]和引用[3][^4]中的相关内容,可能有助于找到解决方案。</think>### 解决ROS2 mipi_cam节点rclcpp RCLError问题的方法 #### 1. **检查节点初始化逻辑** - **问题根源**:`could not create publisher context invalid`通常与节点未正确初始化或资源分配失败有关。根据引用[3],发布者的创建依赖于有效的节点上下文和QoS配置。 - **解决步骤**: 1. 确认节点构造函数中已正确初始化`rclcpp::Node`: ```cpp class MipiCamNode : public rclcpp::Node { public: MipiCamNode() : Node("mipi_cam") { // 初始化发布者和其他组件 } }; ``` 2. 确保使用`std::make_shared`创建节点共享指针: ```cpp int main(int argc, char** argv) { rclcpp::init(argc, argv); auto node = std::make_shared<MipiCamNode>(); rclcpp::spin(node); rclcpp::shutdown(); return 0; } ``` #### 2. **验证发布者创建参数** - **问题根源**:发布者参数(如QoS配置或主题名称)无效会导致上下文创建失败[^3]。 - **解决步骤**: 1. 检查发布者创建代码,确保主题名称符合ROS2命名规范(例如无空格): ```cpp auto publisher = this->create_publisher<sensor_msgs::msg::Image>( "camera/image_raw", // 主题名称 rclcpp::SensorDataQoS() // 使用传感器数据QoS配置 ); ``` 2. 避免在构造函数外延迟初始化发布者(需在节点生命周期早期完成)。 #### 3. **检查依赖管理与编译配置** - **问题根源**:CMake配置错误可能导致`rclcpp`库未正确链接[^1]。 - **解决步骤**: 1. 在`CMakeLists.txt`中添加必要的依赖项: ```cmake find_package(rclcpp REQUIRED) find_package(sensor_msgs REQUIRED) add_executable(mipi_cam_node src/mipi_cam_node.cpp) ament_target_dependencies(mipi_cam_node rclcpp sensor_msgs) ``` 2. 重新编译并更新环境变量: ```bash colcon build --packages-select your_package source install/setup.bash ``` #### 4. **调试上下文失效场景** - **问题根源**:节点被意外销毁或多次初始化可能导致上下文失效。 - **解决步骤**: 1. 使用`RCLCPP_DEBUG`输出调试信息: ```cpp RCLCPP_DEBUG(this->get_logger(), "Creating publisher..."); ``` 2. 检查是否存在多个节点实例或重复调用`rclcpp::init`/`shutdown`。 #### 5. **验证ROS2环境与版本兼容性** - **问题根源**:ROS2版本与`mipi_cam`驱动不兼容可能导致底层API冲突。 - **解决步骤**: 1. 确认ROS2版本(如Humble或Iron)与`mipi_cam`代码适配性。 2. 更新所有相关软件包: ```bash sudo apt update && sudo apt upgrade ros-$ROS_DISTRO-* ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值