HarmonyOS 鸿蒙Next relationalStore 获取数据库能成功,但是创建表格的时候报错了
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(
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
创建表格的代码
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在获取数据库成功后,创建表格时报错的问题,这通常可能由以下几个原因引起:
-
SQL语法错误:检查您的SQL创建表语句是否符合规范,包括数据类型、字段名、约束条件等是否正确定义。
-
权限问题:确保您的应用或进程有足够的权限去修改数据库结构。在某些系统或数据库配置中,可能需要特定的权限才能执行DDL(数据定义语言)操作。
-
数据库状态:确认数据库当前是否处于可写状态,以及是否因为之前的操作(如未提交的事务)而处于锁定状态。
-
资源限制:检查数据库是否因为达到资源限制(如最大表数、字段数等)而无法创建新表。
-
版本兼容性:确认您使用的HarmonyOS鸿蒙Next relationalStore API版本与您的数据库版本兼容。
请逐一排查上述可能原因,并相应调整。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。