使用 SqlDataSource 插入、更新和删除数据49

简介

正如在 数据插入、更新和删除概述 中讨论的那样,GridView 控件提供内置的更新和删除功能,而DetailsView 和 FormView 控件则包含对插入、编辑和删除功能的支持。这些数据修改功能无需编写任何代码,可直接嵌入数据源控件。 数据插入、更新和删除概述 中探讨了如何使用 ObjectDataSource 通过 GridView 、DetailsView 和 FormView 控件完成插入、更新和删除功能。或者,可使用SqlDataSource 代替 ObjectDataSource 。

回想一下,要使 ObjectDataSource 支持插入、更新和删除功能,我们需要指定完成插入、更新和删除操作调用的目标层方法。使用SqlDataSource ,我们需要提供要执行的 INSERT 、UPDATE 、 和DELETE SQL 语句(或存储过程)。正如我们将在本教程中所看到的,这些语句可手动创建,也可以由 SqlDataSource 的 Configure Data Source 向导自动生成。

注意:由于我们已经讨论了 GridView 、DetailsView 和 FormView 控件的插入、编辑和删除功能,本教程将更多的关注配置 SqlDataSource 控件来支持这些操作。如果您需要温习在GridView 、DetailsView 和 FormView 内的这些功能,请返回编辑、插入和删除数据教程,首先从 数据插入、更新和删除概述 开始。

步骤1 :指定 INSERT 、UPDATE 和 DELETE 语句

正如我们在前面两个教程中所看到的,要想从SqlDataSource 控件检索数据,我们需要设置两个属性 :

  1. ConnectionString ,用于指定向哪个数据库发送查询。
  2. SelectCommand ,用于指定返回结果需要执行的 ad-hoc SQL 语句或者存储过程名称。

对于带参数的SelectCommand 值来说,参数值可通过SqlDataSource 的 SelectParameters 集合指定,可包含固定赋值、公用参数源值(查询字符串字段、会话变量、Web 控件值等),或者通过编码分配。调用 SqlDataSource 控件的 Select() 方法时(既可以通过编码调用,也可以从 Web 数据控件自动调用),将建立连接到数据库的连接,将参数值分配给查询,并且将命令转到数据库。根据控件的DataSourceMode 属性值,结果随后可能作为 DataSet 返回,也可能作为 DataReader 返回。

SqlDataSource 控件不仅可以选择数据,还可以采用完全相同的方式,通过支持INSERT 、UPDATE 和 DELETE SQL 语句用于插入、更新和删除数据。只需分配要执行的INSERT 、UPDATE 和 DELETE SQL 语句的 InsertCommand 、 UpdateCommand 和DeleteCommand 属性。如果语句带有参数(它们中大大多数均带有参数),请将它们包含到 InsertParameters 、UpdateParameters 和 DeleteParameters 集合中。

一旦指定了InsertCommand 、UpdateCommand 或DeleteCommand 值,相应的 Web 数据 控件的智能标记中的 “Enable Inserting” 、“Enable Editing” 或者 “Enable Deleting” 将变为可用选项。为了说明这一点,我们需要从 Querying.aspx 页面中举一个在 使用 SqlDataSource 控件查询数据 教程中创建的例子,并将其扩充为包含删除能力。

首先,从SqlDataSource 文件夹中打开 InsertUpdateDelete.aspx 页面和Querying.aspx 页面。在 Querying.aspx 页面的设计器上,从 第一个示例中选择 SqlDataSource 和 GridView(ProductsDataSource 和 GridView1 控件)。选择两个控件之后,转到 Edit 菜单,并选择 Copy (或者按下 Ctrl+C )。接下来,转到InsertUpdateDelete.aspx 页面上的设计器,并粘贴到控件中。在将两个控件移动到InsertUpdateDelete.aspx 之后,请在浏览器中测试页面。将在 Products 数据库表中看到所有记录的 ProductID 、 ProductName 和 UnitPrice 值。

图1 :按 ProductID 的顺序列出所有产品

添加 SqlDataSource 的DeleteCommand 和DeleteParameters 属性

