From 5b8617a59460ed896f88f5227d2021dc4e259c35 Mon Sep 17 00:00:00 2001 From: Annie_wang Date: Wed, 10 Aug 2022 16:12:38 +0800 Subject: [PATCH] update docs Signed-off-by: Annie_wang --- en/application-dev/database/Readme-EN.md | 7 + .../database/database-datashare-guidelines.md | 191 ++++++++++++++++++ .../database/database-datashare-overview.md | 54 +++++ .../database/figures/en_DataShare.png | Bin 0 -> 50616 bytes .../apis/js-apis-data-DataShareResultSet.md | 14 +- 5 files changed, 259 insertions(+), 7 deletions(-) create mode 100644 en/application-dev/database/database-datashare-guidelines.md create mode 100644 en/application-dev/database/database-datashare-overview.md create mode 100644 en/application-dev/database/figures/en_DataShare.png diff --git a/en/application-dev/database/Readme-EN.md b/en/application-dev/database/Readme-EN.md index 9f7ccd0d08..a8aff91550 100644 --- a/en/application-dev/database/Readme-EN.md +++ b/en/application-dev/database/Readme-EN.md @@ -3,12 +3,19 @@ - Distributed Data Service - [Distributed Data Service Overview](database-mdds-overview.md) - [Distributed Data Service Development](database-mdds-guidelines.md) + - Relational Database - [RDB Overview](database-relational-overview.md) - [RDB Development](database-relational-guidelines.md) + - Preferences - [Preferences Overview](database-preference-overview.md) - [Preferences Development](database-preference-guidelines.md) + - Distributed Data Object - [Distributed Data Object Overview](database-distributedobject-overview.md) - [Distributed Data Object Development](database-distributedobject-guidelines.md) + +- Data Share + - [DataShare Overview](database-datashare-overview.md) + - [DataShare Development](database-datashare-guidelines.md) diff --git a/en/application-dev/database/database-datashare-guidelines.md b/en/application-dev/database/database-datashare-guidelines.md new file mode 100644 index 0000000000..251c33fbc5 --- /dev/null +++ b/en/application-dev/database/database-datashare-guidelines.md @@ -0,0 +1,191 @@ +# DataShare Development +The **DataShare** module allows an application to manage its own data and share data with other applications. Currently, data can be shared only between the applications on the same device. + +## Available APIs + +**Table 1** APIs of the data provider + +|API|Description| +|:------|:------| +|onCreate?(want: Want, callback: AsyncCallback<void>): void|Called to initialize service logic when the data provider application is created, for example, when a database is created.| +|insert?(uri: string, valueBucket: ValuesBucket, callback: AsyncCallback<number>): void|Inserts data into the database.| +|update?(uri: string, predicates: DataSharePredicates, valueBucket: ValuesBucket, callback: AsyncCallback<number>): void|Updates data in the database.| +|query?(uri: string, predicates: DataSharePredicates, columns: Array<string>, callback: AsyncCallback<Object>): void|Queries data from the database.| +|delete?(uri: string, predicates: DataSharePredicates, callback: AsyncCallback<number>): void|Deletes data from the database.| + +For more details, see [DataShareExtensionAbility](../reference/apis/js-apis-application-DataShareExtensionAbility.md). + +**Table 2** APIs of the data consumer + +| API | Description | +| :----------------------------------------------------------- | :--------------------------------- | +| createDataShareHelper(context: Context, uri: string, callback: AsyncCallback<DataShareHelper>): void | Creates a **DataShareHelper** instance. | +| insert(uri: string, value: ValuesBucket, callback: AsyncCallback<number>): void | Inserts a single data record into the database. | +| update(uri: string, predicates: DataSharePredicates, value: ValuesBucket, callback: AsyncCallback<number>): void | Updates data in the database. | +| query(uri: string, predicates: DataSharePredicates, columns: Array<string>, callback: AsyncCallback<DataShareResultSet>): void | Queries data from the database. | +| delete(uri: string, predicates: DataSharePredicates, callback: AsyncCallback<number>): void | Deletes one or more data records from the database.| + +For more details, see [DataShareHelper](../reference/apis/js-apis-data-dataShare.md). + +## When to Use + +**DataShare** can be divided into the following: + +- Data provider: Implement functions of adding, deleting, modifying, and querying data, and opening files, and share data. +- Data consumer: Access the data provided by the provider using **DataShareHelper**. + +Examples are given below. + +### Data Provider Application Development (Only for System Applications) + +1. Import the dependencies. + + ```ts + import Extension from '@ohos.application.DataShareExtensionAbility' + import rdb from '@ohos.data.rdb'; + import fileIo from '@ohos.fileio' + import dataSharePredicates from '@ohos.data.dataSharePredicates' + ``` + +2. Override **DataShareExtensionAbility** APIs based on actual requirements. For example, if the data provider provides only data query, override only the query() API. + +3. Implement the data provider services. For example, implement data storage of the data provider by using a database, reading and writing files, or accessing the network. + + ```ts + let DB_NAME = "DB00.db"; + let TBL_NAME = "TBL00"; + let DDL_TBL_CREATE = "CREATE TABLE IF NOT EXISTS " + + TBL_NAME + + " (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER, isStudent BOOLEAN, Binary BINARY)"; + + let rdbStore; + let result; + + export default class DataShareExtAbility extends Extension { + private rdbStore_; + + // Override the onCreate() API. + onCreate(want, callback) { + result = this.context.cacheDir + '/datashare.txt' + // Create an RDB. + rdb.getRdbStore(this.context, { + name: DB_NAME + }, 1, function (err, data) { + rdbStore = data; + rdbStore.executeSql(DDL_TBL_CREATE, [], function (err) { + console.log('DataShareExtAbility onCreate, executeSql done err:' + JSON.stringify(err)); + }); + callback(); + }); + } + + // Override the query() API. + query(uri, predicates, columns, callback) { + if (predicates == null || predicates == undefined) { + console.info('invalid predicates'); + } + try { + rdbStore.query(TBL_NAME, predicates, columns, function (err, resultSet) { + if (resultSet != undefined) { + console.info('resultSet.rowCount: ' + resultSet.rowCount); + } + if (callback != undefined) { + callback(err, resultSet); + } + }); + } catch (err) { + console.error('error' + err); + } + } + // Override other APIs as required. + // ... + }; + ``` + +4. Define **DataShareExtensionAbility** in **module.json5**. + + | Field| Description | + | ------------ | ------------------------------------------------------------ | + | "name" | Ability name, corresponding to the **ExtensionAbility** class name derived from **Ability**. | + | "type" | Ability type. The value is **dataShare**, indicating the development is based on the **Datashare** template.| + | "uri" | URI used for communication. It is the unique identifier for the client to connect to the server. | + | "visible" | Whether it is visible to other applications. Communication with other applications is allowed only when the value is **true**.| + + **module.json5 example** + + ```json + "extensionAbilities": [ + { + "srcEntrance": "./ets/DataShareExtAbility/DataShareExtAbility.ts", + "name": "DataShareExtAbility", + "icon": "$media:icon", + "description": "$string:description_datashareextability", + "type": "dataShare", + "uri": "datashare://com.samples.datasharetest.DataShare", + "visible": true + } + ] + ``` + +### Data Consumer Application Development + +1. Import basic dependencies. + + ```ts + import Ability from '@ohos.application.Ability' + import dataShare from '@ohos.data.dataShare' + import dataSharePredicates from '@ohos.data.dataSharePredicates' + ``` + +2. Define the URI string for communicating with the data provider. + + ```ts + // Different from the URI defined in the module.json5 file, the URI passed in the parameter has an extra slash (/), because there is a DeviceID parameter between the second and the third slash (/). + let dseUri = ("datashare:///com.samples.datasharetest.DataShare"); + ``` + +2. Create a **DataShareHelper** instance. + + ```ts + let dsHelper; + let abilityContext; + export default class MainAbility extends Ability { + onWindowStageCreate(windowStage) { + abilityContext = this.context; + dataShare.createDataShareHelper(abilityContext, dseUri, (err,data)=>{ + dsHelper = data; + }); + } + } + ``` + +3. Use the APIs provided by **DataShareHelper** to access the services provided by the provider, for example, adding, deleting, modifying, and querying data. + + ```ts + // Construct a piece of data. + var valuesBucket = {"name": "ZhangSan", "age": 21, "isStudent": false, "Binary": new Uint8Array([1,2,3])}; + var updateBucket = {"name": "LiSi", "age": 18, "isStudent": true, "Binary": new Uint8Array([1,2,3])}; + let da = new dataSharePredicates.DataSharePredicates(); + var valArray =new Array("*"); + let people = new Array( + {"name": "LiSi", "age": 41, "Binary": ar}, + {"name": "WangWu", "age": 21, "Binary": arr}, + {"name": "ZhaoLiu", "age": 61, "Binary": arr}); + // Insert a piece of data. + dsHelper.insert(dseUri, valuesBucket, (err,data) => { + console.log("dsHelper insert result: " + data); + }); + // Delete the specified data. + dsHelper.delete(dseUri, da, (err,data) => { + console.log("dsHelper delete result: " + data); + }); + // Update data. + dsHelper.update(dseUri, da, updateBucket, (err,data) => { + console.log("dsHelper update result: " + data); + }); + // Query data. + dsHelper.query(dseUri, da, valArray, (err,data) => { + console.log("dsHelper query result: " + data); + }); + ``` + diff --git a/en/application-dev/database/database-datashare-overview.md b/en/application-dev/database/database-datashare-overview.md new file mode 100644 index 0000000000..857e9fa420 --- /dev/null +++ b/en/application-dev/database/database-datashare-overview.md @@ -0,0 +1,54 @@ +# DataShare Overview + +## Introduction + +The **DataShare** module allows an application to manage its own data and share data with other applications. Currently, data can be shared only between the applications on the same device. + +**DataShare** is used in application scenarios, such as contacts, short message service (SMS), and media gallery. However, not all data, such as accounts and passwords, can be accessed by other applications. Some data, such as SMS messages, can only be queried by other applications. **DataShare** provides a secure data sharing mechanism for applications. + +The data provider can directly use the **DataShare** framework to share data with other applications without complex encapsulation. The data consumer only needs to learn and use a set of interfaces because the data access mode does not vary with the data provisioning mode. This greatly reduces the learning time and development difficulty. + +## Basic Concepts + + +Before you get started, familiarize yourself with the following concepts: + + +- Data provider + + An application that provides data and implements related services. It is also called a producer or server. + +- Data consumer + + An application that accesses the data or services provided by a data provider. It is also called a client. + +- Value bucket (**ValuesBucket**) + + One or more data records stored in the form of key-value (KV) pairs. The keys are of the string type. The values can be of the number, string, Boolean, or Unit8Array type. + +- Result set + + A collection of query results. Flexible data access modes are provided for users to obtain data. + +- Predicate + + Conditions specified for updating, deleting, or querying data in the database. + +## Working Principles + +**Figure 1** DataShare mechanism + + +![](figures/en_DataShare.png) + +- The **DataShareExtAbility** module, as the data provider, implements data sharing between applications. +- The **DataShareHelper** module, as the data consumer, provides interfaces for accessing data, including adding, deleting, modifying, and querying data. +- The data consumer communicates with the data provider using inter-process communication (IPC). The data provider can be implemented through a database or other data storage. + +- The **ResultSet** module is implemented through shared memory. Share memory stores the result sets, and interfaces are provided to traverse result sets. + +## Constraints + +- **DataShare** is subject to the limitations on the database used by the data provider. For example, the supported data models, length of the keys and values, and maximum number of databases that can be accessed at a time by each application vary with the database in use. + +- The payloads of **ValuesBucket**, predicates, and result sets are restricted by IPC. diff --git a/en/application-dev/database/figures/en_DataShare.png b/en/application-dev/database/figures/en_DataShare.png new file mode 100644 index 0000000000000000000000000000000000000000..e0243b935e8cc61d61c5f572a20c66aadc5edbd3 GIT binary patch literal 50616 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�@l$N`UR|1Gaj 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

