android greendao 数据库文件在哪
时间: 2024-04-27 15:23:48 浏览: 9
在使用GreenDAO创建数据库之后,数据库文件默认会被存储在应用程序的私有存储空间中。具体来说,它位于应用程序的/data/data/<package_name>/databases目录下,文件名为您在GreenDAO的schema定义中指定的名称。您可以使用Context.getDatabasePath方法获取数据库文件的实际路径。
相关问题
android greendao支持数据库加密吗
是的,GreenDAO支持数据库加密。你可以通过在DaoMaster类中使用SQLCipher来加密数据库。SQLCipher是一个基于SQLite的开源库,可用于加密SQLite数据库。
以下是使用SQLCipher加密GreenDAO数据库的步骤:
1. 在build.gradle文件中添加SQLCipher库的依赖:
```
dependencies {
implementation 'net.zetetic:android-database-sqlcipher:4.4.0'
}
```
2. 在DaoMaster类中使用SQLCipher初始化数据库。你需要在使用SQLiteOpenHelper创建数据库之前,调用SQLiteDatabase.loadLibs(context)加载SQLCipher库,并在创建数据库时,指定加密密码。
```java
public class MyDaoMaster extends DaoMaster.OpenHelper {
public MyDaoMaster(Context context, String name) {
super(context, name);
SQLiteDatabase.loadLibs(context);
}
public MyDaoMaster(Context context, String name, SQLiteDatabase.CursorFactory factory) {
super(context, name, factory);
SQLiteDatabase.loadLibs(context);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
super.onUpgrade(db, oldVersion, newVersion);
// 数据库升级时,需要重新加密数据
db.execSQL("PRAGMA cipher_migrate;");
}
@Override
public SQLiteDatabase getWritableDatabase() {
SQLiteDatabase db = super.getWritableDatabase(SQLCipherUtils.getEncryptionKey());
// 开启数据库加密
db.rawExecSQL("PRAGMA key = '"+SQLCipherUtils.getEncryptionKey()+"';");
db.rawExecSQL("PRAGMA cipher_use_hmac = off;");
db.rawExecSQL("PRAGMA cipher_page_size = 1024;");
db.rawExecSQL("PRAGMA cipher_kdf_algorithm = PBKDF2_HMAC_SHA1;");
db.rawExecSQL("PRAGMA cipher_hmac_algorithm = HMAC_SHA1;");
return db;
}
}
```
3. 在Application类中初始化GreenDAO。你需要使用自定义的MyDaoMaster类,以及指定数据库名称和版本号。
```java
public class MyApplication extends Application {
private DaoSession daoSession;
@Override
public void onCreate() {
super.onCreate();
// 初始化GreenDAO
DaoMaster.DevOpenHelper helper = new MyDaoMaster(this, "my-db");
Database db = helper.getEncryptedWritableDb(SQLCipherUtils.getEncryptionKey());
daoSession = new DaoMaster(db).newSession();
}
public DaoSession getDaoSession() {
return daoSession;
}
}
```
需要注意的是,加密密码需要妥善保管,不要轻易泄露。你可以通过SQLCipherUtils类来生成加密密码,以及验证密码是否正确。
```java
public class SQLCipherUtils {
private static final String KEY = "my-secret-key";
public static String getEncryptionKey() {
return KEY;
}
public static boolean isPasswordCorrect(String password) {
return password != null && password.equals(KEY);
}
}
```
练习greenDao数据库框架引入
GreenDao是一个高效、轻量级、快速的ORM(对象关系映射)框架,可以方便地将Java对象映射到SQLite数据库中。下面是GreenDao的引入和使用步骤:
1. 在build.gradle文件中添加以下依赖:
```groovy
dependencies {
implementation 'org.greenrobot:greendao:3.3.0'
}
```
2. 在app/build.gradle文件中添加以下配置:
```groovy
android {
defaultConfig {
//...
javaCompileOptions {
annotationProcessorOptions {
arguments = ["schemaVersion": "1", "daoPackage": "com.example.myapp.db"]
}
}
}
}
greendao {
schemaVersion 1
daoPackage 'com.example.myapp.db'
targetGenDir 'src/main/java'
}
```
这些配置将告诉GreenDao在编译时生成DAO(数据访问对象)类。schemaVersion是数据库的版本号,daoPackage是生成DAO类的包名,targetGenDir是DAO类的生成目录。
3. 创建实体类,例如:
```java
@Entity
public class User {
@Id(autoincrement = true)
private Long id;
private String name;
private int age;
// getters and setters
}
```
@Entity注解表示这是一个实体类,@Id注解表示这是主键,autoincrement = true表示主键自增。
4. 在app/src/main/java目录下创建一个名为“greenDao”的包,并在该包下创建一个名为“DaoMasterOpenHelper”的类。该类继承自DaoMaster.OpenHelper,用于创建和升级数据库。例如:
```java
public class DaoMasterOpenHelper extends DaoMaster.OpenHelper {
public DaoMasterOpenHelper(Context context, String name) {
super(context, name);
}
@Override
public void onCreate(Database db) {
super.onCreate(db);
}
@Override
public void onUpgrade(Database db, int oldVersion, int newVersion) {
// 数据库升级逻辑
}
}
```
5. 初始化GreenDao,在Application类的onCreate()方法中添加以下代码:
```java
public class MyApp extends Application {
private DaoSession daoSession;
@Override
public void onCreate() {
super.onCreate();
DaoMasterOpenHelper helper = new DaoMasterOpenHelper(this, "mydb");
Database db = helper.getWritableDb();
daoSession = new DaoMaster(db).newSession();
}
public DaoSession getDaoSession() {
return daoSession;
}
}
```
这里创建了一个DaoMasterOpenHelper实例,并通过它获取可写的数据库,然后创建一个DaoSession实例。
6. 使用GreenDao,例如:
```java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DaoSession daoSession = ((MyApp) getApplication()).getDaoSession();
User user = new User();
user.setName("Tom");
user.setAge(18);
daoSession.getUserDao().insert(user);
List<User> userList = daoSession.getUserDao().queryBuilder()
.where(UserDao.Properties.Age.gt(10))
.orderAsc(UserDao.Properties.Age)
.list();
}
}
```
这里通过getApplication()方法获取MyApp实例,然后通过getDaoSession()方法获取DaoSession实例。接着创建了一个User实例并插入到数据库中。最后使用查询构建器查询年龄大于10的所有用户,并按年龄升序排序。