此时,我们已经获得了从Products表返回所有记录的SqlDataSource ,以及显示此数据的 GridView 。我们的目标是将此示例扩展为用户可以通过 GridView 删除产品。要完成此目标,我们需要指定SqlDataSource 控件的 DeleteCommand 和DeleteParameters 属性值,然后将GridView 配置为支持删除。

DeleteCommand 和 DeleteParameters 属性可通过多种方式指定:

  • 通过声明式语法指定
  • 从设计器中的 Properties 窗口指定
  • 从Configure Data Source 向导的“Specify a custom SQL statement or stored procedure" 屏幕指定
  • 从Configure Data Source 向导的“Specify columns from a table of view” 屏幕中的Advanced 按钮来指定,实际上,它将自动生成DeleteCommand 和 DeleteParameters 属性中使用的 DELETE SQL 语句和参数集

下面,我们将探讨如何在步骤2 中自动创建 DELETE 语句。现在,尽管 Configure Data Source 向导或者声明式语法选项均可工作,但我们将在设计器中使用 Properties 窗口。

在InsertUpdateDelete.aspx 页面中的设计器中,单击 ProductsDataSource SqlDataSource ,随后屏幕上将显示 Properties 窗口(从 View 菜单选择Properties 窗口,或者单击F4 )。选择 DeleteQuery 属性,屏幕上将显示省略号。

图2 :从 Properties 窗口选择 DeleteQuery 属性

注意:SqlDataSource 没有 DeleteQuery 属性。并且,DeleteQuery 是 DeleteCommand 和 DeleteParameters 属性的组合,仅在使用 设计器 查看窗口Properties 窗口时才被列出。如果您的 Source 视图中查看 Properties 窗口,您会看到 DeleteCommand 属性。

DeleteQuery 属性中单击省略号,屏幕将显示Command and Parameter Editor 对话框(见图 3)。在此对话框中,您可以指定DELETE SQL 语句和参数。在DELETE 命令文本框中输入下列查询(既可以手动输入,也可以使用Query Builder 输入,如果您愿意的话)。

DELETE FROM Products WHERE ProductID = @ProductID

接下来,单击 Refresh Parameters 按钮,向下面的参数列表中添加 @ProductID 参数。

图3 :从 Properties 窗口选择 DeleteQuery 属性

请不要为此参数赋值(保留其参数源为 “None” )。一旦我们给 GridView 提供了删除支持,GridView 将自动支持此参数值,单击 Delete 按钮的行将使用其 DataKeys 集合的值。

注意:DELETE 查询中使用的参数名称必须与 GridView 、DetailsView 或者FormView 中的 DataKeyNames 值的名称一致。也就是说,DELETE 语句中的参数是特意命名为 @ProductID (而不是 @ID),因为 Products 表中关键字列名称(所以,GridView 中的 DataKeyNames 值)为 ProductID 。

如果参数名称和 DataKeyNames 值不匹配,GridView 将无法从 DataKeys 连接自动分配参数值。

在 Command and Parameter Editor 对话框中输入删除相关的信息之后,单击OK ,转到Source 视图,查看结果的声明标记:

<asp:SqlDataSource ID="ProductsDataSource" runat="server" 
    ConnectionString="<%$ ConnectionStrings:NORTHWNDConnectionString %>" 
    SelectCommand= 
        "SELECT [ProductID], [ProductName], [UnitPrice] FROM [Products]" 
    DeleteCommand="DELETE FROM Products WHERE ProductID = @ProductID"> 
    <DeleteParameters> 
        <asp:Parameter Name="ProductID" /> 
    </DeleteParameters> 
</asp:SqlDataSource>

请注意添加DeleteCommand 属性、<DeleteParameters> 部分和名为productID 的参数对象。

配置 GridView 启用删除

添加DeleteCommand 属性之后,GridView 的智能标记将包含 “Enable Deleting” 选项。继续执行,并选中此复选框。正如在插入、更新和删除概述 中讨论的一样,这将使GridView 添加一个CommandField ,其 ShowDeleteButton 属性被设置为 True 。如图 4 所示,当页面通过浏览器访问时,页面上将包含一个 Delete 按钮。可以通过删除某些产品来测试此页面。

