在Android Q中,由于对文件系统的限制,应用程序不再能够直接访问外部存储中的文件。取而代之的是,应用程序需要使用作用域存储来访问文件。这也包括SQLite数据库文件。
以下是使用作用域存储中的SQLite数据库的解决方法的代码示例:
public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "mydatabase.db";
private static final int DATABASE_VERSION = 1;
public DatabaseHelper(Context context) {
super(context, context.getExternalFilesDir(null).getAbsolutePath() + File.separator + DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// 创建数据库表
db.execSQL("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// 升级数据库表
db.execSQL("DROP TABLE IF EXISTS users");
onCreate(db);
}
}
public class MainActivity extends AppCompatActivity {
private SQLiteDatabase database;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化数据库
DatabaseHelper dbHelper = new DatabaseHelper(this);
database = dbHelper.getWritableDatabase();
// 插入数据
ContentValues values = new ContentValues();
values.put("name", "John");
database.insert("users", null, values);
// 查询数据
Cursor cursor = database.query("users", null, null, null, null, null, null);
while (cursor.moveToNext()) {
int id = cursor.getInt(cursor.getColumnIndex("id"));
String name = cursor.getString(cursor.getColumnIndex("name"));
Log.d("DATABASE", "id: " + id + ", name: " + name);
}
cursor.close();
}
}
通过以上代码示例,您可以在Android Q中使用作用域存储访问SQLite数据库。请注意,您需要适配Android Q的文件存储限制,并相应地更新您的应用程序代码。