金昔302 2023-05-26 17:55 采纳率: 33.3%
浏览 55

deveco studio查询数据库失败

我在deveco studio里面使用api8里面的js编写应用。
这是data.js用于存放创建数据库的数据:

xport const  data={
    ART: [
        {
            "ID": 1,
            "address": "中国",
            "author": "陈凯歌",
            "author_introduction": "1987年陈凯歌与洪晃同居。1989年陈凯歌与洪晃在美国结婚。1991年陈凯歌与洪晃离婚;同年陈凯歌与陈红在美国注册结婚。",
            "basic_information": "《霸王别姬》改编自李碧华同名小说,叙述伶人程蝶衣对国粹艺术的执著,进而投影出历史与文化在大时代的演变下,造成的激荡与人生。影片蕴含深厚的文化内涵,气势恢宏,感情强烈,情节细腻深远。本片获得第46届法国戛纳国际电影节金棕榈奖,成为第一部也是迄今唯一获得此奖项的华语电影。",
            "collect": 20000,
            "collect_text": 0,
            "name": "霸王别姬",
            "people_image": 1,
            "work_image": 1
        },
        {
            "ID": 2,
            "address": "英国",
            "author": "威廉·莎士比亚",
            "author_introduction": "威廉·莎士比亚,英国文艺复兴时期剧作家、诗人。被誉为“人类文学奥林匹斯山上的宙斯”。",
            "basic_information": "《哈姆雷特》是由英国剧作家威廉·莎士比亚创作于1599年至1602年间的一部悲剧作品。戏剧讲述了叔叔克劳狄斯谋害了哈姆雷特的父亲,篡取了王位,并娶了国王的遗孀乔特鲁德;哈姆雷特王子因此为父王向叔叔复仇。《哈姆雷特》是威廉·莎士比亚所有戏剧中篇幅最长的一部,  也是莎士比亚最负盛名的剧本,具有深刻的悲剧意义。复杂的人物性格以及丰富完美的悲剧艺术手法,代表着整个西方文艺复兴时期文学的最高成就。同《麦克白》《李尔王》和《奥赛罗》一起组成莎士比亚“四大悲剧”。",
            "collect": 17568,
            "collect_text": 0,
            "name": "哈姆雷特",
            "people_image": 2,
            "work_image": 2
        },
        {
            "ID": 3,
            "address": "英国",
            "author": "威廉·莎士比亚",
            "author_introduction": "威廉·莎士比亚,英国文艺复兴时期剧作家、诗人。被誉为“人类文学奥林匹斯山上的宙斯”。",
            "basic_information": "《李尔王》是威廉·莎士比亚创作的戏剧,是其四大悲剧之一。故事来源于英国的一个古老传说,故事本身大约发生在8世纪左右。后在英国编成了许多戏剧,现存的戏剧除莎士比亚外,还有一个更早的无名氏作品,一般认为莎士比亚的李尔王是改编此剧而创作的。故事讲述了年事已高的国王李尔王退位后,被大女儿和二女儿赶到荒郊野外,成为法兰西皇后的三女儿率军救父,却被杀死,李尔王伤心地死在她身旁。",
            "collect": 18000,
            "collect_text": 0,
            "name": "李尔王",
            "people_image": 3,
            "work_image": 3
        },
        {
            "ID": 4,
            "address": "英国",
            "author": "威廉·莎士比亚",
            "author_introduction": "威廉·莎士比亚,英国文艺复兴时期剧作家、诗人。被誉为“人类文学奥林匹斯山上的宙斯”。",
            "basic_information": "《麦克白》是威廉·莎士比亚创作的戏剧,是其四大悲剧之一。故事来源于英国的一个古老传说,故事本身大约发生在8世纪左右。后在英国编成了许多戏剧,现存的戏剧除莎士比亚外,还有一个更早的无名氏作品,一般认为莎士比亚的李尔王是改编此剧而创作的。故事讲述了年事已高的国王李尔王退位后,被大女儿和二女儿赶到荒郊野外,成为法兰西皇后的三女儿率军救父,却被杀死,李尔王伤心地死在她身旁。",
            "collect": 12300,
            "collect_text": 0,
            "name": "麦克白",
            "people_image": 4,
            "work_image": 4
        },
        {
            "ID": 5,
            "address": "英国",
            "author": "威廉·莎士比亚",
            "author_introduction": "威廉·莎士比亚,英国文艺复兴时期剧作家、诗人。被誉为“人类文学奥林匹斯山上的宙斯”。",
            "basic_information": "《奥赛罗》是威廉·莎士比亚创作的四大悲剧之一,大约于1603年所写作的。这出戏最早于1604年11月1日在伦敦的Whitehall Palace首演。作品讲述奥赛罗是威尼斯公国一员勇将。他与元老的女儿苔丝狄蒙娜相爱。因为两人年纪相差太多,婚事未被准许。两人只好私下成婚。奥赛罗手下有一个阴险的旗官伊阿古,一心想除掉奥赛罗。他先是向元老告密,不料却促成了两人的婚事。他又挑拨奥赛罗与苔丝狄蒙娜的感情,说另一名副将凯西奥与苔丝狄蒙娜关系不同寻常,并伪造了所谓定情信物等。奥赛罗信以为真,在愤怒中掐死了自己的妻子。当他得知真相后,悔恨之余拔剑自刎,倒在了苔丝狄蒙娜身边。",
            "collect": 11000,
            "collect_text": 0,
            "name": "奥赛罗",
            "people_image": 5,
            "work_image": 5
        },
        {
            "ID": 6,
            "address": "英国",
            "author": "威廉·莎士比亚",
            "author_introduction": "威廉·莎士比亚,英国文艺复兴时期剧作家、诗人。被誉为“人类文学奥林匹斯山上的宙斯”。",
            "basic_information": "圣女贞德,法国民族英雄,天主教圣人,英法百年战争中的重要人物。贞德原为农村少女,在13岁时声称得到“上主的启示”,要求她带兵收复被英格兰占领的失地。在几番转折后,贞德得到王太子查理授予的兵权,于1429年成功解除奥尔良之围,同年再于帕提战役中大破英军。她在数月间接连收复法国北部大量失地,并夺下兰斯,护送查理至兰斯大教堂加冕为王,成为查理七世。但她于1430年在贡比涅的一次冲突中被勃艮第公国俘获,不久为英格兰人以重金购去,由英格兰当局控制下的宗教裁判所以异端和女巫罪判处她火刑。1431年,贞德在法国鲁昂遇害,年仅19岁。当英军被彻底逐出法国时,罗马教廷下令重审贞德一案,最终于1456年为她平反。1920年,教宗本笃十五世追封贞德为圣人。贞德是推动法国民族意识觉醒的重要人物,她本人在身后也成为了西方文化的一个重要符号。自拿破仑以来,法国的军政人物都曾以她的形象进行不同角度的宣传;教会视其事迹为神迹 。而欧洲主要的作家和作曲家都创作过有关贞德的作品,大量以她为题材的电影、戏剧和音乐创作也延续。",
            "collect": 13200,
            "collect_text": 0,
            "name": "圣女贞德",
            "people_image": 6,
            "work_image": 6
        },
        {
            "ID": 7,
            "address": "中国",
            "author": "东晋时期所著",
            "author_introduction": "东晋,中国朝代,乃西晋司马氏政权的延续。东晋与三国时期的东吴以及其后的宋、齐、梁、陈,合称为六朝。同时北方有多个游牧民族建立政权并连年征战,史称五胡十六国时期。",
            "basic_information": "《梁山伯与祝英台》,简称《梁祝》,是中国古代民间四大爱情故事之一(另外三个为《白蛇传》、《孟姜女传说》和《牛郎织女》),是中国最具魅力的口头传承艺术及国家级非物质文化遗产,也是在世界上产生广泛影响的中国民间传说。自东晋始,梁祝故事在民间流传已有1700多年,在中国可谓家喻户晓,被誉为爱情的千古绝唱。",
            "collect": 12200,
            "collect_text": 0,
            "name": "梁祝",
            "people_image": 7,
            "work_image": 7
        },
        {
            "ID": 8,
            "address": "中国",
            "author": "曹雪芹",
            "author_introduction": "曹雪芹,名霑,字梦阮,号雪芹,又号芹溪、芹圃,中国古典名著《红楼梦》的作者,祖籍存在争议(辽宁辽阳、河北丰润或辽宁铁岭 ),出生于江宁(今南京),曹雪芹出身清代内务府正白旗包衣世家,他是江宁织造曹寅之孙 ,曹顒之子(一说曹頫之子)",
            "basic_information": "《红楼梦》,原名《石头记》,中国古代章回体长篇小说,中国古典四大名著之一。其通行本共120回,一般认为前80回是清代作家曹雪芹所著,后40回作者为无名氏,由高鹗,程伟元整理。小说以贾、史、王、薛四大家族的兴衰为背景,以富贵公子贾宝玉为视角,以贾宝玉与林黛玉、薛宝钗的爱情婚姻悲剧为主线,描绘了一些闺阁佳人的人生百态,展现了真正的人性美和悲剧美,是一部从各个角度展现女性美以及中国古代社会百态的史诗性著作。",
            "collect": 11200,
            "collect_text": 0,
            "name": "红楼梦",
            "people_image": 8,
            "work_image": 8
        },
        {
            "ID": 9,
            "address": "意大利",
            "author": "大仲马",
            "author_introduction": "亚历山大·仲马是法国著名小说家大仲马任奥尔良公爵秘书处的文书抄写员时与一女裁缝所生的私生子。因与其父重名而被称为小仲马。",
            "basic_information": "《茶花女》是意大利作曲家威尔第在观赏这部以法国文学家小仲马著名小说为本的戏剧《茶花女》后,备受感动,立即邀请剧作家修改剧本,以短短6周时间谱曲完成,改编为歌剧。《茶花女》是意大利歌剧泰斗威尔第“通俗三部曲”中的最后一部(其余两部是《弄臣》和《游吟诗人》),也是世界歌剧史上最卖座的经典作品之一。",
            "collect": 11010,
            "collect_text": 0,
            "name": "茶花女",
            "people_image": 9,
            "work_image": 9
        },
        {
            "ID": 10,
            "address": "英国",
            "author": "威廉·莎士比亚",
            "author_introduction": "威廉·莎士比亚,英国文艺复兴时期剧作家、诗人。被誉为“人类文学奥林匹斯山上的宙斯”。",
            "basic_information": "在一场盛大的舞会上,罗密欧和朱丽叶相遇了。然而,两人所在的家族相互有着深仇大恨,所以情投意合的两人根本就没有可能走到一起。",
            "collect": 12500,
            "collect_text": 0,
            "name": "罗密欧与朱丽叶",
            "people_image": 10,
            "work_image": 10
        }
    ],
};