图4 :每个GridView 行均包含一个Delete 按钮

单击Delete 按钮时出现回传,GridView 为每个单击 Delete 按钮行的 ProductID 参数赋值为 DataKeys 集的值,并调用 SqlDataSource 的 Delete() 方法。然后,SqlDataSource 控件将连接到数据库,并执行DELETE 语句。这样,GridView 将重新绑定到 SqlDataSource ,恢复并显示当前产品(这些产品现在不再包含刚刚删除的记录)。

注意:由于 GridView 使用其 DataKeys 集合为SqlDataSource 参数赋值,因此 GridView 的 DataKeyNames 属性可设置为组成主键的列并且 SqlDataSource 的 SelectCommand 返回这些列就变得至关重要。此外,SqlDataSource 的 DeleteCommand 中的参数名设置为 @ProductID 也十分重要。如果未设置 DataKeyNames 属性,或者参数未命名为 @ProductsID ,单击 Delete 按钮将导致回传,但实际上不会删除任何记录。

图5 以图形方式说明了此过程。有关在 Web 数据控件中与插入、更新和删除相关的事件链的更详细讨论,请参照 探讨与插入、更新、删除相关的事件 教程。

图5 : 在 GridView 中单击 Delete 按钮将调用 SqlDataSource 的 Delete() 方法

步骤2 :自动生成 INSERT 、UPDATE 和 DELETE 语句

正如步骤1 中所讨论的,INSERT 、UPDATE 和 DELETE SQL 语句可通过Properties 窗口或者控件的声明式语法指定。但是,此方法要求我们手动编写 SQL 语句,这些语句可能十分单调,并且容易产生错误。幸运的是 ,Configure Data Source 向导提供了一个选项 , 使用 “ Specify columns from a table of view” 屏幕时可自动生成 INSERT 、UPDATE 和 DELETE 语句。

下面,我们探讨一下这个自动生成选项。在InsertUpdateDelete.aspx 中向 设计器 添加一个 DetailsView ,并将其 ID 属性设置为 ManageProducts 。接下来,从 DetailsView 的智能标记中选择创建新数据源,并创建一个名为 ManageProductsDataSource 的 SqlDataSource 。

图6 :创建一个名为 ManageProductsDataSource 的新 SqlDataSource

从Configure Data Source 向导选择使用NORTHWINDConnectionString 连接字符串,单击 Next 。从 “Configure the Select Statement” 屏幕,保留 “Specify columns from a table or view” 单选按钮选中不变,并从下拉列表选择 Products 表。从复选框列表选择 ProductID 、 ProductName 、 UnitPrice 和 Discontinued 列。

图7 :使用 Products 表,返回 ProductID 、ProductName 、UnitPrice 和 Discontinued 列

要根据所选的表和列自动生成 INSERT 、UPDATE 和 DELETE 语句,单击Advanced 按钮,选中 “Generate INSERT, UPDATE, and DELETE statements” 复选框。

图8 :选中 “Generate INSERT, UPDATE, and DELETE statements” 复选框

只有在所选的表有主键并且主键列包含在返回列的列表中时,“Generate INSERT, UPDATE, and DELETE statements” 复选框才可被选中。在选中 “ Generate INSERT, UPDATE, and DELETE statements” 复选框的情况下,“ Use optimistic concurrency” 复选框将作为结果产生的 UPDATE 和 DELETE 语句中增加 WHERE 子句,提供开放式并发控件。现在,不选中此复选框;我们将在下一篇教程中探讨使用 SqlDataSource 控件完成开放式并发。

在选中“Generate INSERT, UPDATE, and DELETE statements” 复选框之后,单击OK 返回 “Configure Select Statement” 屏幕,然后单击 Next ,最后单击 Finish ,完成 Configure Data Source 向导。完成向导后,Visual Studio 将为 ProductID 、ProductName 和 UnitPrice 向 DetailsView 添加BoundFields ,还将为 Discontinued 列添加CheckBoxField 。为了使正在访问此页面的用户能够查看产品,请从DetailsView 的智能标记选择 “Enable Paging” 选项。同时,清除DetailsView 的 Width 和 Height 属性。

