数据库 ¶
数据库类型¶
intra-mart Accel Platform使用以下三种数据库 。
系统数据库
存储系统数据的数据库 。不要使用系统数据库,因为它在系统内部使用。Tenant数据库
它是一个数据库 ,用于存储租户中使用的数据。共享数据库
这是一个在intra-mart Accel Platform系统外部存储数据的数据库 。要与外部系统链接时,请使用此选项。
编程方式¶
事务¶
本节介绍如何实现事务处理。事务是交易Object 运行开始的方法函数通过传递,并在处理完成时自动提交。// 事务处理 交易额。开始(机能() { //查询执行 变种 结果 = 新的 租户数据库()。执行(sql, 参数); 如果(结果。错误) { //回退错误。 交易额。回滚(); } });通过如上所述传递执行函数 ,如果处理正常结束,则执行提交处理;如果发生异常,则自动执行回滚处理,因此,省略事务提交/回滚的执行可以预防。
执行查询¶
运行查询的方式取决于您要连接的数据库 。
Tenant数据库
//对Tenant数据库执行查询。 变种 资料库 = 新的 租户数据库(); 变种 结果 = 资料库。执行(“从b_m_account_b选择*”);共享数据库
//对连接ID为“ sample”的共享数据库执行查询。 变种 资料库 = 新的 共享数据库(“样本”); 变种 结果 = 资料库。执行(“从b_m_account_b选择*”);使用预处理语句时,请使用DbParameter Object 。//使用准备好的语句执行查询。 变种 sql = “从b_m_account_b中选择*,其中user_cd =?和login_failure_count =?”; 变种 结果 = 新的 租户数据库()。执行(sql, [ Db参数。弦(“ aoyagi”), Db参数。数(0) ]);
使用外部SQL¶
外部SQL是通过在程序外部执行SQL来从程序执行SQL的功能。如果要使用外部SQL,请将该SQL写入扩展名为“ .sql”的文本文件中,并将其放在“%CONTEXT_PATH%/ WEB-INF / jssp / src”下的任何目录中。当使用SQL文件“%CONTEXT_PATH%/ WEB-INF / jssp / src / sample / sql / get_sample_data.sql”时,实现如下。//使用传出的SQL执行查询。 变种 资料库 = 新的 租户数据库(); 变种 结果 = 资料库。executeByTemplate('样本/ SQL / get_sample_data', 参数);
要读取的文件¶
外部SQL可以划分用于连接目标数据库每种数据库 类别的SQL文件。数据库为每种数据库 类别分隔SQL文件,请添加文件名后缀的数据库 类别 。
- 示例:当数据库类别为Oracle并且SQL文件名为“ get_sample_data.sql”时
- 将SQL文件命名为“ get_sample_data_oracle.sql”。
通过如上所述准备带有后缀的SQL文件,当数据库 类别为Oracle时使用“ get_sample_data_oracle.sql”,而对于其他数据库使用“ get_sample_data.sql”。附加到SQL文件的每个数据库的后缀如下。
数据库 后缀 甲骨文 _甲骨文 SQL服务器 _sqlserver PostgreSQL的 _postgre
SQL文件的描述示例¶
-
示例1:使用2-Way-SQL
2Way-SQL是一条SQL语句,可以通过在注释中编写与程序的映射使用SQL * Plus等SQL工具直接执行该语句。- SQL文件“ sample.sql”
SELECT * FROM b_m_account_b WHERE user_cd = / * userCd * /'aoyagi'
- 程序“ sample.js”
新的 租户数据库()。executeByTemplate(“样本”, { userCd : Db参数。弦(“原田”) });
执行该程序时,将获得user_cd ='harada'的数据。如果使用工具按原样执行“ sample.sql”,则将获得user_cd ='aoyagi'的数据。执行程序时,用准备好的语句替换WHERE子句的注释部分并执行它。如果将“: 数据类型 ”添加到SQL文件的注释部分(/ 参数名称 /),则不使用DbParameter可以使用准备好的语句。- SQL文件“ sample.sql”
SELECT * FROM b_m_account_b WHERE user_cd = / * userCd:字符串* /'aoyagi'
- 程序“ sample.js”
新的 租户数据库()。executeByTemplate(“样本”, { userCd : “原田” });
-
示例2:使用准备好的语句
当在SQL文件中描述预备语句(包括SQL的?)时,属性名称必须为指定$ 1,$ 2,…,$ N Object 作为参数。- SQL文件“ sample.sql”
SELECT * FROM b_m_account_b WHERE user_cd = ? 与 login_failure_count = ?
- 程序“ sample.js”
新的 租户数据库()。executeByTemplate(“样本”, { 1美元 : Db参数。弦('aoyagi'), 2美元 : Db参数。数(0) });
-
Example#3字符串替换
如果要通过动态替换SQL文件中描述的查询字符串来执行SQL,用“ $”指定参数名称。- SQL文件“ sample.sql”
SELECT * FROM b_m_account_b 订购 BY / * $订单* /'user_cd'
- 程序“ sample.js”
新的 租户数据库()。executeByTemplate(“样本”, { 订单 : “ user_cd” });
当您要替换无法使用已准备好的语句的部分的字符串(如ORDER BY子句)时,将使用此选项。 -
示例4:条件分支
如果要根据特定条件动态更改要执行的SQL,请使用/ IF // END /。- SQL文件“ sample.sql”
SELECT * FROM b_m_account_b WHERE / *如果userCd!=空* / user_cd LIKE / * userCd:字符串* /'aoyagi' /*END*/ / * IF谓词()* / 与 login_failure_count = / * failureCount:数字* /0 /*END*/
- 程序“ sample.js”
新的 租户数据库()。executeByTemplate(“样本”, { userCd : “原田”, failureCount : 0, 谓词 : 机能() { 归还 true; } });
如果有可能执行无效的SQL,例如由于条件分支而导致空白的WHERE子句,请将WHERE子句放在/ BEGIN // END /中。通过使用/ BEGIN // END /,执行以下处理,并且可以防止执行无效的SQL。- 如果不满足所有条件,请从SQL中删除WHERE本身。
- 如果首先满足条件的查询字符串以AND开头,则删除AND。
- SQL文件“ sample.sql”
SELECT * FROM b_m_account_b /*BEGIN*/ WHERE / *如果userCd!=空* / user_cd LIKE / * userCd:字符串* /'aoyagi' /*END*/ / * IF谓词()* / 与 login_failure_count = / * failureCount:数字* /0 /*END*/ /*END*/