X`M6}bhE~IJq z74m%UsdqB&x1HnJngt3&du>CH-%_B#Nq4$m@DAI97bocX8h*i;hf?Q->s2w>B??3u z96ykd8f-zWt;=`=(b{W_J%k^EDrx*}0|}oUAA_mdq02mP_Bo#WUdRt{Y%U!TA*sD_^^Pb$&^9HkAS<#sdMilxt8Adou#(03< z*{0_GiA#qAFh$(}9Y(XqXIggTBbEu9tt{+~T{33~y9O}pR+aFbXq!-K) z@E)zYSeweJxS#V6-j7in^&~fJ;6%Eh7*z&j${xIlG})6cEzdUHl+PzU?>oH4H#951 zH^NI9hU*Ga@mT9{t9g7fz$nYF^=KttbQ$kuR&bkHic#dt!@_^|wu~4f_fST`{O%y1 z({km6-u(v={GN!*(xBA(N~}Ff)jChlczCI3$N;H(5|o{!xN(Rt6Emv zwW(BxcCk5E`Ql2Z#^bF7^o>FC$`ed6BPqg)jK9!RL$A*aEnoLaIMFscPU3A-k;lTHaDIgwc_m%qsGUeh%BR0bwAKnMG57M zYP#0`rjN^|i3#5}Zk9K*roWw=DYu`w=*KW~(oiKjrL73sv(~r7E2e3j+hLH6)(VHj zsA)UKXf*3hE8YDT7Z&BeOrLQhM>}cJ^GEFl=BT`#*$_v-pK0bEgj8jwPghD-n#Lw+ zv6iZtsM{72e5cWdo3(i>HpKR7U{nt>e~Iv25E%LhB+|k`g}Leq0NCsciDM~!za^wVb00E z44%Iawf})Q?lBy=GfsL>Ft{r~8T)W17v0beaf({aZV0I$mGRH@g^%dhiO!v7#VHTGtzO(b*rgV zCh<5T>FRss;QTm~?nYnV`aj^9lO-{**~iQ62I)%Qpr>z(#a=Ybk`B;?>FM7icAKS#Q?<>ei8PC-GL{w=w7 zN^l%d;7q~ZYaJb5Ncz=0qqcUOW%|bhe;(4|c-B57j6-_DvNK`U{yXO?>0FP4-;{=l ziRy8qpXaS#jdpJ!M)d2ybd90P4t!)7sjeGz8z4u{zD}3%=QdpVW7A8``oxFJ1@0@z+>p;N$sefkTzIslr#rqI# zk;@WKBVh(?E^`YKTo>Qzn;BNGsmeH=?_9A8qDtRJ!r|6zC)r!>`wFkB7i;M0S&@^I zi@46Te8*{>f(5W%2%Q;`mPB{bu-TNu&=Nn-+B!%&R(puz`deiOdm9>AylHCyM{Nx5g@+NEeu%-=CI5lRYHe$9Vy~4p8=V)z#~3k5{Sr zt2?Vbgnfhm*J4s!-{1-`z8rzx+50qhW*6LvI|vn~|ol zQP05fOIO@n5Ca9>2Zn~Y|E#lB87?nf{d3|~-+u=CRq})+8Dw7*2zRW61Qe~Wuh(2= zSsE;K^QgK4mP*{ycZ_gJdtsLC5q#)AAu@D-`5k5m*V`mwxHa<*VL+@gMH2k01xr9T zvU3{Kb8}mPlpu|j<8CBu6txp4`8!s0`I-L&fsab%fMAokRdIa zKn^kQVDbdM%I;78u>uz%ViGr2FNug*4rsm6*D(EVIDhmc6T`N)667XNZ?Ls_c|we~ zjvdG|R|tg66=p>F=9 zXGJ^hI)?i$EaGK7{BctKRB2w^hW8;5=SKr>ZA_laV^w_yhK3iyArPwzDCZi?)5@ef z1wGZ6=FPPr`#rD5)KcSrAQ54HYdIN8`s>-!hpls6NlRPZiVUbtivL?^vHRloq=pTWH^{gqtD`W1MylT&wqfVIP;~qQ(s*!hDV>UE{m5|EKM_GS>FM zxZrD(Cs?;_baa{jh&y?+`>r^vhKHaprV;~h^lnE&L z@I{C9Ub>Q|m8f%9xth0Tfwcjne<+jQ`#s@Uc4^YLR|t&lMEm}Dc)|XsI9aU^FU0Eo zi%{#UPdg`MSyyCdvWVn#KEJDKw+oN<(++o*@(AfV7K6iILn9(b_iU%=-uYX>w)(X| z)my=8U>sDJd4p9XE)&=s+MZG_fy^y#ou^SOActgpS&x_8ezh-xGhVAV)0n+scV+cn z*iwF=yq{m4^2cRQO)*H0jt4+XyLbX8^Jo$UR3b z(R^UM<3N(k=|4I}VoePUIr|NC)|m{a$cn4SGE;>+manURXOAt>8vs@Bbu{4~SaaGoxMOj z3z@1NI{4@?YU$C+wlgfb^F7vS+&bmPxP>&vD^=x^rp4r;T_NiF2g~ngtcy@brM#qe zZuN<+%_sYG5!YieV%0`;o{)Q8Os1uiM|Arw@;}>A@NxOostj5+4$x8ZhD@Z2z) zT1_yGn#sM=QD)qQ@P8mJLR$%W`T3<_n8Av_htv`KCbhBuhQK}RG_2-GEOdBOu#IB( zYD_k%#pyQ3X2ZqLTQk_8xF~lr-jtr6gu(ApF*!aq~o$R;&xngscf&ZGz4%a9sIQMbIXm1*1^5-Okj~h z)$_C~E@LO{!=H{s@sY2PI+<&xkz%WYl`e<`eDFd%#iTE|1z{fvwln6zXE5(sZP8E|* zo4T2?@NaZZ9tA(Y4!>(&i=H=L;~m|c@ki}){iLNW_~PT|(Zj#LC}2Mla-mAU?7P&# zI2?!Qy2<=GwEQ!|Cj4Dw;S|k%x^-2w^n!Ii| zkwLs8`Rx3yM(yi5SwHEo&0&VIUv6%{qns!qhf4{PulOeYvY=%uO-aKzn6`Q?&sz3W&A#PuDs zKwEn|0jNh{D+(|n5abCHN84$QMb(`}ig!J0R^Lc0hx5TpbkvZ=0&t(FR11Qva$u}|3hP6oefE9ldXUG$wD1C*~0&tT``yxJzp zoBh`$4LSA;jNLRmZ$~6fmdyVu4fj289Cdf47=Q2y=Ae7vl=hr~1NEux6G3nCD5d!-um zd?`yfnxNz{z<2aCft80quxJexS@L1f^;i?CCX|obkGz^DJe0n(-jatn`MZhxDSR~5LQRGD$6qQs5EZ6dX(fevTqt7&O-(aEZ& zZJ8Q-2t@pb&cQuBUP#NeYa4_?L(Egr=lBcT@6;0Y>xgPg%PZAOgr2C1QOXN<6qD|* zdFOk1#rXQ;rS=DQ9832rx=L2051$!s0Un6L4KkJS#xn$YHRKm3oqn7dZ;CLBweGW9 zbyA%Kr8yA!#k+Y7mHL;a)L|yr;Z;}@{@PA<+(E%OL&!^PtJCmTPpMA?+GimZzH85Q zrA(a89Id(dRLyyByy=k7e%{4CLQp8(_4xG3{S*XJm0noLS2nMWnGV}6vi*-W`5^ln zo{uWsOLyboAH&+&V&8o{l?1N;qbEg+q-@FaYM0$Uk9lDRk=?QT?@*8cZC$C-<~rv| zx#}gft)aGfTY|v?f7saI{|*S$SP7>Ogt1A~99vb!2GZ7Rq+PkkfePlaGT|UlyZNDX z?ZqGaMfb+<79etAc%WTuZvWCDUFaHoXZ4b>Z8T%Ez1ipM?6 zugn6#&AeynLVN6$h+l2?tbBT!B9^4ZEQqM2lj685<*fXve8>7g1V5sLhmQ{hqS6_Y zKQ#;uS-hK%6$|G_!s0P^R)+y`8>+1A_8-ez7wiO}_+=KB96T)|Qk$Cb>>T(H^q-l# z4nQwP0g9oNF6dAHD{iim=-3=4>yrL8$m;1t%z;7X?(Tk-NYZd1U@6`@|L*Fs zZgFo1w6MPJ8r=A_!=BU#CvRdP+kRP43yWk^m>e>212v4^et8lz$)Yc1`t{{sZ$p~eCp5LpI+~~mftLvXLmgJSP{7fpIzta4hJP?3=TsA9|*Nt7@tti0}XZ zX1q6UENuOkhMh`$Ty(RTbO&e1u|MmN0($JvYHMq=$CcT1O@YbKgCl)T&I?p95DPO0 zoPvtdt3CAkxO1diu`xWaf!zt%%22?2U?4?0M>5&1t*t*d9$Wcxz?vp)VBqsqEUM1> z?EFFj6quM(J5c*cSCby>@oUTmP*y4yEdHG)y4IC)p!CWfANyFzu|+Q;PDWzH^ijD+ zx+j9VYvE~A2ovynSnnR6VCbq(FD{Pw>&22Wg8^q4P~Ov}kF5?ztsX(gF|qud9A}ZI ze?0;s(yMXeZkBt2Z$zFx|1*DOuFyHTxKOZzeD|`sIm;$5(xVj&^GKRNZ-4*HzxIgc z_=ljsgQZfN2|Nep`#URY|LJ^%jXjB$#9Mvc>3)(;l z7moVtL9qwTZp?L-e*OC3*X;3lgLNf;mpSwAAoe>qTsoE)l5+Q(0aBu%tgL_JEpT~( z9)2DLsq}?;d2JW@jpF>KdU3e6-^WG*6L7FJ0XNQQd8dJa!KL{>&)s8tcGm%Ru=b{teqh@@6*@*fQ81<~ICZM11D+3Q!yP?NYkie)H7o`EEaSOQJnPSn^y*bc3|I(dG zHF9<;5x~&#l;ml9{(BY7{k`W?bitJDYW9-mqKDh$Eb8YT0jmr1FKJWtW;C}+Gw}P+3f}k)=q>2Uz_`BSYoLGN!BPm0MCMW zRwVW|0{&4x=1}aPc@MrrGbs7Qcixm!1Y8iXi2!A=CuDlS!odDn81F9w326_w{1zvh zr-w_-ZaO_X9{yG^2W!@TmgwIqnWHy2p6uqYngFZW3;wS9X}}~}4wj77h0~;VD>H2C z!8$^rP$qYdPh{}wd;{x<^c%^&2G&zC8jb#*(Dkn~&GB9xVo7(j*fi+BnWMqYAT++5 z^lakt@tr+x{rJ?zSARrrI8der1_pHX^;-`Ab_VQKcdgZ}|8@aLeb3-Cy`(PyEL*3W z!cWe!LHoU=!~NDy8t-X=Roek38p(|UflO`EKLlRo9^m!7V5jO*?pb-BWJ2HLdCzqP zxau^3N&5EU5EG)*P6rFNKevcrOm@Rvosa)<2K- zd#=qyso?-JDap9#-#0dp_+ReB!Eqk<5K6M+4aXd8y>VhLX|n0P|IO5HjuSMie8&l% z8W560va{3R2k-d1StY&u_dmtXv!B5B_Wt0zk56C_p+=fKs8FL-jFGzKAJaTQ-VuX& zNv>wPsD%*J+M9V8!&Cb!=!5bstwdJQL20~HAGBT0yETI*8q>A{&05LoGD4jDXtJAs z5YO6IS{U{X&uN%)C-d1rLwtdm9$N;Fnh5?@-)8*aXJig|Dg_#*zD;RwQM9}iVM)yj;q_Y1I5u+8CQFZEFm!ynb>Gc5bZqn%qLuMO4ft>4j6ur7V{1T{$AWnYm~&meFula zXR&)T2Qhw|3%w#>SLH_(_*y$S5XwUFH9$-PG)iyoLBhaPZg#TkoV5FbI$hjwRhiEoMSKUcZ?~|9Z@03%z)4ni%75yFsdf5?+5c zE#I!^idt~^%D{bnwk0>|C-nhQyZNkpiHpx8pNB+GQcA4`eow!ED0p6mS*h7j%@(>T zJ(~}u@e4!2B|MgaV!VwQp`6vz(D+fy{XDOk5&pcFhE;58%&Jyi$EpE3Xype`i(Q*} zcTl%^lNN^eQhYEWQUm#6n66r)8&CQ+0-)5ACfuZww6w2F`^WrnN3bs2=FcCxAzZx< z%%Fgwio_R!OlyyMS%F887Nu0a^GU8s=r$anY#&e5Q1xwZh~94 zzY&VppWJCUkPSyj{z%E+(x2_E>fJibJM1UgVh+tR4iJt*K3C$m-2g6_w3VsOYD_@0 zS`nXzhIaC$+KGZ#Xr^BL0qnVAdKs>1QZ(lAJiu6&dxi&<)wZPxk#FcFEsia$M0F$0 zl6bXs9ae@)+ESkL>+Jpf`E(^NkJZmBMs7$QT7KW#B*n*<=3vDvQ*vB5dg4OEik?II zP8nD}`?))bN6G324%yu<`fPUoK||^|xp`wS$?ooTER;_7m0+zj=jDdxl~W$oh95xB z4a9GY$FC1rnWXr}Jk+){ez@rN*$j_loX!2R6h{$W(UrQFXu}b-sSn1pUHYOQTRu!a zjCE0)k|(_D9a;|P``jCSaPm{Fh+EJs=ne%kYRgNHSkzsD*Pr)Dn%)BU?VI&{zW+`; z+g<7m_kv0$qs9*uSA#4gu1(wNl(D|GhPRHkzPE2fuDYK$gNy{nM-y(PS){un@`$&# zuE%I`>ox7iX1LL=orV;T+wDS{2%5b0Gg$*>nL`a~e$)g#S8xAMGlv6kog&^^)gteW ztMka|#Kb|k_F_XB@zF#K=HgK(-IyG5Q86F3DMy{PwWM!>$lO`FRT&y)<7(jFTLPX| z4sC)Cw(fs!&YPZDw_{0?39>nqomJ)!-@d$g3~$$7tWD|w!1uvD_mtKYn5gg?R|pBVUS5EWPa{ZQ8aTPA9% zOPJ*RuxnK?gJ{gjzT~2?YhEcja(YCA4@=6Uc_D4m;)Uy{_F0!UX1u8fRBjihNEL)_ zB`f%a<4f?j;s)WHXz29@r~)`uWG3yK*PSWF<%fH+H&bS?IsG<2Z0j*~JG`5`J^g6u zfRJZ4i|lr}?Ubp%p6v-X@8XxQ}Vz#v@Rk_ViR?P!`#+=9xNIo3c&hC%z3N590I6 zB@j1S7o(PxgD2)qcb6pTl#xSJ5<9jUN#yO*0&SBqQoE9=vWW8@)U$g=wi6cRJyFwrnpmX(i<1vtpH(3bOmEw=ef?erOexjM`Ny z8n`clRdUJ=Dn9sDep-n`m%X(~u+x%Q**NOTE** > @@ -13,7 +13,7 @@ The **DataShareResultSet** module provides methods for accessing the result set import DataShareResultSet from '@ohos.data.DataShareResultSet'; ``` -## How to Use +## Usage You can call [query()](js-apis-data-dataShare.md#query) to obtain the **DataShareResultSet** object. @@ -179,7 +179,7 @@ Moves to the specified row in the result set. | **Name**| **Type**| **Mandatory**| Description | | ---------- | -------- | -------- | ------------------------ | -| position | number | Yes | Destination position to move.| +| position | number | Yes | Destination position to move to.| **Return value** @@ -199,7 +199,7 @@ console.info('resultSet.goToRow: ' + isGoToRow); getBlob(columnIndex: number): Uint8Array -Obtains the value in the specified column in the current row as a byte array. +Obtains the value in the form of a byte array based on the specified column and the current row. **System capability**: SystemCapability.DistributedDataManager.DataShare.Core @@ -228,7 +228,7 @@ console.info('resultSet.getBlob: ' + getBlob); getString(columnIndex: number): *string* -Obtains the value in the specified column in the current row as a string. +Obtains the value in the form of a string based on the specified column and the current row. **System capability**: SystemCapability.DistributedDataManager.DataShare.Core @@ -257,7 +257,7 @@ console.info('resultSet.getString: ' + getString); getLong(columnIndex: number): number -Obtains the value in the specified column in the current row as a long integer. +Obtains the value in the form of a long integer based on the specified column and the current row. **System capability**: SystemCapability.DistributedDataManager.DataShare.Core @@ -286,7 +286,7 @@ console.info('resultSet.getLong: ' + getLong); getDouble(columnIndex: number): number -Obtains the value in the specified column in the current row as a double-precision floating-point number. +Obtains the value in the form of a double-precision floating-point number based on the specified column and the current row. **System capability**: SystemCapability.DistributedDataManager.DataShare.Core -- GitLab