大家好,我是 V 哥。今天給大家整理的內容是關于鴻蒙 NEXT 開發(fā)中使用 ArkData 操作 SQLite 數(shù)據庫的詳細介紹,從入門到精通,包含案例代碼和注釋,幫助小白快速入門到提升。先贊后看,家財萬貫。
使用 ArkData實現(xiàn) SQLLite 的 CRUD 操作
1. 環(huán)境準備
在開始之前,確保你已經安裝了 DevEco Studio,并且配置好了鴻蒙開發(fā)環(huán)境。同時,要創(chuàng)建一個鴻蒙 NEXT 項目。
2. 引入 ArkData 庫
在 module.json5
文件中添加 ArkData 依賴:
{
"module": {
"reqPermissions": [
{
"name": "ohos.permission.DISTRIBUTED_DATASYNC",
"reason": "For data synchronization"
}
],
"dependencies": {
"arkdata": {
"version": "1.0.0",
"visibility": "public"
}
}
}
}
3. 入門:創(chuàng)建數(shù)據庫和表
以下是一個簡單的示例,展示如何創(chuàng)建一個 SQLite 數(shù)據庫和一個表:
// 導入 ArkData 相關模塊
import { Database, DatabaseConfig } from '@ohos.data.arkdata';
async function createDatabaseAndTable() {
try {
// 配置數(shù)據庫
const config: DatabaseConfig = {
name: 'myDatabase.db', // 數(shù)據庫名稱
securityLevel: 1 // 安全級別
};
// 打開或創(chuàng)建數(shù)據庫
const database: Database = await Database.open(config);
// 創(chuàng)建表的 SQL 語句
const createTableSql = `
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER
);
`;
// 執(zhí)行 SQL 語句
await database.executeSql(createTableSql);
console.log('Database and table created successfully.');
// 關閉數(shù)據庫
await database.close();
} catch (error) {
console.error('Error creating database and table:', error);
}
}
// 調用函數(shù)創(chuàng)建數(shù)據庫和表
createDatabaseAndTable();
代碼解釋 :
- 首先導入
Database
和DatabaseConfig
模塊。 - 定義數(shù)據庫配置
config
,指定數(shù)據庫名稱和安全級別。 - 使用
Database.open
方法打開或創(chuàng)建數(shù)據庫。 - 編寫創(chuàng)建表的 SQL 語句,并使用
database.executeSql
方法執(zhí)行該語句。 - 最后關閉數(shù)據庫。
4. 插入數(shù)據
以下是向 users
表中插入數(shù)據的示例:
async function insertData() {
try {
const config: DatabaseConfig = {
name: 'myDatabase.db',
securityLevel: 1
};
const database: Database = await Database.open(config);
// 插入數(shù)據的 SQL 語句
const insertSql = 'INSERT INTO users (name, age) VALUES (?, ?)';
const values = ['John Doe', 30];
// 執(zhí)行插入操作
await database.executeSql(insertSql, values);
console.log('Data inserted successfully.');
await database.close();
} catch (error) {
console.error('Error inserting data:', error);
}
}
// 調用函數(shù)插入數(shù)據
insertData();
代碼解釋 :
- 打開數(shù)據庫。
- 編寫插入數(shù)據的 SQL 語句,使用
?
作為占位符。 - 定義要插入的值數(shù)組
values
。 - 使用
database.executeSql
方法執(zhí)行插入操作,并傳入 SQL 語句和值數(shù)組。 - 關閉數(shù)據庫。
5. 查詢數(shù)據
以下是從 users
表中查詢數(shù)據的示例:
async function queryData() {
try {
const config: DatabaseConfig = {
name: 'myDatabase.db',
securityLevel: 1
};
const database: Database = await Database.open(config);
// 查詢數(shù)據的 SQL 語句
const querySql = 'SELECT * FROM users';
// 執(zhí)行查詢操作
const resultSet = await database.querySql(querySql);
// 遍歷結果集
while (await resultSet.goToNextRow()) {
const id = await resultSet.getLong(0);
const name = await resultSet.getString(1);
const age = await resultSet.getLong(2);
console.log(`ID: ${id}, Name: ${name}, Age: ${age}`);
}
// 關閉結果集
await resultSet.close();
await database.close();
} catch (error) {
console.error('Error querying data:', error);
}
}
// 調用函數(shù)查詢數(shù)據
queryData();
代碼解釋 :
- 打開數(shù)據庫。
- 編寫查詢數(shù)據的 SQL 語句。
- 使用
database.querySql
方法執(zhí)行查詢操作,返回一個ResultSet
對象。 - 使用
resultSet.goToNextRow
方法遍歷結果集,使用resultSet.getLong
和resultSet.getString
方法獲取每行的數(shù)據。 - 關閉結果集和數(shù)據庫。
6. 更新數(shù)據
以下是更新 users
表中數(shù)據的示例:
async function updateData() {
try {
const config: DatabaseConfig = {
name: 'myDatabase.db',
securityLevel: 1
};
const database: Database = await Database.open(config);
// 更新數(shù)據的 SQL 語句
const updateSql = 'UPDATE users SET age = ? WHERE name = ?';
const values = [31, 'John Doe'];
// 執(zhí)行更新操作
await database.executeSql(updateSql, values);
console.log('Data updated successfully.');
await database.close();
} catch (error) {
console.error('Error updating data:', error);
}
}
// 調用函數(shù)更新數(shù)據
updateData();
代碼解釋 :
- 打開數(shù)據庫。
- 編寫更新數(shù)據的 SQL 語句,使用
?
作為占位符。 - 定義要更新的值數(shù)組
values
。 - 使用
database.executeSql
方法執(zhí)行更新操作。 - 關閉數(shù)據庫。
7. 刪除數(shù)據
以下是從 users
表中刪除數(shù)據的示例:
async function deleteData() {
try {
const config: DatabaseConfig = {
name: 'myDatabase.db',
securityLevel: 1
};
const database: Database = await Database.open(config);
// 刪除數(shù)據的 SQL 語句
const deleteSql = 'DELETE FROM users WHERE name = ?';
const values = ['John Doe'];
// 執(zhí)行刪除操作
await database.executeSql(deleteSql, values);
console.log('Data deleted successfully.');
await database.close();
} catch (error) {
console.error('Error deleting data:', error);
}
}
// 調用函數(shù)刪除數(shù)據
deleteData();
代碼解釋 :
- 打開數(shù)據庫。
- 編寫刪除數(shù)據的 SQL 語句,使用
?
作為占位符。 - 定義要刪除的數(shù)據條件值數(shù)組
values
。 - 使用
database.executeSql
方法執(zhí)行刪除操作。 - 關閉數(shù)據庫。
通過以上步驟,你可以在鴻蒙 NEXT 開發(fā)中使用 ArkData 操作 SQLite 數(shù)據庫,從創(chuàng)建數(shù)據庫和表,到插入、查詢、更新和刪除數(shù)據。
鴻蒙開發(fā)中使用ArkData的最佳實踐
在鴻蒙開發(fā)中,ArkData 是一個強大的數(shù)據管理框架,用于操作數(shù)據庫等數(shù)據存儲,以下為你分享一些使用 ArkData 的最佳實踐:
1. 數(shù)據庫初始化與管理
1.1 合理配置數(shù)據庫
在創(chuàng)建數(shù)據庫時,根據應用的安全需求合理設置安全級別。例如:
import { Database, DatabaseConfig } from '@ohos.data.arkdata';
async function initDatabase() {
const config: DatabaseConfig = {
name: 'myAppDatabase.db',
securityLevel: 1 // 根據實際情況選擇合適的安全級別
};
try {
const database = await Database.open(config);
// 進行后續(xù)數(shù)據庫操作
return database;
} catch (error) {
console.error('Failed to open database:', error);
}
}
1.2 數(shù)據庫版本管理
隨著應用的迭代,數(shù)據庫結構可能會發(fā)生變化。可以在應用中實現(xiàn)數(shù)據庫版本管理,確保數(shù)據庫的升級和遷移操作正確執(zhí)行。例如,在打開數(shù)據庫時檢查版本號并進行相應處理:
async function openDatabaseWithVersion() {
const config: DatabaseConfig = {
name: 'myAppDatabase.db',
securityLevel: 1
};
const database = await Database.open(config);
const currentVersion = await database.getVersion();
if (currentVersion < 2) {
// 執(zhí)行數(shù)據庫升級操作
await upgradeDatabase(database);
await database.setVersion(2);
}
return database;
}
async function upgradeDatabase(database) {
// 編寫數(shù)據庫升級的 SQL 語句并執(zhí)行
const upgradeSql = 'ALTER TABLE myTable ADD COLUMN newColumn TEXT';
await database.executeSql(upgradeSql);
}
2. 數(shù)據操作優(yōu)化
2.1 批量操作
當需要插入或更新大量數(shù)據時,使用批量操作可以顯著提高性能。例如,批量插入數(shù)據:
async function batchInsertData(database) {
const insertSql = 'INSERT INTO myTable (column1, column2) VALUES (?, ?)';
const dataToInsert = [
['value1', 'value2'],
['value3', 'value4'],
// 更多數(shù)據...
];
await database.beginTransaction();
try {
for (const values of dataToInsert) {
await database.executeSql(insertSql, values);
}
await database.commitTransaction();
} catch (error) {
await database.rollbackTransaction();
console.error('Batch insert failed:', error);
}
}
2.2 合理使用索引
對于經常用于查詢條件的列,創(chuàng)建索引可以加快查詢速度。例如,在創(chuàng)建表時為經常查詢的列添加索引:
async function createTableWithIndex(database) {
const createTableSql = `
CREATE TABLE myTable (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
age INTEGER
);
`;
const createIndexSql = 'CREATE INDEX idx_name ON myTable (name)';
await database.executeSql(createTableSql);
await database.executeSql(createIndexSql);
}
3. 錯誤處理與資源管理
3.1 全面的錯誤處理
在進行數(shù)據庫操作時,要對可能出現(xiàn)的錯誤進行全面的捕獲和處理,避免應用崩潰。例如:
async function performDatabaseOperation() {
try {
const database = await initDatabase();
// 執(zhí)行數(shù)據庫操作
await database.executeSql('SELECT * FROM myTable');
await database.close();
} catch (error) {
console.error('Database operation failed:', error);
}
}
3.2 資源及時釋放
在完成數(shù)據庫操作后,及時關閉數(shù)據庫連接和結果集,避免資源泄漏。例如:
async function queryData() {
const database = await initDatabase();
try {
const querySql = 'SELECT * FROM myTable';
const resultSet = await database.querySql(querySql);
while (await resultSet.goToNextRow()) {
// 處理結果集數(shù)據
}
await resultSet.close();
} catch (error) {
console.error('Query data failed:', error);
} finally {
await database.close();
}
}
4. 數(shù)據安全
4.1 防止 SQL 不安全
在執(zhí)行 SQL 語句時,使用參數(shù)化查詢,避免直接拼接用戶輸入的數(shù)據,防止 SQL 不安全公雞。例如:
async function queryDataByCondition(database, name) {
const querySql = 'SELECT * FROM myTable WHERE name = ?';
const resultSet = await database.querySql(querySql, [name]);
// 處理結果集
}
4.2 數(shù)據保護
對于敏感數(shù)據,可以考慮在存儲到數(shù)據庫之前進行加密處理,提高數(shù)據的安全性。例如,使用加密算法對用戶密碼進行加密存儲:
import { Crypto } from '@ohos.security.crypto';
function encryptData(data) {
const cipher = Crypto.createCipher('AES/GCM/NoPadding');
const key = Crypto.generateKey('AES', 256);
cipher.init('encrypt', key);
return cipher.update(data);
}
async function insertEncryptedData(database, password) {
const encryptedPassword = encryptData(password);
const insertSql = 'INSERT INTO users (password) VALUES (?)';
await database.executeSql(insertSql, [encryptedPassword]);
}
5. 異步操作與并發(fā)控制
5.1 異步操作
ArkData 的操作大多是異步的,要合理使用 async/await
或 Promise
來處理異步操作,避免阻塞主線程。例如:
async function performAsyncOperations() {
const database = await initDatabase();
const result = await database.querySql('SELECT * FROM myTable');
// 處理查詢結果
}
5.2 并發(fā)控制
當多個任務同時訪問數(shù)據庫時,要考慮并發(fā)控制,避免數(shù)據沖突。可以使用事務來保證數(shù)據的一致性,例如:
async function concurrentOperation(database) {
await database.beginTransaction();
try {
// 執(zhí)行多個數(shù)據庫操作
await database.executeSql('UPDATE myTable SET column1 = ? WHERE id = ?', ['newValue', 1]);
await database.executeSql('DELETE FROM myTable WHERE id = ?', [2]);
await database.commitTransaction();
} catch (error) {
await database.rollbackTransaction();
console.error('Concurrent operation failed:', error);
}
}
優(yōu)化ArkData的數(shù)據庫操作性能
在鴻蒙開發(fā)中,使用 ArkData 進行數(shù)據庫操作時,可以通過以下多種方式來優(yōu)化性能:
1. 數(shù)據庫設計優(yōu)化
1.1 合理設計表結構
- 字段選擇 :僅存儲必要的數(shù)據字段,避免存儲過多冗余信息,以減少磁盤 I/O 和內存占用。例如,在用戶信息表中,如果不需要存儲用戶的歷史登錄 IP 地址,就不要添加該字段。
- 數(shù)據類型選擇 :選擇合適的數(shù)據類型,盡量使用占用空間小的數(shù)據類型。例如,對于年齡字段,使用
INTEGER
而不是TEXT
類型。
-- 正確示例,使用合適的數(shù)據類型
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
age INTEGER
);
1.2 建立合適的索引
- 選擇索引列 :對經常用于查詢條件、排序和連接操作的列創(chuàng)建索引。例如,在用戶表中,如果經常根據用戶名進行查詢,就可以為
name
列創(chuàng)建索引。
async function createIndex(database) {
const createIndexSql = 'CREATE INDEX idx_name ON users (name)';
await database.executeSql(createIndexSql);
}
- 避免過多索引 :雖然索引可以加快查詢速度,但過多的索引會增加插入、更新和刪除操作的開銷,同時也會占用更多的磁盤空間。
2. 批量操作優(yōu)化
2.1 批量插入數(shù)據
當需要插入大量數(shù)據時,使用批量插入可以顯著減少數(shù)據庫的事務開銷。可以將多條插入語句合并為一個事務進行處理。
async function batchInsertData(database) {
const insertSql = 'INSERT INTO users (name, age) VALUES (?, ?)';
const dataToInsert = [
['John', 25],
['Jane', 30],
// 更多數(shù)據...
];
await database.beginTransaction();
try {
for (const values of dataToInsert) {
await database.executeSql(insertSql, values);
}
await database.commitTransaction();
} catch (error) {
await database.rollbackTransaction();
console.error('Batch insert failed:', error);
}
}
2.2 批量更新和刪除
類似地,對于大量的更新和刪除操作,也可以采用批量處理的方式,將多個操作合并到一個事務中。
async function batchUpdateData(database) {
const updateSql = 'UPDATE users SET age = age + 1 WHERE age < ?';
const values = [30];
await database.beginTransaction();
try {
await database.executeSql(updateSql, values);
await database.commitTransaction();
} catch (error) {
await database.rollbackTransaction();
console.error('Batch update failed:', error);
}
}
3. 查詢優(yōu)化
3.1 避免全表掃描
- 使用索引 :確保查詢語句中使用了合適的索引,避免全表掃描。例如,使用
WHERE
子句指定索引列進行查詢。
async function queryDataWithIndex(database) {
const querySql = 'SELECT * FROM users WHERE name = ?';
const values = ['John'];
const resultSet = await database.querySql(querySql, values);
// 處理結果集
}
- 優(yōu)化查詢條件 :盡量減少
OR
操作符的使用,因為OR
操作可能會導致數(shù)據庫無法使用索引。可以將OR
條件拆分成多個查詢,然后合并結果。
3.2 只查詢需要的字段
避免使用 SELECT *
,只選擇需要的字段,減少數(shù)據傳輸和處理的開銷。
async function querySpecificFields(database) {
const querySql = 'SELECT name, age FROM users WHERE age > ?';
const values = [20];
const resultSet = await database.querySql(querySql, values);
// 處理結果集
}
4. 資源管理優(yōu)化
4.1 及時關閉連接和結果集
在完成數(shù)據庫操作后,及時關閉數(shù)據庫連接和結果集,釋放資源。
async function queryData() {
const database = await initDatabase();
try {
const querySql = 'SELECT * FROM users';
const resultSet = await database.querySql(querySql);
while (await resultSet.goToNextRow()) {
// 處理結果集數(shù)據
}
await resultSet.close();
} catch (error) {
console.error('Query data failed:', error);
} finally {
await database.close();
}
}
4.2 減少頻繁打開和關閉數(shù)據庫連接
盡量復用數(shù)據庫連接,避免頻繁地打開和關閉數(shù)據庫連接,因為這會帶來額外的開銷。可以在應用啟動時打開數(shù)據庫連接,在應用關閉時關閉連接。
5. 緩存機制
5.1 內存緩存
對于一些頻繁訪問且不經常變化的數(shù)據,可以使用內存緩存來減少數(shù)據庫查詢次數(shù)。例如,使用 JavaScript 對象來緩存查詢結果。
const dataCache = {};
async function getCachedData(database, key) {
if (dataCache[key]) {
return dataCache[key];
}
const querySql = `SELECT * FROM myTable WHERE id = ?`;
const resultSet = await database.querySql(querySql, [key]);
if (await resultSet.goToNextRow()) {
const data = await resultSet.getRowObject();
dataCache[key] = data;
return data;
}
return null;
}
5.2 合理設置緩存更新策略
當數(shù)據庫中的數(shù)據發(fā)生變化時,要及時更新緩存,以保證數(shù)據的一致性。可以在數(shù)據插入、更新或刪除操作后,清除相應的緩存。
監(jiān)控ArkData在鴻蒙開發(fā)中的數(shù)據庫操作性能
在鴻蒙開發(fā)中,監(jiān)控 ArkData 數(shù)據庫操作性能對于優(yōu)化應用至關重要。以下為你詳細介紹一些監(jiān)控數(shù)據庫操作性能的方法:
1. 日志記錄
1.1 記錄操作時間
在執(zhí)行數(shù)據庫操作前后記錄時間戳,通過計算時間差來衡量操作的執(zhí)行時間。這種方法簡單直觀,能快速定位耗時較長的操作。
import { Database, DatabaseConfig } from '@ohos.data.arkdata';
async function monitorQueryPerformance() {
const config: DatabaseConfig = {
name: 'myDatabase.db',
securityLevel: 1
};
const database = await Database.open(config);
// 記錄開始時間
const startTime = Date.now();
const querySql = 'SELECT * FROM myTable';
const resultSet = await database.querySql(querySql);
// 記錄結束時間
const endTime = Date.now();
const executionTime = endTime - startTime;
console.log(`Query operation took ${executionTime} milliseconds.`);
await resultSet.close();
await database.close();
}
1.2 記錄操作內容
除了時間,還可以記錄具體的 SQL 語句和參數(shù),方便后續(xù)分析問題。例如,在執(zhí)行 executeSql
方法時,記錄相關信息。
async function logDatabaseOperation(database, sql, params) {
console.log(`Executing SQL: ${sql}, with params: ${JSON.stringify(params)}`);
const startTime = Date.now();
await database.executeSql(sql, params);
const endTime = Date.now();
const executionTime = endTime - startTime;
console.log(`Operation completed in ${executionTime} milliseconds.`);
}
2. 性能分析工具
2.1 DevEco Studio 性能分析器
- 功能介紹 :DevEco Studio 提供了強大的性能分析器,可以對應用的 CPU、內存、磁盤 I/O 等進行全面監(jiān)控。在運行應用時,通過性能分析器可以查看數(shù)據庫操作相關的性能指標。
- 操作步驟 :
- 打開 DevEco Studio,運行應用。
- 點擊菜單欄中的“Run” -> “Profile”,選擇要分析的應用進程。
- 在性能分析器中,可以查看 CPU 使用率、內存占用情況等,通過分析數(shù)據庫操作的 CPU 時間和 I/O 時間,找出性能瓶頸。
2.2 SQLite 內置分析工具
- EXPLAIN QUERY PLAN :用于分析 SQL 查詢語句的執(zhí)行計劃,幫助了解數(shù)據庫是如何執(zhí)行查詢的,是否使用了索引等。
async function analyzeQueryPlan(database) {
const querySql = 'SELECT * FROM myTable WHERE id = 1';
const explainSql = `EXPLAIN QUERY PLAN ${querySql}`;
const resultSet = await database.querySql(explainSql);
while (await resultSet.goToNextRow()) {
const plan = await resultSet.getRowObject();
console.log('Query plan:', plan);
}
await resultSet.close();
}
- ANALYZE :更新數(shù)據庫的統(tǒng)計信息,使查詢優(yōu)化器能夠生成更優(yōu)的執(zhí)行計劃。
async function updateStatistics(database) {
await database.executeSql('ANALYZE');
}
3. 指標監(jiān)控與可視化
3.1 自定義指標監(jiān)控
定義一些關鍵的性能指標,如查詢響應時間、插入操作的吞吐量等,并定期收集這些指標。
const queryResponseTimes = [];
async function monitorQueryResponseTime(database) {
const startTime = Date.now();
const querySql = 'SELECT * FROM myTable';
await database.querySql(querySql);
const endTime = Date.now();
const responseTime = endTime - startTime;
queryResponseTimes.push(responseTime);
console.log(`Query response time: ${responseTime} ms`);
}
3.2 可視化展示
使用第三方庫或工具將收集到的性能指標進行可視化展示,如使用 Echarts 庫繪制折線圖來展示查詢響應時間的變化趨勢。
< !DOCTYPE html >
< html >
< head >
< meta charset="utf-8" >
< title >Database Performance Visualization< /title >
< !-- 引入 Echarts 庫 -- >
< script src="http://m.xsypw.cn/images/chaijie_default.png" >< /script >
< /head >
< body >
< !-- 定義圖表容器 -- >
< div id="main" style="width: 600px;height:400px;" >< /div >
< script >
// 模擬從應用中獲取的查詢響應時間數(shù)據
const queryResponseTimes = [10, 20, 15, 25, 30];
// 初始化圖表
const myChart = echarts.init(document.getElementById('main'));
// 配置圖表選項
const option = {
xAxis: {
type: 'category',
data: ['Query 1', 'Query 2', 'Query 3', 'Query 4', 'Query 5']
},
yAxis: {
type: 'value'
},
series: [{
data: queryResponseTimes,
type: 'line'
}]
};
// 使用配置項顯示圖表
myChart.setOption(option);
< /script >
< /body >
< /html >
4. 壓力測試
4.1 模擬高并發(fā)場景
使用壓力測試工具,如 Apache JMeter 或 Gatling,模擬大量并發(fā)用戶對數(shù)據庫進行操作,觀察數(shù)據庫在高負載下的性能表現(xiàn)。
4.2 分析測試結果
通過壓力測試結果,分析數(shù)據庫的吞吐量、響應時間、錯誤率等指標,找出性能瓶頸和可能出現(xiàn)的問題。例如,如果在高并發(fā)場景下查詢響應時間過長,可能需要優(yōu)化查詢語句或增加索引。
最后
以上就是 V 哥整理的在HarmonyOS NEXT開發(fā)中的 ArkData 操作 SQLite數(shù)據庫的相關知識,希望可以幫助大家快速掌握鴻蒙開發(fā)的數(shù)據庫應用,關注威哥愛編程,鴻蒙開發(fā)同前行。
審核編輯 黃宇
-
SQlite
+關注
關注
0文章
81瀏覽量
16245 -
鴻蒙
+關注
關注
57文章
2463瀏覽量
43567 -
HarmonyOS
+關注
關注
79文章
2005瀏覽量
31670
發(fā)布評論請先 登錄
相關推薦
數(shù)據庫數(shù)據恢復——MongoDB數(shù)據庫文件拷貝后服務無法啟動的數(shù)據恢復

適用于SQLite的dbExpress數(shù)據庫驅動程序
SQLite數(shù)據訪問組件

名單公布!【書籍評測活動NO.56】極速探索HarmonyOS NEXT:純血鴻蒙應用開發(fā)實踐
華為云 Flexus 云服務器 X 實例之 openEuler 系統(tǒng)下部署 SQLite 數(shù)據庫瀏覽器 sqlite-web

云數(shù)據庫是哪種數(shù)據庫類型?
HarmonyOS NEXT 應用開發(fā)練習:智能視頻推薦
數(shù)據庫數(shù)據恢復—Mysql數(shù)據庫表記錄丟失的數(shù)據恢復流程

數(shù)據庫數(shù)據恢復—MYSQL數(shù)據庫ibdata1文件損壞的數(shù)據恢復案例
數(shù)據庫數(shù)據恢復—通過拼接數(shù)據庫碎片恢復SQLserver數(shù)據庫

恒訊科技分析:sql數(shù)據庫怎么用?
鴻蒙開發(fā)接口數(shù)據管理:【@ohos.data.rdb (關系型數(shù)據庫)】
數(shù)據庫數(shù)據恢復—raid5陣列上層Sql Server數(shù)據庫數(shù)據恢復案例

評論