unicloud-database.uvue 10.1 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 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315
      },
      dbMultiSend() {
        const db = uniCloud.databaseForJQL()
        const temp1 = db.collection('type')
          .where(
            'tag == "default-tag"'
          ).getTemp()
        const temp2 = db.collection('type')
          .where(
            'tag == "default-tag"'
          ).getTemp()
        db.multiSend(temp1, temp2)
          .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>