请注意,智能标记还提供了 “Enable Inserting” 、“Enable Editing” 和 “Enable Deleting” 选项。这是由于 SqlDataSource 控件包含其 InsertCommand 、UpdateCommand 和 DeleteCommand 值,如下列声明式语法所示:

<asp:DetailsView ID="ManageProducts" runat="server" AllowPaging="True" 
    AutoGenerateRows="False" DataKeyNames="ProductID" 
    DataSourceID="ManageProductsDataSource" EnableViewState="False"> 
    <Fields> 
        <asp:BoundField DataField="ProductID" HeaderText="ProductID" 
            InsertVisible="False" ReadOnly="True" SortExpression="ProductID" /> 
        <asp:BoundField DataField="ProductName" HeaderText="ProductName" 
            SortExpression="ProductName" /> 
        <asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice" 
            SortExpression="UnitPrice" /> 
        <asp:CheckBoxField DataField="Discontinued" HeaderText="Discontinued" 
            SortExpression="Discontinued" /> 
    </Fields> 
</asp:DetailsView> 
 
<asp:SqlDataSource ID="ManageProductsDataSource" runat="server" 
    ConnectionString="<%$ ConnectionStrings:NORTHWNDConnectionString %>" 
    DeleteCommand= 
        "DELETE FROM [Products] WHERE [ProductID] = @ProductID" 
    InsertCommand= 
        "INSERT INTO [Products] ([ProductName], [UnitPrice], [Discontinued]) 
         VALUES (@ProductName, @UnitPrice, @Discontinued)" 
    SelectCommand= 
        "SELECT [ProductID], [ProductName], [UnitPrice], [Discontinued] 
         FROM [Products]" 
    UpdateCommand= 
        "UPDATE [Products] SET [ProductName] = @ProductName, 
         [UnitPrice] = @UnitPrice, [Discontinued] = @Discontinued 
         WHERE [ProductID] = @ProductID"> 
    <DeleteParameters> 
        <asp:Parameter Name="ProductID" Type="Int32" /> 
    </DeleteParameters> 
    <UpdateParameters> 
        <asp:Parameter Name="ProductName" Type="String" /> 
        <asp:Parameter Name="UnitPrice" Type="Decimal" /> 
        <asp:Parameter Name="Discontinued" Type="Boolean" /> 
        <asp:Parameter Name="ProductID" Type="Int32" /> 
    </UpdateParameters> 
    <InsertParameters> 
        <asp:Parameter Name="ProductName" Type="String" /> 
        <asp:Parameter Name="UnitPrice" Type="Decimal" /> 
        <asp:Parameter Name="Discontinued" Type="Boolean" /> 
    </InsertParameters> 
</asp:SqlDataSource>

请注意SqlDataSource 控件如何自动设置其InsertCommand 、UpdateCommand 和  DeleteCommand 属性值。InsertCommand 和 UpdateCommand 属性中引用的列是由SELECT 语句中的列决定的。也就是说,InsertCommand 和UpdateCommand 只含有那些SelectCommand 中指定的列,并不是每个Products 列均在InsertCommand 和UpdateCommand 中(由于它是 编辑时无法更改它的值,插入时自动分配,将忽略较小的 ProductID )。此外,对于InsertCommand、UpdateCommand 和DeleteCommand 属性中的每个参数来说,InsertParameters 、UpdateParameters 和 DeleteParameters 集合中有相应的参数。

要启用DetailsView 的数据修改功能,请在其智能标记中选中 “Enable Inserting” 、“ Enable Editing” 和 “Enable Deleting” 选项。这将添加一个 CommandField ,其ShowInsertButton 、ShowEditButton 和ShowDeleteButton 属性均被设置为 True 。

在浏览器中访问页面,请注意DetailsView 中包含的 Edit 、Delete 和 New 按钮。单击 Edit 按钮,DetailsView 将切换到编辑模式,该模式将所有ReadOnly 属性被设置为False(默认值)的 BoundField 显示为一个文本框,而 CheckBoxField 则显示为复选框。

