Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android活动中共享相同的SQLite数据库_Android_Database_Sqlite - Fatal编程技术网

在Android活动中共享相同的SQLite数据库

在Android活动中共享相同的SQLite数据库,android,database,sqlite,Android,Database,Sqlite,如何在多个活动之间共享同一个SQLite数据库 基本上,我的数据库结构如下: 每次我需要在其他活动中查询或更新数据库时,我都必须创建一个新对象。例如,Database db=new数据库(classname.this) 由于每个活动都将为自己创建一个数据库对象,因此我无法使这些活动在同一数据库中共享相同的数据 public class Database { public static final String KEY_ROWID = "_id"; public static fi

如何在多个活动之间共享同一个SQLite数据库

基本上,我的数据库结构如下:

每次我需要在其他活动中查询或更新数据库时,我都必须创建一个新对象。例如,
Database db=new数据库(classname.this)

由于每个活动都将为自己创建一个数据库对象,因此我无法使这些活动在同一数据库中共享相同的数据

public class Database {
    public static final String KEY_ROWID = "_id";
    public static final String KEY_NAME = "food_name";
    public static final String KEY_HOTNESS = "food_hotness";

    private static final String DATABASE_NAME = "myDB";
    private static final String DATABASE_TABLE = "foodTable";
    private static final int DATABASE_VERSION = 1;

    private DbHelper ourHelper;
    private final Context ourContext;
    private SQLiteDatabase ourDatabase;

    private static class DbHelper extends SQLiteOpenHelper{
        public DbHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
            // TODO Auto-generated constructor stub
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            // TODO Auto-generated method stub
            db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
                       KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                       KEY_NAME + " TEXT NOT NULL, " +
                       KEY_HOTNESS + " TEXT NOT NULL);"
                      );
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // TODO Auto-generated method stub
            db.execSQL("DROP TABLE IF EXISTS" + DATABASE_TABLE);
            onCreate(db);
        }
    }

    public Database(Context c) {
        ourContext = c; //Different objects...how to solve?
    }

    public Database open() throws SQLException {
        ourHelper = new DbHelper(ourContext);
        ourDatabase = ourHelper.getWritableDatabase();
        return this;
    }

    public void close() {
        ourHelper.close();
    }

除了使用数据库助手,您不必做任何其他事情。它将确保您的所有活动都访问相同的数据库。即使在每个活动中都有不同的数据库助手对象,它们都将访问同一个数据库。

除了使用数据库助手,您不必执行任何其他操作。它将确保您的所有活动都访问相同的数据库。尽管每个活动中都有不同的数据库帮助对象,但它们都将访问同一个数据库。

请查看有关getWriteableDatabase()函数的文档。您将看到,它并不是每次都打开一个新的数据库对象。它会将其保存在缓存中,直到您将其关闭。onCreate()仅在第一次需要或升级版本时使用


()

检查getWriteableDatabase()函数的文档。您将看到,它并不是每次都打开一个新的数据库对象。它会将其保存在缓存中,直到您将其关闭。onCreate()仅在第一次需要或升级版本时使用

()

请阅读以下内容:

您应该在活动之间共享相同的SQLiteOpenHelper。如果你很小心的话,你不需要这样做,但是如果你做错事的话,你可能会陷入麻烦

基本上,将SQLiteOpenHelper作为单例保存,并在任何地方使用。

请阅读以下内容:

您应该在活动之间共享相同的SQLiteOpenHelper。如果你很小心的话,你不需要这样做,但是如果你做错事的话,你可能会陷入麻烦

基本上,将SQLiteOpenHelper作为一个单例,并在任何地方使用它。

断开的链接,新的:断开的链接,新的: