deveco studio 使用js创建数据库

这是在index.js里面编写的代码,我想在这里面创建数据库rdbstore,然后在其他页面进行增删改查,但是现在在另外页面却无法使用

import router from '@system.router';
import prompt from '@system.prompt';
import featureAbility from '@ohos.ability.featureAbility';
import data_rdb from '@ohos.data.rdb';
import {data} from "../data";
var max = 10;
var info = null;
var D=data.ART;

export default {
    data: {
      length:D.length,
        //艺术模块
        art:{
            ID: 0,
            name: "",
            basic_information: "",
            work_image: 0,
            author: "",
            author_introduction: "",
            people_image: 0,
            collect_text: 0,
            collect: 0,
            address: "",
        },
        rdbStore:null,
        m:0,
    },
    async onInit() {
        if (this.m==0) {
            console.info('AceApplication onCreate');
            await this.creat()
            var i=1;
            while (this.rdbStore == null) {
                console.log("创建数据库是第"+i+"次等待");
                i++;
                await new Promise(resolve => setTimeout(resolve, 100));
            }
          }
    },
    creat() {
        //创建表
        const SQL_CREATE_TABLE_allart ="CREATE TABLE IF NOT EXISTS allart (" +
        "ID INTEGER PRIMARY KEY AUTOINCREMENT, " +
        "name TEXT, " +
        "basic_information TEXT, "  +
        "work_image INTEGER , " +
        "author TEXT , " +
        "author_introduction TEXT, " +
        "people_image INTEGER , " +
        "collect_text INTEGER,"+
        "collect INTEGER, " +
        "address TEXT );"
        var context = featureAbility.getContext()
        const STORE_CONFIG = { name: "art.db" }
        let promise = data_rdb.getRdbStore(context, STORE_CONFIG, 1);
        return promise.then(async (store) => {
            console.info('是创建数据库成功')
            store.executeSql(SQL_CREATE_TABLE_allart)

            let promises = []
            for (let i = 0; i < D.length; i++) {
                let promise = new Promise((resolve, reject) => {
                    store.insert("allart", D[i]).then((ret) => {
                        console.log("是插入成功: " + ret)
                        resolve(ret)
                    }, (err) => {
                        console.log("是插入失败: " + err)
                        reject(err)
                    })
                })
                promises.push(promise)
            }

            return Promise.all(promises).then((values) => {
                console.log("是全部插入成功")
                this.rdbStore=store
                return this.rdbStore
            }).catch((err) => {
                console.log("是发生错误: " + err)
                throw err
            })

        }).catch((err) => {
            console.log("是创建数据库失败: " + err)
        })
    },
    //查询
    async viewArt(tableName, id) { //查询
        let predsInfo = new data_rdb.RdbPredicates(tableName)
        predsInfo.equalTo("ID", id)
        return new Promise((resolve, reject) => {
            this.rdbStore.query(predsInfo, ["*"]).then((resultSet) => {
                while (resultSet.goToNextRow()) {
                    console.info(resultSet.columnNames[0] + "是:" + resultSet.getInt(0)) //ID
                    console.info(resultSet.columnNames[1] + "是:" + resultSet.getString(1)) //name
                    this.art = {
                        ID: resultSet.getInt(0),
                        name: resultSet.getString(1),
                        basic_information: resultSet.getString(2),
                        work_image: resultSet.getInt(3),
                        author: resultSet.getString(4),
                        author_introduction: resultSet.getString(5),
                        people_image: resultSet.getInt(6),
                        collect_text: resultSet.getInt(7),
                        collect: resultSet.getInt(8),
                        address: resultSet.getString(9)
                    }
                    console.log("art.id是" + this.art.ID)
                    resolve(this.art) // 将查询结果传递出去
                }
            }).catch(err => {
                console.info('是查询表记录错误' + err)
                reject(err) // 将错误传递出去
            })
        })
    },
    async onindex(){//实现刷新功能
        console.log("是1")
        await this.viewArt("allart",5)
        console.log("是2")
    },
    onfound(){
        router.push({
            uri:'pages/found/found',
            params:{
              rdbStore:this.rdbStore
            },
        })
    },
}

这是在found.js里面的代码,传递的rdbStore,查询不了,当返回到index.js界面后,原本的数据库也被消失了

import router from '@system.router';
import mediaquery from '@system.mediaquery';
import data_rdb from '@ohos.data.rdb';

export default {
    data: {
        rdbStore:null,
        art:{
            ID: 0,
            name: "",
            basic_information: "",
            work_image: 0,
            author: "",
            author_introduction: "",
            people_image: 0,
            collect_text: 0,
            collect: 0,
            address: "",
        },
    },
    onInit() {

    },
    onindex() {
        router.push({
            uri: 'pages/index/index',
            params:{
                m:1,
                rdbStore:this.rdbStore
            }
        })
    },
    async viewArt(tableName, id) { //查询
        let predsInfo = new data_rdb.RdbPredicates(tableName)
        predsInfo.equalTo("ID", id)
        return new Promise((resolve, reject) => {
            this.rdbStore.query(predsInfo, ["*"]).then((resultSet) => {
                while (resultSet.goToNextRow()) {
                    console.info(resultSet.columnNames[0] + "是:" + resultSet.getInt(0)) //ID
                    console.info(resultSet.columnNames[1] + "是:" + resultSet.getString(1)) //name
                    this.art = {
                        ID: resultSet.getInt(0),
                        name: resultSet.getString(1),
                        basic_information: resultSet.getString(2),
                        work_image: resultSet.getInt(3),
                        author: resultSet.getString(4),
                        author_introduction: resultSet.getString(5),
                        people_image: resultSet.getInt(6),
                        collect_text: resultSet.getInt(7),
                        collect: resultSet.getInt(8),
                        address: resultSet.getString(9)
                    }
                    console.log("art.id是" + this.art.ID)
                    resolve(this.art) // 将查询结果传递出去
                }
            }).catch(err => {
                console.info('是查询表记录错误' + err)
                reject(err) // 将错误传递出去
            })
        })
    },

    async onfound() {
        console.log("是1")
        await this.viewArt("allart",6)
        console.log("是2")//实现刷新功能
    },
  }


根据提供的代码和描述,问题可能出现在以下几个方面:

数据库连接未成功建立:在使用数据存储模块前,需要先通过 data_rdb.openDatabase() 方法打开数据库连接。建议在 App 的入口文件(如 app.js)中完成此操作,并将打开的数据库连接作为参数传递到各个页面。如果数据库连接未成功建立,后续的数据库操作都会失败。

数据库表名或字段名不正确:在查询数据库时,需要指定正确的表名和字段名。请确保表名和字段名与数据库中的实际名称一致,否则查询会失败。

数据库查询未返回正确结果:在 viewArt() 方法中,查询结果应当是一个数组,而不是一个单独的对象。因此,应当使用 resultSet.goToFirstRow() 方法将结果集游标移到第一行,然后使用 resultSet.getColumnCount() 方法获取结果集中的列数,最后使用 resultSet.getString(colIndex) 方法获取指定列的值。如果查询未返回正确结果,可能是因为代码中没有正确处理结果集。

数据库连接被意外关闭:如果打开的数据库连接被意外关闭,后续的数据库操作都会失败。请确保在使用完数据库后,及时关闭数据库连接,可以使用 data_rdb.close() 方法关闭数据库连接。

综上所述,建议您在代码中添加必要的错误处理和日志输出,以便更好地定位问题所在。同时,可以参考官方文档和示例代码,学习并掌握数据存储模块的使用方法。