初始化一个sqlite数据库android

use*_*104 4 android android-sqlite

大家好,我对在 android 中开发非常陌生,我想向我的应用程序添加一个数据库。

问题是我不知道如何只初始化整个表一次。

我做了很多阅读,我发现你可以通过覆盖onCreate(SQLiteDatabase db)helper 类中的方法来做到这一点。

这些是我的数据字段和我的onCreate(SQLiteDatabase db)方法。

public static final String KEY_ROWID = "_id";
public static final String KEY_NAME = "name";
public static final String KEY_EIGHTU = "8u";
public static final String KEY_NINEU = "9u";
public static final String KEY_TENU = "10u";
public static final String KEY_ELEVENU = "11u";
private static final String TAG = "DBAdapter"; 

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(DATABASE_CREATE);        
}
Run Code Online (Sandbox Code Playgroud)

但我不确定如何......有什么想法吗?

主要问题是我有多个要初始化的行。

Sur*_*gch 5

其他答案似乎没有回答如何用初始值实际填充数据库,所以我将在这里分享我是如何做到的。

基本上,您将数据库列保存为 xml 文件中的字符串数组。我将只显示一个数组,但您可以为其他列做更多。(不过,您需要小心,多列不要弄乱数组顺序,从而弄乱数据库行。)

创建一个 /res/values/arrays.xml 文件并将数组添加到其中。

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string-array name="my_array">

            <item>string 1</item>
            <item>string 2</item>
            <item>string 3</item>
            <item>string 4</item>
            <item>string 5</item>

    </string-array>

</resources>
Run Code Online (Sandbox Code Playgroud)

然后,当您在助手类中创建数据库时,您可以获取该数组。这是我所做的:

private static class DatabaseHelper extends SQLiteOpenHelper {

    private final Context fContext;

    // constructor
    DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        fContext = context;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + TABLE_NAME + " ("
                + FIRST_COLUMN + " INTEGER PRIMARY KEY,"
                + SECOND_COLUMN + " TEXT NOT NULL,"
                + THIRD_COLUMN + " INTEGER,"
                + FOURTH_COLUMN + " TEXT NOT NULL"
                + ");");

        // Initialize the db with values from my_array.xml
        final int DEFAULT_THIRD_COLUMN = 1;
        final String DEFAULT_FOURTH_COLUMN = "";
        ContentValues values = new ContentValues();
        Resources res = fContext.getResources();
        String[] myArray = res.getStringArray(R.array.my_array);
        for (String item : myArray){
            values.put(SECOND_COLUMN, item);
            values.put(THIRD_COLUMN, DEFAULT_THIRD_COLUMN);
            values.put(FOURTH_COLUMN, DEFAULT_FOURTH_COLUMN);
            db.insert(TABLE_NAME, null, values);
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                + newVersion + ", which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);

    }
}
Run Code Online (Sandbox Code Playgroud)

请参阅这些链接以获取更多帮助:

我所做的另一件事是提前制作数据库,然后在安装应用程序时将其复制到数据库文件夹中。如果您有大量数据并且不想从 Internet 下载数据库,这可能会更有效。如果您想复制您的数据库,请参阅此答案


Bil*_*ary 0

如果您想用代码填充它,本教程将会有所帮助。这是一个由 14 个视频教程组成的系列。

http://thenewboston.org/watch.php?cat=6&number=111

如果您想访问预加载的数据库,请查看此链接。

http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/

但两者都没有解决平板电脑所需的内容提供商的使用问题。但两者都可以帮助您入门,一旦您了解了它们,您就可以了解提供者。