HarmonyOS 鸿蒙Next relationalStore 获取数据库能成功,但是创建表格的时候报错了

发布于 1周前 作者 h691938207 来自 鸿蒙OS

HarmonyOS 鸿蒙Next relationalStore 获取数据库能成功,但是创建表格的时候报错了

relationalStore 获取数据库能成功,但是创建表格的时候报错了
 创建表格的代码
createHomeAppTypeSql = ‘CREATE TABLE IF NOT EXISTS HOMEAPPTYPE(ID INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,NAME TEXT,TYPE TEXT, LISTIDS TEXT)’;

async createHomeAppTypeTable(){
relationalStore.getRdbStore(getContext(), this.STORE_CONFIG, (err, store) => {
if (err) {
console.error(Failed to get iCE_DB. Code:${err.code}, message:${err.message});
return;
}
console.info(‘Succeeded in getting iCE_DB.’);

// 当数据库创建时,数据库默认版本为0
if (store.version === 0) {
store.executeSql(this.createHomeAppTypeSql,(error:BusinessError)=>{
if(error){
console.error(’=======create table error:’+error.code+’;error menssage:’+error.message);
return
}
console.info(’=======create table success!!!’)

}); // 创建数据表
// 设置数据库的版本,入参为大于0的整数
// store.version = 3;
}
});

输出日志:
Succeeded in getting iCE_DB.
=======create table error:14800000;error menssage:Inner error. Inner code is -1

3 回复

参考以下代码示例:

rdbStore?: relationalStore.RdbStore;
private context: Context = getContext(this) as common.UIAbilityContext;
dataSet?: relationalStore.ResultSet;
dbSet: Array<ShoppingCartSourceObject> = [];

MyGetRdbStore() {
 interface StoreConfig
 {
   name: string;
   securityLevel: relationalStore.SecurityLevel;
 }

 const STORE_CONFIG: relationalStore.StoreConfig = {
   name: 'ShoppingCart.db', // 数据库文件名
   securityLevel: relationalStore.SecurityLevel.S1, // 数据库安全级别
   encrypt: true // 可选参数,指定数据库是否加密,默认不加密
   //dataGroupId: 'dataGroupID' // 可选参数,仅可在Stage模型下使用,表示为应用组ID,需要向应用市场获取。指定在此Id对应的沙箱路径下创建实例,当此参数不填时,默认在本应用沙箱目录下创建。
 };

 relationalStore.getRdbStore(this.context, STORE_CONFIG, (err, store) => {
   if (err) {
     console.error(`Failed to get RdbStore. Code:${err.code}, message:${err.message}`);
     return;
   }
   else {
     console.info(`Succeeded in getting RdbStore.`);
   }
   this.rdbStore = store;
   this.CreateTable()
 })
}

CreateTable() {
 const SQL_CREATE_TABLE =
   'CREATE TABLE IF NOT EXISTS SHOPPINGCART (ID INTEGER PRIMARY KEY AUTOINCREMENT,TITLE TEXT NOT NULL, DETAIL TEXT NOT NULL, IMAGEID INTEGER, PRICE INTEGER, COUNT INTEGER)';
 if (this.rdbStore != undefined) {
   this.rdbStore.executeSql(SQL_CREATE_TABLE);
   console.log("建表成功")
 }
}
sql写错了,数据库用的是sqlite,你需要用sqlite的语法

针对您提到的HarmonyOS鸿蒙Next relationalStore在获取数据库成功后,创建表格时报错的问题,这通常可能由以下几个原因引起:

  1. SQL语法错误:检查您的SQL创建表语句是否符合规范,包括数据类型、字段名、约束条件等是否正确定义。

  2. 权限问题:确保您的应用或进程有足够的权限去修改数据库结构。在某些系统或数据库配置中,可能需要特定的权限才能执行DDL(数据定义语言)操作。

  3. 数据库状态:确认数据库当前是否处于可写状态,以及是否因为之前的操作(如未提交的事务)而处于锁定状态。

  4. 资源限制:检查数据库是否因为达到资源限制(如最大表数、字段数等)而无法创建新表。

  5. 版本兼容性:确认您使用的HarmonyOS鸿蒙Next relationalStore API版本与您的数据库版本兼容。

请逐一排查上述可能原因,并相应调整。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部