HarmonyOS 鸿蒙Next数据库中如何使用传统sql方式

HarmonyOS 鸿蒙Next数据库中如何使用传统sql方式 如果不使用RdbStore对象的insert、update、delete、query方法来操作数据库,而是使用传统SQL来对数据库进行增删改查,应该用哪个方法?

我看到有好几个类似的方法:executeSql、querySql、execute

他们有什么区别?难道还得自己判断是查还是改然后决定用哪个方法吗?

或者是不是不该用这个框架,而是直接去使用sqlite.h???

5 回复

使用executeSql执行sql

executeSql(sql: string, bindArgs?: Array<ValueType>):Promise<void>

很多平台的db api为什么提供了insert、update、delete、query方法,又再提供一个executeSql,

  • 一方面除了CRUD操作,还有些额外sql语法的支持,
  • 另外一方面安全上,尽量用平台提供的CRUD方法+参数,避免SQL注入攻击。

executeSql、querySql这两个我猜就是底层一个执行语法支持更多,另外一个只能支持query,能为你的操作做权限分级。

重新看了下api,主要是返回值不同,支持的Sql语句范围不同。

参考API:

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-data-relationalstore-V5#executesql10

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-data-relationalstore-V5#querysql-1

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-data-relationalstore-V5#execute12

更多关于HarmonyOS 鸿蒙Next数据库中如何使用传统sql方式的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


executeSql这个方法并没有返回值,是不是他只能执行除了查以外的语句。

你说的是对的,我竟然搜索到的是 deprecated 的 API…

应该就是为了区分查找和非查找的,https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-data-relationalstore-V5#executesql10

官网有写: 此接口不支持执行查询、附加数据库和事务操作,可以使用 querySql、query、attach、beginTransaction、commit 等接口代替。

不支持分号分隔的多条语句。

在HarmonyOS鸿蒙Next中,使用传统SQL方式进行数据库操作,可以通过SQLite数据库实现。鸿蒙系统内置了SQLite数据库引擎,开发者可以使用SQL语句进行增删改查等操作。具体步骤如下:

  1. 创建数据库:使用DatabaseHelper类创建或打开数据库,指定数据库名称、版本号等信息。

  2. 执行SQL语句:通过SQLiteDatabase对象的execSQL()方法执行SQL语句,如创建表、插入数据、更新数据等。

  3. 查询数据:使用rawQuery()方法执行SQL查询语句,返回Cursor对象,通过Cursor遍历查询结果。

  4. 关闭数据库:操作完成后,调用close()方法关闭数据库连接,释放资源。

示例代码片段:

DatabaseHelper dbHelper = new DatabaseHelper(context, "myDatabase.db", null, 1);
SQLiteDatabase db = dbHelper.getWritableDatabase();

// 创建表
db.execSQL("CREATE TABLE IF NOT EXISTS myTable (id INTEGER PRIMARY KEY, name TEXT)");

// 插入数据
db.execSQL("INSERT INTO myTable (name) VALUES ('example')");

// 查询数据
Cursor cursor = db.rawQuery("SELECT * FROM myTable", null);
while (cursor.moveToNext()) {
    String name = cursor.getString(cursor.getColumnIndex("name"));
    // 处理查询结果
}
cursor.close();

// 关闭数据库
db.close();
回到顶部