第三十七章 构建数据库应用程序 - 在页面上使用对象

简介: 第三十七章 构建数据库应用程序 - 在页面上使用对象

第三十七章 构建数据库应用程序 - 在页面上使用对象

CSP最强大的方面之一是,它允许创建可以直接与内置对象数据库交互的动态网页。 这意味着可以快速构建以下数据库应用程序:

  • 避免将关系数据映射到对象的复杂性
  • 不需要复杂的中间件
  • 能否在运行时重新配置,从单服务器配置到多层、多服务器配置,以获得真正的可伸缩性

注意,通过使用Caché SQL Gateway,可以构建访问第三方关系数据库中的数据的基于对象的CSP应用程序。Caché以应用程序透明的方式管理这一点; 无论选择将数据存储在内置的Caché数据库还是第三方数据库中,本章描述的所有技术都可以工作。

CSP是灵活; 可以使用各种技术构建数据库应用程序,从使用自动将数据绑定到HTML表单的高级标记到编写使用对象直接访问数据的服务器端脚本。 下面将概述这些技术。

在页面上使用对象

Caché使构建代表应用程序数据的持久对象数据库变得容易。 可以在web应用程序中以多种方式使用这些持久对象。

在页面上显示对象数据最直接的方法是使用服务器端脚本打开对象并写出其内容。

下面的示例使用Sample.PersonCaché Samples数据库中。这些示例使用CSP页面,但所描述的技术也适用于通过在类中将%CSP.Page子类化而构建的应用程序。

<html>
<body>
<script language="Cache" runat="SERVER">
 // open an instance of Sample.Person
 Set id = 1
 Set person = ##class(Sample.Person).%OpenId(1)
</script>
<table border="1">
<tr><td>Name:</td><td>#(person.Name)#</td></tr>
<tr><td>SSN:</td><td>#(person.SSN)#</td></tr>
<tr><td>City:</td><td>#(person.Home.City)#</td></tr>
<tr><td>State:</td><td>#(person.Home.State)#</td></tr>
<tr><td>Zip:</td><td>#(person.Home.Zip)#</td></tr>
</table>
<script language="Cache" runat="SERVER">
 // close the object
Set person = ""
</script>
</body>
</html>
复制代码

如果想尝试这样做,请将上面的代码复制到一个文本文件中,将其保存为/cachesys/csp/Samples目录(cachesyscaché的安装目录)中的myable.csp,然后将浏览器指向:

http://localhost:57772/csp/samples/mytable.csp
复制代码

应该看到数据显示在一个简单的HTML表中。

注意:注意不要在/csp/samples目录中进行任何实际工作。 如果升级Caché,它将重新安装示例并删除工作。

在表单中显示对象数据

使用与上面描述的代码类似的代码,可以在HTML表单中显示数据。此示例打开永久对象的一个实例,在HTML表单中显示其某些属性,然后关闭该对象。

<html>
<body>
<script language="Cache" runat="SERVER">
 // open an instance of Sample.Person
 Set id = 1
 Set person = ##class(Sample.Person).%OpenId(1)
 If ($Data(%request.Data("SAVE",1))) {
    // If "SUBMIT" is defined, then this is a submit
    // Write the posted data into the object and save it
    Set person.Name = $Get(%request.Data("Name",1))
    Set person.SSN = $Get(%request.Data("SSN",1))
    Set person.Home.City = $Get(%request.Data("City",1))
    Do person.%Save()
 }
</script>
<form method="POST">
<br>Name:
<input type="TEXT" name="Name" value="#(..EscapeHTML(person.Name))#">
<br>SSN:
<input type="TEXT" name="SSN" value="#(..EscapeHTML(person.SSN))#">
<br>City:
<input type="TEXT" name="City" value="#(..EscapeHTML(person.Home.City))#">
<br>
<input type="SUBMIT" name="SAVE" value="SAVE">
</form>
<script language="Cache" runat="SERVER">
 // close the object
Set person = ""
</script>
</body>
</html>
复制代码

%request.Data("txt",1) 是一个字符串值,如果数据小于的本地变量限制。 如果数据大于此值,CSP将创建一个包含数据值的流。 如果长字符串被禁用, 变量限制为32k。 如果启用长字符串,则边界会大得多。

如果你正在创建一个表单,其中包含一个可以容纳超过32K数据的字段,请按照下面的代码编写它:

Set value=%request.Data("fieldname",1)
If $isobject(value) {
    ; Treat this as a stream
} Else {
    ; Treat this as a regular string
}


相关文章
|
11天前
|
人工智能 容灾 关系型数据库
【AI应用启航workshop】构建高可用数据库、拥抱AI智能问数
12月25日(周三)14:00-16:30参与线上闭门会,阿里云诚邀您一同开启AI应用实践之旅!
|
2月前
|
架构师 数据库
大厂面试高频:数据库乐观锁的实现原理、以及应用场景
数据库乐观锁是必知必会的技术栈,也是大厂面试高频,十分重要,本文解析数据库乐观锁。关注【mikechen的互联网架构】,10年+BAT架构经验分享。
大厂面试高频:数据库乐观锁的实现原理、以及应用场景
|
2月前
|
存储 SQL API
探索后端开发:构建高效API与数据库交互
【10月更文挑战第36天】在数字化时代,后端开发是连接用户界面和数据存储的桥梁。本文深入探讨如何设计高效的API以及如何实现API与数据库之间的无缝交互,确保数据的一致性和高性能。我们将从基础概念出发,逐步深入到实战技巧,为读者提供一个清晰的后端开发路线图。
|
2月前
|
缓存 NoSQL 数据库
运用云数据库 Tair 构建缓存为应用提速,完成任务得苹果音响、充电套装等好礼!
本活动将带大家了解云数据库 Tair(兼容 Redis),通过体验构建缓存以提速应用,完成任务,即可领取罗马仕安卓充电套装,限量1000个,先到先得。邀请好友共同参与活动,还可赢取苹果 HomePod mini、小米蓝牙耳机等精美好礼!
|
2月前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
72 2
|
2月前
|
SQL Java 数据库连接
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
|
11天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
39 3
|
11天前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
41 3
|
11天前
|
SQL 关系型数据库 MySQL
数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog
《数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog》介绍了如何利用MySQL的二进制日志(Binlog)恢复误删除的数据。主要内容包括: 1. **启用二进制日志**:在`my.cnf`中配置`log-bin`并重启MySQL服务。 2. **查看二进制日志文件**:使用`SHOW VARIABLES LIKE &#39;log_%&#39;;`和`SHOW MASTER STATUS;`命令获取当前日志文件及位置。 3. **创建数据备份**:确保在恢复前已有备份,以防意外。 4. **导出二进制日志为SQL语句**:使用`mysqlbinlog`
54 2
|
25天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
174 15