unicloud-database.uvue 10.2 KB
Newer Older
雪洛's avatar
雪洛 已提交
1 2
<template>
  <!-- #ifdef APP -->
H
hdx 已提交
3
  <scroll-view class="page-scroll-view">
雪洛's avatar
雪洛 已提交
4 5 6 7 8 9 10 11 12 13 14 15 16
  <!-- #endif -->
    <view>
      <page-head :title="title"></page-head>
      <view class="uni-padding-wrap uni-common-mt">
        <view class="uni-btn-v uni-common-mt">
          <button type="primary" @click="dbAdd">新增单条数据</button>
          <button type="primary" @click="dbBatchAdd">新增多条数据</button>
          <button type="primary" @click="dbUpdate">更新数据</button>
          <button type="primary" @click="dbGet">where传字符串获取数据</button>
          <button type="primary" @click="dbGetWithCommand">where传对象获取数据</button>
          <button type="primary" @click="dbRemove">删除数据</button>
          <button type="primary" @click="dbLookupInit">初始化联表查询数据</button>
          <button type="primary" @click="dbLookup">联表查询</button>
雪洛's avatar
雪洛 已提交
17
          <button type="primary" @click="dbMultiSend">合并查询查询</button>
雪洛's avatar
雪洛 已提交
18 19 20 21 22 23 24
        </view>
      </view>
    </view>
  <!-- #ifdef APP -->
  </scroll-view>
  <!-- #endif -->
</template>
H
hdx 已提交
25

