
(十三)HarmonyOS ArkData 的数据插入与查询实战 原创
HarmonyOS ArkData 的数据插入与查询实战
在 HarmonyOS 应用开发的大环境下,高效的数据管理是打造优质应用的关键。ArkData 作为 HarmonyOS 数据管理的核心框架,为开发者提供了一整套强大的数据操作功能,数据的插入与查询便是其中极为重要的部分。通过灵活运用这些功能,开发者能够让应用快速响应数据请求,实现数据的动态展示与交互。本文将围绕 ArkData 中的数据插入与查询,介绍其 SQL 语句的使用,展示代码实现的具体过程,并结合实际场景给出案例,帮助开发者快速掌握这两项重要技能。
一、数据插入
1.1 SQL 语句基础
在 ArkData 的关系型数据库操作中,INSERT INTO语句是实现数据插入的核心。基本语法为INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...)。这种语法不仅直观,而且能灵活地将数据插入指定的表和列中。
1.2 单条数据插入示例
下面通过一个简单的任务管理应用案例,展示如何在 ArkData 中使用INSERT INTO语句插入单条数据。假设我们已经创建了一个名为tasks的表,表结构包含id(自增长主键)、task和status字段。
import ohos.data.relationalStore.RelationalStore;
import ohos.data.relationalStore.RelationalStoreConfig;
public class SingleDataInsertor {
public static void insertSingleTask() {
RelationalStoreConfig config = new RelationalStoreConfig("tasks.db", 1);
RelationalStore.getRelationalStore(config).thenAccept(store -> {
String insertSql = "INSERT INTO tasks (task, status) VALUES (?,?)";
Object[][] values = {{"完成会议纪要", "未完成"}};
store.executeSqlBatch(insertSql, values).thenAccept(result -> {
System.out.println("成功插入单条任务数据");
}).exceptionally(exception -> {
System.out.println("插入单条任务数据失败: " + exception.getMessage());
return null;
});
}).exceptionally(exception -> {
System.out.println("获取数据库失败: " + exception.getMessage());
return null;
});
}
}
在上述代码中,executeSqlBatch方法接受 SQL 语句和数据值数组,实现数据的插入操作。之所以使用executeSqlBatch,是因为它同样适用于单条数据的插入,同时为批量插入数据提供了统一的接口。
1.3 批量数据插入
在实际开发中,批量插入数据的场景十分常见,比如导入大量用户数据或初始化数据库。使用 ArkData 进行批量数据插入时,只需在executeSqlBatch方法中传入多条数据值。
import ohos.data.relationalStore.RelationalStore;
import ohos.data.relationalStore.RelationalStoreConfig;
public class BatchDataInsertor {
public static void insertBatchTasks() {
RelationalStoreConfig config = new RelationalStoreConfig("tasks.db", 1);
RelationalStore.getRelationalStore(config).thenAccept(store -> {
String insertSql = "INSERT INTO tasks (task, status) VALUES (?,?)";
Object[][] values = {
{"整理项目资料", "未完成"},
{"与客户沟通", "未完成"},
{"撰写项目报告", "未完成"}
};
store.executeSqlBatch(insertSql, values).thenAccept(result -> {
System.out.println("成功批量插入任务数据");
}).exceptionally(exception -> {
System.out.println("批量插入任务数据失败: " + exception.getMessage());
return null;
});
}).exceptionally(exception -> {
System.out.println("获取数据库失败: " + exception.getMessage());
return null;
});
}
}
这样,通过一次数据库操作就能插入多条数据,极大地提高了数据插入的效率。
二、数据查询
2.1 SQL 查询语句基础
在 ArkData 中,数据查询通过SELECT语句实现,基本语法为SELECT column1, column2, ... FROM table_name WHERE condition。通过灵活使用WHERE子句,开发者可以筛选出符合特定条件的数据。
2.2 查询所有数据
查询表中的所有数据是最基本的操作。以任务管理应用为例,查询tasks表中的所有任务。
import ohos.data.relationalStore.RelationalStore;
import ohos.data.relationalStore.RelationalStoreConfig;
import ohos.data.resultset.ResultSet;
public class QueryAllTasks {
public static void queryAll() {
RelationalStoreConfig config = new RelationalStoreConfig("tasks.db", 1);
RelationalStore.getRelationalStore(config).thenAccept(store -> {
String querySql = "SELECT * FROM tasks";
store.executeSql(querySql).thenAccept(resultSet -> {
while (resultSet.goToNextRow()) {
int id = resultSet.getInt("id");
String task = resultSet.getString("task");
String status = resultSet.getString("status");
System.out.println("任务ID: " + id + ", 任务: " + task + ", 状态: " + status);
}
}).exceptionally(exception -> {
System.out.println("查询所有任务数据失败: " + exception.getMessage());
return null;
});
}).exceptionally(exception -> {
System.out.println("获取数据库失败: " + exception.getMessage());
return null;
});
}
}
上述代码使用SELECT *查询tasks表中的所有字段,并通过ResultSet遍历结果集,输出每条任务的详细信息。
2.3 条件查询
实际应用中,更多时候需要根据特定条件查询数据。例如,查询状态为 “未完成” 的任务。
import ohos.data.relationalStore.RelationalStore;
import ohos.data.relationalStore.RelationalStoreConfig;
import ohos.data.resultset.ResultSet;
public class QueryTasksByStatus {
public static void queryByStatus() {
RelationalStoreConfig config = new RelationalStoreConfig("tasks.db", 1);
RelationalStore.getRelationalStore(config).thenAccept(store -> {
String querySql = "SELECT * FROM tasks WHERE status =?";
Object[] values = {"未完成"};
store.executeSql(querySql, values).thenAccept(resultSet -> {
while (resultSet.goToNextRow()) {
int id = resultSet.getInt("id");
String task = resultSet.getString("task");
String status = resultSet.getString("status");
System.out.println("任务ID: " + id + ", 任务: " + task + ", 状态: " + status);
}
}).exceptionally(exception -> {
System.out.println("按状态查询任务数据失败: " + exception.getMessage());
return null;
});
}).exceptionally(exception -> {
System.out.println("获取数据库失败: " + exception.getMessage());
return null;
});
}
}
在这段代码中,通过在SELECT语句中添加WHERE子句,并使用占位符传递参数,实现了按条件查询数据的功能。
三、总结
通过对 ArkData 数据插入与查询功能的介绍,开发者能够掌握使用 SQL 语句和代码实现数据操作的方法。这些操作是构建数据驱动型 HarmonyOS 应用的重要基础。在实际开发过程中,开发者需要根据具体的业务需求,灵活运用这些功能,优化数据操作的性能和效率,为用户打造流畅的应用体验。随着 HarmonyOS 生态的不断发展,ArkData 也将持续优化和扩展功能,为开发者提供更强大的数据管理工具。