图9 :DetailsView 的默认编辑界面

与此类似,您可以删除当前选择的产品,或者向系统添加一个新产品。由于 InsertCommand 语句处理 ProductName 、UnitPrice 和 Discontinued 列,其它列在插入时要么由数据库分配 NULL 值,要么分配它们的默认值。就像 ObjectDataSource 一样,如果 InsertCommand 丢失了任何不允许使用NULL 值或者没有默认值的数据库列表行,尝试执行 INSERT 语句时将出现一个 SQL 错误。

注意:DetailsView 的插入和编辑界面缺少某种定制或验证。要添加validation 控件或定制界面,您需要将BoundFields 转换为TemplateFields 。更多信息 , 请参阅 为编辑与插入界面添加验证控件和 自定义数据修改界面教程。

此外,请记住对于更新和删除来说,DetailsView 使用当前产品的 DataKey 值,此值仅在 DataKeyNames 已经配置完毕的情况下呈现。如果编辑和删除看上去似乎没有效果,请确定是否设置了DataKeyName 属性。

自动生成 SQL 语句的限制

由于“Generate INSERT, UPDATE, and DELETE statements” 仅在从表中选择列时可用,对于更复杂的查询来说,您必须像步骤1 一样编写您自己的INSERT 、UPDATE 和 DELETE 语句。通常情况下,为了实现显示的目的,SQL SELECT 语句使用 JOIN 从一个或者更多个查找表中取回数据(例如,在显示产品信息时取回 Categories 表的 CategoryName 字段)。同时,我们可能想让用户可以编辑、更新或插入数据到“核心”表(此时是 Products 表)。

由于INSERT 、UPDATE 和 DELETE 语句可手动输入,请考虑下列节省时间的技巧。首先,安装SqlDataSource ,保证它可以从 Products 表撤回数据。请使用 Configure Data Source 向导的 “ Specify columns from a table or view” 屏幕,保证可以自动生成 INSERT 、UPDATE 和 DELETE 语句,然后,在完成向导之后,从Properties 窗口选择配置SelectQuery (或者,返回 Configure Data Source 向导,但是使用“Specify a custom SQL statement or stored procedure” 选项。)最后,更新 SELECT 语句,使之包含 JOIN 语法。此技术可以自动生成 SQL 语句,可提供更容易定制的 SELECT 语句,从而节省时间。

自动生成INSERT 、UPDATE 和 DELETE 语句的另外一个限制是 INSERT 和 UPDATE 语句中的列是根据 SELECT 语句返回的列确定的。我们可能需要更新或者插入更多或者更少的字段。例如,来自步骤2 的例子中,我们可能将 UnitPrice BoundField 设置为只读。在这种情况下,它不应该在UpdateCommand 中出现。或者,我们可能希望设置 GridView 中不出现的表字段。例如,添加新记录时,我们可能希望将 QuantityPerUnit 设置为“TODO” 。

如果需要这样的定制,您需要手动完成,要么通过Properties 窗口、向导中的 “Specify a custom SQL statement or stored procedure” 选项完成,要么通过声明式语法完成。

注意:在 Web 数据控件中添加不含有相应字段的参数时,请记住这些参数值在某些方面需要分配值。分配的值可以为:InsertCommand 或 UpdateCommand 中的直接赋值;可从某些预定义源获得(查询字符串 、会话变量、页面上的 Web  控件等);或者可通过编码赋值,正如我们在前面的教程中看到的一样。

小结

为了使Web 数据控件能够使用它们内置的插入、编辑和删除功能,它们绑定的数据源控件必须提供这样的功能。对SqlDataSource 来说,这意味着INSERT 、UPDATE 和 DELETE SQL 语句必须分配给 InsertCommand 、UpdateCommand 和 DeleteCommand 属性。这些属性及其相应的参数集可以手动添加,或者通过Configure Data Source 向导自动生成。在本教程中,我们对上述两种方法均进行了讨论。

