
(十二)使用 ArkData 创建数据库与表及执行 SQL 操作 原创
使用 ArkData 创建数据库与表及执行 SQL 操作
在 HarmonyOS 应用开发中,ArkData 作为核心的数据管理框架,为开发者提供了丰富且强大的工具,用于创建和管理数据库。借助 ArkData,开发者不仅能轻松创建数据库和表,还能灵活执行各类 SQL 操作,满足复杂的数据存储与处理需求。本文将在前期搭建的 ArkData 开发环境基础上,深入介绍如何运用 ArkData 进行数据库和表的创建,并结合具体代码示例,详细讲解 SQL 操作的实现过程,助力开发者打造数据驱动的 HarmonyOS 应用。
一、使用 ArkData 创建数据库
1.1 创建关系型数据库
在 ArkData 中,关系型数据库通过RelationalStore进行创建与管理。以开发一款任务管理应用为例,我们需要创建一个数据库来存储任务相关信息。下面展示创建关系型数据库的具体步骤。
import ohos.data.relationalStore.RelationalStore;
import ohos.data.relationalStore.RelationalStoreConfig;
public class DatabaseCreator {
public static void createTaskDatabase() {
RelationalStoreConfig config = new RelationalStoreConfig("tasks.db", 1);
RelationalStore.getRelationalStore(config).thenAccept(store -> {
System.out.println("成功创建任务数据库");
}).exceptionally(exception -> {
System.out.println("创建任务数据库失败: " + exception.getMessage());
return null;
});
}
}
在上述代码中,RelationalStoreConfig用于配置数据库的名称和版本,getRelationalStore方法则用于异步创建数据库。执行代码后,系统会在指定路径下创建名为 “tasks.db” 的数据库。
1.2 配置数据库属性
创建数据库时,开发者可根据实际需求配置数据库的多种属性,如加密、日志模式等。下面展示如何创建一个加密的数据库。
import ohos.data.relationalStore.RelationalStore;
import ohos.data.relationalStore.RelationalStoreConfig;
public class EncryptedDatabaseCreator {
public static void createEncryptedDatabase() {
RelationalStoreConfig config = new RelationalStoreConfig("encrypted.db", 1);
config.setEncrypt(true);
RelationalStore.getRelationalStore(config).thenAccept(store -> {
System.out.println("成功创建加密数据库");
}).exceptionally(exception -> {
System.out.println("创建加密数据库失败: " + exception.getMessage());
return null;
});
}
}
在这段代码中,通过config.setEncrypt(true)开启了数据库加密功能,增强了数据的安全性。
二、使用 ArkData 创建表
2.1 创建任务表
数据库创建完成后,接下来创建用于存储任务信息的表。在关系型数据库中,通过执行 SQL 语句来创建表。
import ohos.data.relationalStore.RelationalStore;
import ohos.data.relationalStore.RelationalStoreConfig;
public class TableCreator {
public static void createTaskTable() {
RelationalStoreConfig config = new RelationalStoreConfig("tasks.db", 1);
RelationalStore.getRelationalStore(config).thenAccept(store -> {
String createTableSql = "CREATE TABLE IF NOT EXISTS tasks (" +
"id INTEGER PRIMARY KEY AUTOINCREMENT," +
"task TEXT," +
"status TEXT)";
store.executeSql(createTableSql).thenAccept(result -> {
System.out.println("成功创建任务表");
}).exceptionally(exception -> {
System.out.println("创建任务表失败: " + exception.getMessage());
return null;
});
}).exceptionally(exception -> {
System.out.println("获取数据库失败: " + exception.getMessage());
return null;
});
}
}
上述代码使用CREATE TABLE语句创建了名为 “tasks” 的表,该表包含 “id”“task”“status” 三个字段,其中 “id” 为主键,且自增长。
2.2 创建索引提升查询性能
为提升查询效率,可在表上创建索引。以根据任务状态查询任务为例,为 “status” 字段创建索引。
import ohos.data.relationalStore.RelationalStore;
import ohos.data.relationalStore.RelationalStoreConfig;
public class IndexCreator {
public static void createTaskStatusIndex() {
RelationalStoreConfig config = new RelationalStoreConfig("tasks.db", 1);
RelationalStore.getRelationalStore(config).thenAccept(store -> {
String createIndexSql = "CREATE INDEX IF NOT EXISTS idx_status ON tasks (status)";
store.executeSql(createIndexSql).thenAccept(result -> {
System.out.println("成功创建任务状态索引");
}).exceptionally(exception -> {
System.out.println("创建任务状态索引失败: " + exception.getMessage());
return null;
});
}).exceptionally(exception -> {
System.out.println("获取数据库失败: " + exception.getMessage());
return null;
});
}
}
这段代码使用CREATE INDEX语句为 “tasks” 表的 “status” 字段创建了索引,提高了基于任务状态查询的速度。
三、使用 ArkData 执行 SQL 操作
3.1 插入数据
数据库和表创建完成后,可通过执行 SQL 语句插入数据。以下是向 “tasks” 表中插入任务数据的代码示例。
import ohos.data.relationalStore.RelationalStore;
import ohos.data.relationalStore.RelationalStoreConfig;
public class DataInsertor {
public static void insertTaskData() {
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方法用于批量执行插入操作,提高了数据插入的效率。
3.2 查询数据
查询数据是数据库操作的常见需求。以下是查询 “tasks” 表中所有任务的代码示例。
import ohos.data.relationalStore.RelationalStore;
import ohos.data.relationalStore.RelationalStoreConfig;
import ohos.data.resultset.ResultSet;
public class DataQuery {
public static void queryAllTasks() {
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;
});
}
}
上述代码通过executeSql方法执行查询语句,并使用ResultSet遍历查询结果,获取任务的详细信息。
3.3 更新和删除数据
除插入和查询操作外,ArkData 还支持数据的更新和删除操作。以下是更新任务状态和删除任务的代码示例。
import ohos.data.relationalStore.RelationalStore;
import ohos.data.relationalStore.RelationalStoreConfig;
public class DataUpdaterAndDeleter {
public static void updateTaskStatus() {
RelationalStoreConfig config = new RelationalStoreConfig("tasks.db", 1);
RelationalStore.getRelationalStore(config).thenAccept(store -> {
String updateSql = "UPDATE tasks SET status =? WHERE task =?";
Object[][] values = {{"已完成", "完成项目文档"}};
store.executeSqlBatch(updateSql, values).thenAccept(result -> {
System.out.println("成功更新任务状态");
}).exceptionally(exception -> {
System.out.println("更新任务状态失败: " + exception.getMessage());
return null;
});
}).exceptionally(exception -> {
System.out.println("获取数据库失败: " + exception.getMessage());
return null;
});
}
public static void deleteTask() {
RelationalStoreConfig config = new RelationalStoreConfig("tasks.db", 1);
RelationalStore.getRelationalStore(config).thenAccept(store -> {
String deleteSql = "DELETE FROM tasks WHERE task =?";
Object[][] values = {{"完成项目文档"}};
store.executeSqlBatch(deleteSql, values).thenAccept(result -> {
System.out.println("成功删除任务");
}).exceptionally(exception -> {
System.out.println("删除任务失败: " + exception.getMessage());
return null;
});
}).exceptionally(exception -> {
System.out.println("获取数据库失败: " + exception.getMessage());
return null;
});
}
}
在上述代码中,updateTaskStatus方法使用UPDATE语句更新任务状态,deleteTask方法使用DELETE语句删除指定任务。
总结
通过本文介绍,开发者能够深入了解如何使用 ArkData 创建数据库和表,并熟练执行各类 SQL 操作。这些操作是构建数据驱动型 HarmonyOS 应用的基础。在实际开发中,开发者可根据项目的具体需求,灵活运用 ArkData 提供的功能,设计出高效、可靠的数据存储方案,为用户打造优质的应用体验。随着 HarmonyOS 生态的不断发展,ArkData 也将持续优化,为开发者带来更多强大的数据管理工具。
