使用数据库

Objective

After completing this lesson, you will be able to 配置 SQLite 数据库以在开发期间使用

数据库支持

浏览受支持的数据库

CAP Node.js 运行时为各种数据库提供开箱即用支持。

观看视频,了解支持的数据库。

自动连线配置

在 CAP 中,所谓的 CDS 插件技术用于将数据库集成到应用程序中。从本质上讲,这些数据库插件是 Node.js 包,允许 CAP 连接特定数据库并与之交互,无需其他配置。每个支持的数据库都有一个相应的 CDS 插件包。

注意

CAP 的插件机制在 package.json 中配置的项目相关性中搜索包含名为 cds-plugin.js 的模块的包,并将其加载(如果可用)。其主要优势在于向项目添加功能(如本例中的数据库)只需要简单的 npm add

通过使用这些数据库插件,开发人员可以在开发和生产期间轻松切换不同的数据库,而无需更改应用程序代码。

要自动配置 SQLite 以进行开发,请在终端中使用以下命令安装相应的数据库包:

Code Snippet
1
npm add @cap-js/sqlite -D

执行以下命令以使用 SAP HANA Cloud 进行生产:

Code Snippet
1
npm add @sap/cds-hana

自定义配置

Node.js 数据库包通过通过 CDS 插件机制设置的配置缺省值自动连接事物。您可以使用包为应用程序提供的缺省配置或覆盖各个属性。我们稍后将看到如何在此学习旅程中执行此操作。

要查看有效的数据库配置,您可以在项目的根文件夹中为 cds.requires.db 密钥运行 cds env 命令,如图"检查有效配置"所示。

命令返回的配置选项如下:

  • 实施 - CAP 数据库服务实施的模块名称
  • 凭据 - 具有 db-specific 配置的对象,最常见的 url
  • kind - 预设的名称,例如 sqlitehana

初始数据

您可以使用初始数据填充为 CAP 应用程序创建的数据库表。

应用程序启动后,请按照以下步骤将初始数据加载到这些表中:对于通过 CDS 模型定义的每个表,使用与 CDS 模型中相应实体定义的完全限定名称匹配的文件名创建 .csv 文件。出于外观原因,您可以选择使用破折号 (-) 代替点 (.)。

例如,在此处讨论的场景中,您可以为模型实体 com.sap.learning.Authorscom.sap.learning.Books 创建文件com.sap.learn-Authors.csvcom.sap.learning.Books。

然后,必须使用标准 CSV 填充创建的 .csv 文件,其中列标题必须与 CDS 模型中声明的元素名称相对应,如"提供初始数据"图中的示例所示。

.csv 文件的位置

您经常需要区分示例数据和实际初始数据。CAP 通过允许您在两个位置提供初始数据来支持此操作。

仅当应用程序未在生产中运行时,才会部署在测试/数据文件夹中创建的 .csv 文件。因此,此文件夹可用于存储测试和演示的示例数据。

另一方面,在 db/data 文件夹中创建的 .csv 文件部署在任何环境中,包括生产环境。因此,此文件夹适用于初始配置数据和代码清单数据等。

生成 .csv 文件

如果在终端中输入以下命令,则会在通过 CDS 模型定义的表的 db/data 文件夹中创建相应的 .csv 文件:

Code Snippet
1
cds add data

生成的文件尚不包含任何数据,但确实包含基于 CDS 模型的列标题(有关示例,请参阅为建模实体生成的 .csv 文件 一图)。

使用 SQLite 进行开发

SAP 强烈建议在开发和测试期间尽可能多地使用 SQLite。CAP 为此数据库提供广泛支持,使项目能够加快开发速度并最大限度地降低成本。

在此学习旅程中,我们遵循此建议并在开发期间使用 SQLite 作为数据库。您可以在 CAP 文档中了解如何切换到 SAP HANA Cloud 作为生产数据库。

注意

对于 SAP Business Application Studio,SQLite 已安装并可直接使用。如果选择 VS 代码作为开发环境,则必须确保已在本地安装 SQLite。

设置

如上所述,您需要在终端中执行以下命令才能使用 SQLite 进行开发:

Code Snippet
1
npm add @cap-js/sqlite -D

此命令将与以下内容类似的相关性添加到 package.json 文件:

内存数据库

默认情况下, @cap-js/sqlite 包使用 CDS 插件技术为您的应用程序自动配置内存 SQLite 数据库。使用 cds watch 启动应用程序时,可以在日志输出中看到此内容:

提示

对于测试驱动器和测试管道,建议使用内存数据库。

注意

由于内存 SQLite 数据库不将其数据存储在文件系统中,因此通过 cds watch 启动的服务器停止后,所有数据更改都将丢失。

持久数据库

还可以使用持久 SQLite 数据库。为此,请执行以下步骤:

  1. package.json的数据库配置中指定数据库文件名,如下所示:

    总之,此配置告知 CAP 框架在开发期间,应使用位于项目根目录下名为 db.sqlite 的 SQLite 数据库。

  2. 在终端中运行以下命令:
    Code Snippet
    1
    cds deploy

这将:

  1. 在项目的根文件夹中创建具有指定名称的数据库文件。
  2. 根据数据库中的 CDS 模型创建表和视图。
  3. 填写提供的 .csv 文件中的初始数据。

有了这一点,服务器将使用此准备好的数据库,而不是在启动时引导内存数据库。通过 cds watch 启动服务器时,可以在日志输出中看到此内容:

注意

切记在更改模型或数据时重新部署数据库。为此,只需再次运行 cds deploy

删除创建模式

当您使用 cds deploy 重新部署持久数据库时,将首先删除所有表和视图,然后重新创建。这最适合模式更改非常频繁且广泛的开发环境。

模式演变

但是,cds deploy 还支持持久数据库的自动模式演变。在这种情况下,不会在重新部署期间删除并重新创建已更改的表。而是通过 ALTER TABLE 应用更改。

但请记住,自动模式演化仅允许更改,而不会潜在的数据丢失。有关模式演变的详细信息,请参阅 CAP 文档。文档中的链接部分参考 PostgreSQL 数据库。但是,其中的信息也适用于具有持久数据库的 SQLite。

演示和练习:使用初始数据设置持久 SQLite 数据库以进行开发

注意

在练习中,在 SAP Business Application Studio 中自行执行以下演示中的分步说明。

作为练习的起点,请使用之前的定义服务练习的结果(如果您已成功完成)。或者,您还可以使用以下 GitHub 资源库中的分支 3_service_definition 作为起点:

https://github.com/SAP-samples/cap-development-learning-journey

模拟的完整实施可在 GitHub 资源库的 4_SQLite_database 分支中找到。

有关资源库内容及其使用方法的详细信息,可在此处找到。

观看视频,了解如何使用初始开发数据设置持久 SQLite 数据库。