1***@qq.com
1***@qq.com
  • 发布:2025-06-28 16:25
  • 更新:2025-06-28 16:25
  • 阅读:47

模拟器运行Android plus.sqlite.executeSql 删除表 成功失败回调都不执行

分类:uni-app

模拟器运行Android plus.sqlite.executeSql 删除表 成功失败回调都不执行 (链接、创建表、插入数据正常)

import { DBNAME } from "@/common/config";  

function asyncExecuteSql(sql: Array<string>, name: string) {  
  console.log("asyncExecuteSql", sql);  
  return new Promise((resolve, reject) => {  
    plus.sqlite.executeSql({  
      name,  
      sql,  
      success: function (e) {  
        console.log("executeSql success");  
        resolve(e);  
      },  
      fail: function (e) {  
        console.log("executeSql failed: " + JSON.stringify(e));  
        reject(e);  
      },  
    });  
  });  
}  
function asyncSelectSql(sql: string, name: string) {  
  return new Promise((resolve, reject) => {  
    plus.sqlite.selectSql({  
      name,  
      sql,  
      success: function (e) {  
        console.log("selectSql success");  
        resolve(e);  
      },  
      fail: function (e) {  
        console.log("selectSql failed: " + JSON.stringify(e));  
        reject(e);  
      },  
    });  
  });  
}  

//  
class SQLDB {  
  // 本地库  
  db: any;  
  DBName: string;  
  //  
  options: any;  
  // 默认操作表  
  defaultTable: string;  

  asyncExecuteSql = asyncExecuteSql;  
  asyncSelectSql = asyncSelectSql;  

  constructor(config: any = {}) {  
    //  
    this.DBName = `${DBNAME}.db`;  
    this.options = {  
      name: `${this.DBName}`,  
      path: `_doc/${this.DBName}`, // 数据库文件路径  
    };  
    this.defaultTable = config.defaultTable || "notes";  
    this.initDB();  
  }  
  //  
  async initDB() {  
    try {  
      console.log("==> initDB 数据库初始化");  
      await this.linkDB();  
      // this.db = res  
      await this.initTable();  
      await this.table.delete("note");  
      console.log("==> initDB 数据库初始化 end");  
    } catch (error) {  
      console.error("==> initDB", error);  
    }  
  }  
  //  
  linkDB() {  
    return new Promise((resolve, reject) => {  
      // 如果数据库存在则打开,不存在则创建  
      plus.sqlite.openDatabase({  
        ...this.options,  
        success: (res) => {  
          console.log("openDatabase success");  
          resolve(res);  
        },  
        fail: (e) => {  
          console.error("openDatabase fail");  
          reject(e);  
        },  
      });  
    });  
  }  

  // isOpenDatabase 判断数据库是否打开  
  isOpen() {  
    return plus.sqlite.isOpenDatabase(this.options);  
  }  
  closeDB() {  
    plus.sqlite.closeDatabase({  
      ...this.options,  
      success: function (e) {  
        console.log("closeDatabase success!");  
      },  
      fail: function (e) {  
        console.log("closeDatabase failed: " + JSON.stringify(e));  
      },  
    });  
  }  
  //  
  async initTable() {  
    try {  
      const sql = [  
        `CREATE TABLE IF NOT EXISTS user(  
            id INT PRIMARY KEY AUTOINCREMENT,  
            name VARCHAR(50),  
            createdAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP  
          )`,  
        `CREATE TABLE IF NOT EXISTS note(  
            id INT PRIMARY KEY AUTOINCREMENT,  
            uid INT NOT NULL,  
            title VARCHAR(255) NOT NULL,  
            category VARCHAR(100),  
            categories VARCHAR(255),  
            contents TEXT,  
            createdAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,  
            updatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,  
            FOREIGN KEY (uid) REFERENCES user(id) ON DELETE CASCADE  
          )`,  
      ];  
      const res = await asyncExecuteSql(sql, this.options.name);  
      console.log("==> initTable", res);  
    } catch (error) {  
      console.error(",==> initTable", error);  
    }  
  }  

  table = {  

    // 删除表  
    async delete(tableName: string) {  
      const sql = [`DROP TABLE IF EXISTS ${tableName}`];  
      const res = await asyncExecuteSql(sql, this.DBName);  
      return res;  
    },  
  };  

  // insert into  
  async insertInto(data: any = {}) {  
    //  
    try {  
      console.log("insertInto", data);  
      const sql = [  
        `INSERT INTO note (title, category, categories, contents, uid) VALUES (  
        '${data.title}', '${data.category}', '${data.categories}', '${data.contents}', 1  
      )`,  
      ];  
      const res = await asyncExecuteSql(sql, this.options.name);  
      console.log("insertInto", res);  
    } catch (error) {  
      console.error("insertInto", error);  
    }  
  }  

}  

const db = new SQLDB();  

export default db;
2025-06-28 16:25 负责人:无 分享
已邀请:

要回复问题请先登录注册