在 实现开放式并发 教程中,我们探讨了通过 ObjectDataSource 使用开放式并发。SqlDataSource 控件也可提供开放式并发支持。如步骤2 所述,自动生成 INSERT 、UPDATE 和 DELETE 语句时,向导将提供 “ Use optimistic concurrency” 选项。正如下一篇教程中我们将看到的,通过 SqlDataSource 使用开放式并发在 UPDATE 和 DELETE 语句中将修改 WHERE 子句,保证页面上次显示数据之后其它列的值均未发生变化。

快乐编程!

转载于:https://www.cnblogs.com/uddgm/articles/5451539.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374727.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java最佳实践–多线程环境中的DateFormat

这是有关使用Java编程语言时的拟议实践的系列文章的第一篇。 所有讨论的主题均基于用例&#xff0c;这些用例来自于电信行业的关键任务超高性能生产系统的开发。 在阅读本文的每个部分之前&#xff0c;强烈建议您参考相关的Java API文档以获取详细信息和代码示例。 所有测试…

IntentDemo

Intent通信示例&#xff1a; 两个Button&#xff0c;一个startBrowser, 一个startPhone. 其中&#xff0c;OnClickListener()是类View的一个interface&#xff0c;需要实现其中的onClick()函数。 startActivity()开启另一个Activity&#xff0c;本示例中开启Browser或Phone. In…

androidstudio新建项目中在布局文件中不显示title的方法

在androidstudio新建项目的时候&#xff0c;在布局文件里有时候会出现如下情况&#xff1a; 上面的标题栏非常碍眼&#xff0c;要想隐藏标题栏的话&#xff0c;可以在Manifest文件的theme标签里进行配置&#xff0c;自定义一个theme&#xff0c;加上如下两句。或者直接在当前th…

力扣 数组中的第K个最大元素

给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。 请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。 分析&#xff1a;这是个排序题&#xff0c;只要排好序&#xff0c;一切迎刃而解。我决定把排序…

Xcode插件

古人云“工欲善其事必先利其器”&#xff0c;打造一个强大的开发环境&#xff0c;是立即提升自身战斗力的绝佳途径&#xff01;以下是搜集的一些有力的XCode插件。1.全能搜索家CodePilot 2.0你要找的是文件&#xff1f;是文件夹&#xff1f;是代码&#xff1f;Never Mind&#…

JBoss Portal上的“ Hello World” portlet

Portlet概述 本教程将向您展示如何创建和部署简单的Portlet。 Portlet是基于Java技术的Web组件&#xff0c;可以处理请求并生成动态内容。 Portlet不是自治实体&#xff0c;但是由Portlet容器管理&#xff0c;Portlet容器为Portlet执行提供了必要的运行时环境。 应当注意&…

Jenkins + GitHub + fir-cli 一行命令从源码到fir.im

上周简书作者宣X_x 分享了一篇文章——用JenkinsGitHubXcodefir搭了一个持续集成环境&#xff0c;整个记录见(传送门)。 _______ 其实fir.im为我们提供了一个更简单的方式&#xff1a;fir-cli&#xff0c;我们只需要一条命令&#xff0c;就可以从源代码到fir.im。不需要Jenkin…

Java Persistence API:快速入门

各位读者好&#xff01; 在我的一些朋友提出无数请求之后&#xff0c;我决定写一篇关于Java Persistence API的简短文章。 面向对象的编程范式是当​​今最流行和使用最广泛的模型&#xff0c;它具有无缝建模现实生活实体的能力&#xff0c;因此它胜过大多数其他范式。 但是&am…

线性回归、梯度下降(Linear Regression、Gradient Descent)

转载请注明出自BYRans博客&#xff1a;http://www.cnblogs.com/BYRans/ 实例 首先举个例子&#xff0c;假设我们有一个二手房交易记录的数据集&#xff0c;已知房屋面积、卧室数量和房屋的交易价格&#xff0c;如下表&#xff1a; 假如有一个房子要卖&#xff0c;我们希望通过上…

使用Oracle WebLogic对应用程序外部的EJB的引用

