android 如何将数据输入到该数据库中?

dced5bon  于 2023-06-20  发布在  Android
关注(0)|答案(2)|浏览(163)

这是一个空数据库,用于使用Java进行CRUD Android应用程序,我想在此SQLite中输入初始数据,而无需首先安装应用程序,因此如果他们安装应用程序,则会有可见的初始数据。如何在此数据库中输入初始数据?

import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DataHelper extends SQLiteOpenHelper {

    public static final String DB_NAME = "contacts.db";
    public static final String TABLE_NAME = "CONTACTS";
    public static final int DB_VERSION = 3;
    public static final String COLUMN_1 = "ID";
    public static final String COLUMN_2 = "NMPENYAKIT";
    public static final String COLUMN_3 = "DESKRIPSI";
    public static final String COLUMN_4 = "GEJALA";
    public static final String COLUMN_5 = "SOLUSI";
    public static final String COLUMN_6 = "IMAGE";
    public static final String QUERY_CREATE = "CREATE TABLE "+TABLE_NAME+" ("
            +COLUMN_1+" INTEGER PRIMARY KEY AUTOINCREMENT, "
            +COLUMN_2+" TEXT, "
            +COLUMN_3+" TEXT, "
            +COLUMN_4+" TEXT, "
            +COLUMN_5+" TEXT, "
            +COLUMN_6+" TEXT)";
    public DataHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, DB_NAME, null, DB_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(QUERY_CREATE);
        }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME);
        onCreate(db);
    }
    public void insertData(ContentValues values){
        getWritableDatabase().insert(TABLE_NAME, null, values);
    }
}
lvmkulzt

lvmkulzt1#

在安装应用程序之前无法插入数据,因为DB基于应用程序上下文,其数据存储在以应用程序包命名的自己的本地文件夹中。
理想情况下,您希望在启动时插入数据,并有某种方法或注意到数据已安装,例如检查DB是否为空或将其保存到共享首选项。
我还建议在启动画面中进行插入操作,如果数据量很大,一旦完成,您可以加载到UI中以可视化数据。

n6lpvg4x

n6lpvg4x2#

可以嵌入预填充的数据库并在首次启动时安装它。
您只需要创建包含要嵌入的数据的db文件,并将其存储在asset文件夹中。
例如,使用Room,您必须覆盖RoomDatabase对象以从文件创建DB

@Database(entities = {Object.class, Thing.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {

    private static final String DB_NAME = "database.db";
    private static volatile AppDatabase INSTANCE;

    public static AppDatabase getDatabase(final Context context) {
        if (INSTANCE == null) {
            synchronized (AppDatabase.class) {
                if (INSTANCE == null) {
                    INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
                                    AppDatabase.class, DB_NAME)
                            .createFromAsset("prepopulated.db")
                            .allowMainThreadQueries()
                            .fallbackToDestructiveMigrationOnDowngrade()
                            .build();
                }
            }
        }
        return INSTANCE;
    }
}

相关问题