| name | data |
| description | Room ORM, SQLite, SharedPreferences, DataStore, encryption. |
| version | 2.0.0 |
| sasmp_version | 1.3.0 |
| bonded_agent | 04-data-management |
| bond_type | PRIMARY_BOND |
| atomic | true |
| single_responsibility | Data persistence & storage |
| parameters | {"storage_type":{"type":"string","enum":["room","datastore","preferences","encrypted"],"required":false},"operation":{"type":"string","enum":["create","read","update","delete","migrate"],"required":false}} |
| retry | {"max_attempts":2,"backoff":"exponential","on_failure":"suggest_transaction_rollback"} |
| logging | {"level":"info","include":["query","storage_type","security_level"]} |
Data Persistence Skill
Quick Start
Room Entity & DAO
@Entity
data class User(@PrimaryKey val id: Int, val name: String)
@Dao
interface UserDao {
@Query("SELECT * FROM User")
suspend fun getAllUsers(): List<User>
@Insert
suspend fun insert(user: User)
}
EncryptedSharedPreferences
val prefs = EncryptedSharedPreferences.create(context, "secret",
MasterKey.Builder(context).setKeyScheme(AES256_GCM).build(),
AES256_SIV, AES256_GCM)
prefs.edit { putString("token", value) }
DataStore
val dataStore = context.createDataStore("settings")
val preferences = dataStore.data.map { it[KEY] ?: "" }
Key Concepts
Room Advantages
- Type-safe queries
- Compile-time checks
- Suspend/Flow support
- Migration management
SharedPreferences
- Simple key-value store
- Use Encrypted version for sensitive data
- Limited to small data
DataStore
- Modern SharedPreferences
- Coroutine-native
- Type-safe
- ACID transactions
Best Practices
✅ Use Room for complex data
✅ Encrypt sensitive data
✅ Implement proper migrations
✅ Handle database errors
✅ Test database operations