雪洛's avatar
雪洛 已提交
26 27 28 29
<script>
  export default {
    data() {
      return {
雪洛's avatar
雪洛 已提交
30 31 32 33 34 35 36 37 38
        title: 'ClientDB',
        addId: '',
        batchAddIds: [] as Array<string>,
        batchAddinserted: 0,
        updateUpdated: 0,
        getData: [] as Array<UTSJSONObject>,
        getWithCommandData: [] as Array<UTSJSONObject>,
        removeDeleted: 0,
        lookupData: [] as Array<UTSJSONObject>,
雪洛's avatar
雪洛 已提交
39
        multiSendSuccessCount: 0,
40
        isUniTest: false
雪洛's avatar
雪洛 已提交
41 42
      }
    },
43 44 45 46 47
    computed: {
      dataTag() : string {
        return this.isUniTest ? 'default-tag' + Date.now() : 'default-tag'
      }
    },
雪洛's avatar
雪洛 已提交
48
    methods: {
49 50 51 52 53 54 55 56
      notify(content : string, title : string) {
        if (!this.isUniTest) {
          uni.showModal({
            title,
            content,
            showCancel: false
          })
        } else {
雪洛's avatar
雪洛 已提交
57
          console.log(title, content)
58 59
        }
      },
60
      async dbAdd() : Promise<void> {
雪洛's avatar
雪洛 已提交
61 62 63 64
        uni.showLoading({
          title: '加载中...'
        })
        const db = uniCloud.databaseForJQL()
65
        await db.collection('type')
雪洛's avatar
雪洛 已提交
66 67
          .add({
            num: 1,
68
            tag: this.dataTag,
雪洛's avatar
雪洛 已提交
69
            date: new Date()
雪洛's avatar
雪洛 已提交
70
          })
雪洛's avatar
雪洛 已提交
71
          .then(res => {
雪洛's avatar
雪洛 已提交
72 73
            uni.hideLoading()
            console.log(res)
雪洛's avatar
雪洛 已提交
74
            this.addId = res.id
75
            this.notify(`新增成功,id: ${res.id}`, '提示')
雪洛's avatar
雪洛 已提交
76
          })
雪洛's avatar
雪洛 已提交
77
          .catch((err : any | null) => {
雪洛's avatar
雪洛 已提交
78 79
            uni.hideLoading()
            const error = err as UniCloudError
80
            this.notify(error.errMsg, '错误')
雪洛's avatar
雪洛 已提交
81 82
          })
      },
83
      async dbBatchAdd() : Promise<void> {
雪洛's avatar
雪洛 已提交
84 85 86 87
        uni.showLoading({
          title: '加载中...'
        })
        const db = uniCloud.databaseForJQL()
88
        await db.collection('type')
雪洛's avatar
雪洛 已提交
89 90
          .add([{
            num: 2,
91
            tag: this.dataTag,
雪洛's avatar
雪洛 已提交
92 93
          }, {
            num: 3,
94
            tag: this.dataTag,
雪洛's avatar
雪洛 已提交
95
          }])
雪洛's avatar
雪洛 已提交
96
          .then((res) => {
雪洛's avatar
雪洛 已提交
97 98
            uni.hideLoading()
            console.log(res)
99
            console.log('JSON.stringify(res.inserted)', JSON.stringify(res.inserted))
雪洛's avatar
雪洛 已提交
100 101
            this.batchAddIds = res.ids
            this.batchAddinserted = res.inserted
102
            this.notify(`新增成功条数${res.inserted}, id列表: ${res.ids.join(',')}`, '提示')
雪洛's avatar
雪洛 已提交
103
          })
雪洛's avatar
雪洛 已提交
104
          .catch((err : any | null) => {
雪洛's avatar
雪洛 已提交
105 106
            uni.hideLoading()
            const error = err as UniCloudError
107
            this.notify(error.errMsg, '错误')
雪洛's avatar
雪洛 已提交
108 109
          })
      },
110
      async dbGet() : Promise<void> {
雪洛's avatar
雪洛 已提交
111 112 113 114
        uni.showLoading({
          title: '加载中...'
        })
        const db = uniCloud.databaseForJQL()
115
        await db.collection('type')
雪洛's avatar
雪洛 已提交
116
          .where(
117
            `tag == "${this.dataTag}"`
雪洛's avatar
雪洛 已提交
118
          )
雪洛's avatar
雪洛 已提交
119 120 121 122 123
          .field('num, tag')
          .orderBy('num desc')
          .skip(1)
          .limit(2)
          .get()
雪洛's avatar
雪洛 已提交
124
          .then(res => {
雪洛's avatar
雪洛 已提交
125 126
            uni.hideLoading()
            console.log(res)
雪洛's avatar
雪洛 已提交
127
            this.getData = res.data
128
            this.notify(`获取成功,取到了${res.data.length}条数据`, '提示')
雪洛's avatar
雪洛 已提交
129
          })
雪洛's avatar
雪洛 已提交
130
          .catch((err : any | null) => {
雪洛's avatar
雪洛 已提交
131 132
            uni.hideLoading()
            const error = err as UniCloudError
133
            this.notify(error.errMsg, '错误')
雪洛's avatar
雪洛 已提交
134 135
          })
      },
136
      async dbGetWithCommand() : Promise<void> {
雪洛's avatar
雪洛 已提交
137 138 139 140
        uni.showLoading({
          title: '加载中...'
        })
        const db = uniCloud.databaseForJQL()
141
        await db.collection('type')
雪洛's avatar
雪洛 已提交
142
          .where({
143 144
            num: db.command.gt(1),
            tag: this.dataTag
雪洛's avatar
雪洛 已提交
145
          })
雪洛's avatar
雪洛 已提交
146 147 148 149 150
          .field('num, tag')
          .orderBy('num desc')
          .skip(1)
          .limit(2)
          .get()
雪洛's avatar
雪洛 已提交
151
          .then(res => {
雪洛's avatar
雪洛 已提交
152 153
            uni.hideLoading()
            console.log(res)
雪洛's avatar
雪洛 已提交
154
            this.getWithCommandData = res.data
155
            this.notify(`获取成功,取到了${res.data.length}条数据`, '提示')
雪洛's avatar
雪洛 已提交
156
          })
雪洛's avatar
雪洛 已提交
157
          .catch((err : any | null) => {
雪洛's avatar
雪洛 已提交
158 159
            uni.hideLoading()
            const error = err as UniCloudError
160
            this.notify(error.errMsg, '错误')
雪洛's avatar
雪洛 已提交
161 162
          })
      },
163
      async dbUpdate() : Promise<void> {
雪洛's avatar
雪洛 已提交
164 165 166 167
        uni.showLoading({
          title: '加载中...'
        })
        const db = uniCloud.databaseForJQL()
168
        await db.collection('type')
雪洛's avatar
雪洛 已提交
169
          .where(
170
            `tag == "${this.dataTag}"`
雪洛's avatar
雪洛 已提交
171 172 173
          )
          .update({
            num: 4
雪洛's avatar
雪洛 已提交
174
          })
雪洛's avatar
雪洛 已提交
175
          .then(res => {
雪洛's avatar
雪洛 已提交
176 177
            uni.hideLoading()
            console.log(res)
雪洛's avatar
雪洛 已提交
178
            this.updateUpdated = res.updated
179
            this.notify(`更新成功,更新了${res.updated}条数据`, '提示')
雪洛's avatar
雪洛 已提交
180
          })
雪洛's avatar
雪洛 已提交
181
          .catch((err : any | null) => {
雪洛's avatar
雪洛 已提交
182 183
            uni.hideLoading()
            const error = err as UniCloudError
184
            this.notify(error.errMsg, '错误')
雪洛's avatar
雪洛 已提交
185 186
          })
      },
187
      async dbRemove() : Promise<void> {
雪洛's avatar
雪洛 已提交
188 189 190 191
        uni.showLoading({
          title: '加载中...'
        })
        const db = uniCloud.databaseForJQL()
192
        await db.collection('type')
雪洛's avatar
雪洛 已提交
193
          .where(
194
            `tag == "${this.dataTag}"`
雪洛's avatar
雪洛 已提交
195 196
          )
          .remove()
雪洛's avatar
雪洛 已提交
197
          .then(res => {
雪洛's avatar
雪洛 已提交
198 199
            uni.hideLoading()
            console.log(res)
雪洛's avatar
雪洛 已提交
200
            this.removeDeleted = res.deleted
201
            this.notify(`删除成功,删掉了${res.deleted}条数据`, '提示')
雪洛's avatar
雪洛 已提交
202
          })
雪洛's avatar
雪洛 已提交
203
          .catch((err : any | null) => {
雪洛's avatar
雪洛 已提交
204 205
            uni.hideLoading()
            const error = err as UniCloudError
206
            this.notify(error.errMsg, '错误')
雪洛's avatar
雪洛 已提交
207 208
          })
      },
209
      async dbLookupInit() : Promise<void> {
雪洛's avatar
雪洛 已提交
210 211 212 213
        uni.showLoading({
          title: '加载中...'
        })
        const db = uniCloud.databaseForJQL()
214 215
        await db.collection('local')
          .where(`tag == "${this.dataTag}"`)
雪洛's avatar
雪洛 已提交
216 217 218
          .remove()
          .then(() : Promise<UniCloudDBRemoveResult> => {
            return db.collection('foreign')
219
              .where(`tag == "${this.dataTag}"`)
雪洛's avatar
雪洛 已提交
220 221 222 223 224 225 226
              .remove()
          })
          .then(() : Promise<UniCloudDBBatchAddResult> => {
            return db.collection('local')
              .add([{
                id: "local_1",
                name: "local_1_name",
227
                tag: this.dataTag,
雪洛's avatar
雪洛 已提交
228 229 230 231
                foreign_id: "foreign_1"
              }, {
                id: "local_2",
                name: "local_2_name",
232
                tag: this.dataTag,
雪洛's avatar
雪洛 已提交
233 234 235 236 237 238 239 240
                foreign_id: "foreign_2"
              }])
          })
          .then(() : Promise<UniCloudDBBatchAddResult> => {
            return db.collection('foreign')
              .add([{
                id: "foreign_1",
                name: "foreign_1_name",
241
                tag: this.dataTag
雪洛's avatar
雪洛 已提交
242 243 244
              }, {
                id: "foreign_2",
                name: "foreign_2_name",
245
                tag: this.dataTag
雪洛's avatar
雪洛 已提交
246 247
              }])
          })
雪洛's avatar
雪洛 已提交
248
          .then((_) : void => {
雪洛's avatar
雪洛 已提交
249
            uni.hideLoading()
250
            this.notify('数据初始化成功', '提示')
雪洛's avatar
雪洛 已提交
251
          })
雪洛's avatar
雪洛 已提交
252
          .catch((err : any | null) => {
雪洛's avatar
雪洛 已提交
253 254 255
            uni.hideLoading()
            console.error(err)
            const error = err as UniCloudError
256
            this.notify(error.errMsg, '错误')
雪洛's avatar
雪洛 已提交
257 258
          })
      },
259
      async dbLookup() : Promise<void> {
雪洛's avatar
雪洛 已提交
260 261 262 263 264
        uni.showLoading({
          title: '加载中...'
        })
        const db = uniCloud.databaseForJQL()
        const local = db.collection('local')
265
          .where(`tag == "${this.dataTag}"`)
雪洛's avatar
雪洛 已提交
266 267
          .getTemp()
        const foreign = db.collection('foreign')
268
          .where(`tag == "${this.dataTag}"`)
雪洛's avatar
雪洛 已提交
269
          .getTemp()
270
        await db.collection(local, foreign)
雪洛's avatar
雪洛 已提交
271
          .get()
雪洛's avatar
雪洛 已提交
272
          .then(res => {
雪洛's avatar
雪洛 已提交
273 274
            uni.hideLoading()
            console.log(res)
雪洛's avatar
雪洛 已提交
275
            this.lookupData = res.data
276
            this.notify(`联表查询成功,取到了${res.data.length}条数据`, '提示')
雪洛's avatar
雪洛 已提交
277
          })
雪洛's avatar
雪洛 已提交
278
          .catch((err : any | null) => {
雪洛's avatar
雪洛 已提交
279 280
            uni.hideLoading()
            const error = err as UniCloudError
281
            this.notify(error.errMsg, '错误')
雪洛's avatar
雪洛 已提交
282
          })
雪洛's avatar
雪洛 已提交
283
      },
284
      async dbMultiSend() {
雪洛's avatar
雪洛 已提交
285 286 287 288 289 290 291 292 293
        const db = uniCloud.databaseForJQL()
        const temp1 = db.collection('type')
          .where(
            'tag == "default-tag"'
          ).getTemp()
        const temp2 = db.collection('type')
          .where(
            'tag == "default-tag"'
          ).getTemp()
294
        await db.multiSend(temp1, temp2)
雪洛's avatar
雪洛 已提交
295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315
          .then<void>(res => {
            uni.hideLoading()
            let successCount = 0
            for (let i = 0; i < res.dataList.length; i++) {
              const item = res.dataList[i]
              if(item.errCode == 0) {
                console.log(`第${i}个请求查询到${item.data!.length}条数据`)
                successCount++
              } else {
                console.error(`第${i}个请求查询失败,错误信息:${item.data!.length}`)
              }
            }
            this.multiSendSuccessCount = successCount
            this.notify(`合并查询成功,成功查询的语句条数为:${successCount}`, '提示')
          })
          .catch<void>((err : any | null) => {
            uni.hideLoading()
            const error = err as UniCloudError
            console.error(err)
            this.notify(error.errMsg, '错误')
          })
雪洛's avatar
雪洛 已提交
316 317 318 319 320 321
      }
    }
  }
</script>

<style>
雪洛's avatar
雪洛 已提交
322
</style>