在之前的文章中&#xff0c;我们对EJB v。3.0及其为您提供的用于构建Java EE应用程序的可移植机制进行了概述。 由于Java EE规范都是关于可移植性的&#xff0c;因此冒着重复自己的风险&#xff0c;我们经常强调EJB v。3.0规范上仍然存在最重要的可移植性限制&#xff1a;没有在…

基于verilog的分频器设计(奇偶分频原理及其电路实现:上)

在一个数字系统中往往需要多种频率的时钟脉冲作为驱动源&#xff0c;这样就需要对FPGA的系统时钟&#xff08;频率太高&#xff09;进行分频。分频器主要分为奇数分频&#xff0c;偶数分频&#xff0c;半整数分频和小数分频&#xff0c;在对时钟要求不是很严格的FPGA系统中&…

Java判断布尔类型是否相等

public class Solution{public static void main(String args[]){boolean x1 true;boolean x2 false;boolean x3 true;if(x1!x2){System.out.println("布尔类型变量判断是否相等可以用!");}if(x1x3){System.out.println("布尔类型变量判断是否相等可以用&quo…

Java_Web三大框架之Hibernate操作数据库(三)

使用Hibernate操作数据库需要七个步骤&#xff1a;&#xff08;1&#xff09;读取并解析配置文件Configuration conf newConfiguration().configure(); &#xff08;2&#xff09;读取并解析映射信息&#xff0c;创建SessionFactorySessionFactory sf conf.buildSessionFacto…

Spring MVC开发–快速教程

这是我们的JCG合作伙伴之一&#xff0c;来自Manoj的有关使用Spring开发Web应用程序的简短教程&#xff0c; 网址为“ The Khangaonkar Report ”。 &#xff08;注意&#xff1a;对原始帖子进行了少量编辑以提高可读性&#xff09; Spring MVC使用基于模型视图控制器体系结构&…

spring mvc controller间跳转 重定向 传参

url&#xff1a;http://zghbwjl.blog.163.com/blog/static/12033667220137795252845/ 1. 需求背景 需求&#xff1a;spring MVC框架controller间跳转&#xff0c;需重定向。有几种情况&#xff1a;不带参数跳转&#xff0c;带参数拼接url形式跳转&#xff0c;带参数不拼接参…

寻找数组的中心索引

给你一个整数数组 nums &#xff0c;请计算数组的 中心下标 。 数组 中心下标 是数组的一个下标&#xff0c;其左侧所有元素相加的和等于右侧所有元素相加的和。 如果中心下标位于数组最左端&#xff0c;那么左侧数之和视为 0 &#xff0c;因为在下标的左侧不存在元素。这一点…

一个疏忽引发的思考!(strerror)

前几天写代码因为自己的疏忽导致一遍又一遍的Segmentation fault (core dumped)。该问题是因为strerror&#xff08;errno&#xff09;返回的指针指向非法的内存导致程序打印错误时崩溃。 尝试数次无果&#xff0c;为了进度。简单粗暴的换成了perror(str)。今天忙里偷闲&#x…

Java最佳实践–字符串性能和精确字符串匹配

在使用Java编程语言时&#xff0c;我们将继续讨论与建议的实践有关的系列文章&#xff0c;我们将讨论String性能调优。 我们将专注于如何有效地处理字符串创建&#xff0c; 字符串更改和字符串匹配操作。 此外&#xff0c;我们将提供我们自己的用于精确字符串匹配的最常用算法的…

keil里面填数据

编译后寄存器和堆栈的内存数据可以直接写进去的。 寄存器&#xff0c;双击就可以&#xff0c;注意里面是十六进制 堆栈&#xff0c;也是十六进制&#xff0c;八位的 00 00 00 00 &#xff0c;但这个是从右到左的&#xff0c;比如0x00000006 应该填 06 00 00 00 把数据取出来 取…

调试生产服务器– Eclipse和JBoss展示

您是否编写有错误的代码&#xff1f; 不&#xff0c;当然不。 对于我们其余的确实会编写带有错误的代码的凡人&#xff0c;我想解决一个非常敏感的问题&#xff1a;调试在生产服务器上运行的应用程序。 因此&#xff0c;您的应用程序已准备好进行部署。 单元测试全部成功&…