在app.js里面进行数据库创建,我在app.js里面使用查询函数可以查询到,应该是创建成功了:

import data_rdb from '@ohos.data.rdb';
import featureAbility from '@ohos.ability.featureAbility';
import {data} from "../MainAbility/pages/data";

var D=data.ART;
export default {
    data:{
        index:0,
        rdbStore:null,//要打开的数据库
        length:D.length,
        //艺术模块
        art:{
            ID: 0,
            name: "",
            basic_information: "",
            work_image: 0,
            author: "",
            author_introduction: "",
            people_image: 0,
            collect_text: 0,
            collect: 0,
            address: "",
        },
    },
    async onCreate() {
        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));
        }
    
    },

    onDestroy() {
        console.info('AceApplication onDestroy');
    },
    //创建数据库
    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);
        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)
            }

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

        }).catch((err) => {
            console.log("是创建数据库失败: " + err)
        })
    },
}

我想在index.js;里面进行查询该数据库,但是我下面的代码无法实现,应该是在出现错误:

import router from '@system.router';
import prompt from '@system.prompt';
import featureAbility from '@ohos.ability.featureAbility';
import data_rdb from '@ohos.data.rdb';
import app from '../../app' // 导入app.js文件
var max = 10;
var info = null;

export default {
    data: {
      
        art:{
            "ID": 1,
            "address": "",
            "author": "",
            "author_introduction": "",
            "basic_information": "",
            "collect": 20000,
            "collect_text": 0,
            "name": "",
            "people_image": 1,
            "work_image": 1
        },    
    },

    onInit() {

    },
    async viewArt(tableName, id) { //查询
        console.log("是进入了查询")
        let predsInfo = new data_rdb.RdbPredicates(tableName)
        predsInfo.equalTo("ID", id)
        console.log("是view1")
        return new Promise((resolve, reject) => {
            console.log("是view2")
            app.rdbStore.query(predsInfo, ["*"]).then((resultSet) => {
                console.log("是view3")
                if (resultSet.goToNextRow()) {
                    console.log("是view4")
                    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) // 将查询结果传递出去
                } else {
                    reject(new Error(`No record found with ID ${id} in table ${tableName}`))
                }
            }).catch(err => {
                console.info('是查询表记录错误' + err)
                reject(err) // 将错误传递出去
            })
        })
    },
  
    async onindex(){//实现刷新功能
        console.log("是1")
        await this.viewArt("allart",5)
        console.log("是2")
    },

}


  • 写回答

1条回答 默认 最新

  • 泡沫o0 2023年度博客之星上海赛道TOP 1 2023-06-24 12:23
    关注

    @ada;
    求助

    评论

报告相同问题?

问题事件

  • 创建了问题 5月26日

悬赏问题

  • ¥15 phython如何实现以下功能?查找同一用户名的消费金额合并—
  • ¥15 孟德尔随机化怎样画共定位分析图
  • ¥18 模拟电路问题解答有偿速度
  • ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
  • ¥15 误删注册表文件致win10无法开启
  • ¥15 请问在阿里云服务器中怎么利用数据库制作网站
  • ¥60 ESP32怎么烧录自启动程序
  • ¥50 html2canvas超出滚动条不显示
  • ¥15 java业务性能问题求解(sql,业务设计相关)
  • ¥15 52810 尾椎c三个a 写蓝牙地址