I. Native API Deep Dive
HarmonyOS provides two native database solutions: Relational Database (RDB) and Object-Relational Mapping (ORM), both built on SQLite.
1. Relational Database (RDB)
Core API Implementation:
// Database Initialization (TypeScript)
import relationalStore from '@ohos.data.relationalStore';
const config = {
name: 'user.db',
securityLevel: relationalStore.SecurityLevel.S1
};
async function initDB() {
const store = await relationalStore.getRdbStore(config);
await store.executeSql(
'CREATE TABLE IF NOT EXISTS user (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT)'
);
}
// Batch Insert with Transactions
async function batchInsert(users: string[]) {
const store = await relationalStore.getRdbStore(config);
await store.beginTransaction();
try {
users.forEach(name => {
store.insert('user', { name });
});
await store.commit();
} catch (e) {
await store.rollback();
}
}
Features:
-
Advantages:
- Direct SQL control for complex queries (e.g., multi-table joins)
- Full ACID transaction support
- Distributed sync capability (API 18+)
-
Limitations:
- Manual SQL injection prevention
- Strict single-writer/multi-reader rules for multi-threading
2. Object-Relational Mapping (ORM)
Code Example:
// Entity Definition
@Entity(tableName = 'product')
class Product extends OrmObject {
@PrimaryKey(autoGenerate = true)
private id: number;
@Column(String) name: string;
}
// Database Operations
const ormContext = ormCreateDb();
const product = new Product();
product.name = 'Smart Watch';
await ormContext.insert(product);
const results = await ormContext.query(
ormContext.where(Product).equalTo('name', 'Smart Watch')
);
Advantages:
50% less boilerplate code (no manual SQL)
Compile-time type safety
Automatic object serialization
*
II. Third-Party Libraries Comparison
1. ObjectBox (Community Recommendation)
Integration:
// package.json
"dependencies": {
"com.objectbox.objectbox": "1.6.0"
}
Code Example:
// Entity Definition
@Entity
class User {
@Id(autoincrement = true)
id: number;
name: string;
}
// Operations
const boxStore = MyObjectBox.builder().build();
const userBox = boxStore.boxFor(User.class);
userBox.put(new User("Zhang San"));
const users = userBox.query().build().find();
Performance:
Insertion: 1,800 entries/sec vs. Native API's 1,200
Query Latency: 18ms vs. 25ms
Use Cases:
High-frequency IoT logging
Complex object relationships
2. HSQLDB (Lightweight Option)
Features:
Pure Java implementation (no native dependencies)
In-memory database support
import { HSQLDatabase } from '@ohos.hsqldb';
const db = new HSQLDatabase();
await db.connect('jdbc:hsqldb:mem:test');
await db.execute('CREATE TABLE session (id INT PRIMARY KEY)');
Limitations:
Limited transaction support (row-level locking only)
No distributed deployment
*
III. Performance & Scenario Comparison
Aspect | Native API | ORM Framework | ObjectBox |
---|---|---|---|
Development | ★★☆ (SQL required) | ★★★★ (Type-safe) | ★★★☆ |
Speed | ★★★★ (Direct) | ★★★ (ORM overhead) | ★★★★☆ |
Learning | ★★★ (SQL needed) | ★★☆ (Annotations) | ★★★☆ |
Complex Query | ★★★★ (JOIN support) | ★★☆ (Generator) | ★★★☆ |
Distributed | ★★★★ (API 18+) | ❌ | ❌ |
*
IV. Selection Guide
- Native API:
Ideal for complex data models needing distributed sync
Use @Transaction for batch operations
- ORM Framework:
Top choice for small/medium projects (TypeScript decorators)
Note: Manual Date type conversions
- Third-Party:
ObjectBox: IoT local storage
HSQLDB: Memory-light apps
Optimizations:
Use executeBatch() instead of loops (+3x throughput)
Specify columns in queries to avoid full scans
Enable WAL mode (PRAGMA journal_mode=WAL) for concurrency
Top comments (0)