如何使用预先填好的表格发送应用程序?

时间:2015-01-30 08:14:59

标签: android database sqlite copy

我正在开发一个应用程序,在其中我创建了一个包含多个表的数据库:

public class Database extends SQLiteOpenHelper {
    private static final String DB_NAME = "db";
    private static final int DB_VERSION = 1;

    public Database(Context context) {
        super(context,DB_NAME, null, DB_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String table = "CREATE TABLE users(";
        table += "_id TEXT PRIMARY KEY,";
        table += "cat TEXT NOT NULL,";
        table += "city TEXT NOT NULL,";
        table += "country TEXT NOT NULL,";
        table += "addr TEXT,";

        String table2 = "CREATE TABLE special(";
        table2 += "idspec TEXT PRIMARY KEY);";

        String table3 = "CREATE TABLE places(";
        table3 += "id TEXT PRIMARY KEY,";
        table3 += "text TEXT NOT NULL,";
        table3 += "data TEXT NOT NULL,";
        table3 += "user TEXT REFERENCES users(_id));";

        String table4 = "CREATE TABLE average(";
        table4 += "user TEXT PRIMARY KEY,";
        table4 += "place INTEGER NOT NULL,";
        table4 += "avg REAL NOT NULL);";

        db.execSQL(table);
        db.execSQL(table2);
        db.execSQL(table3);
        db.execSQL(table4);
    }

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

我想进一步添加包含大约70个条目的表,我将在其他类中阅读。那么,如何添加预填表? 也许,有一种达到同一目的的最好方法,对不起,如果我不知道的话。

2 个答案:

答案 0 :(得分:1)

您可以使用SQLiteAssetHelper为您的应用提供预先填充的数据,这里是存储库https://github.com/jgilfelt/android-sqlite-asset-helper的链接 在您的应用中,只需将构造函数称为

即可
public Yourclassname(Context context) 
{
super(context,Database_Name,null, Database_Version);
}

答案 1 :(得分:1)

在你的onCreate()中,方法只是检查是否没有记录。

即:执行以下查询:

SELECT * FROM users

并检查记录计数是否为0

int count = cur.getCount();

如果count为0,则在交易下执行插入 注意:我将上下文传递给我的函数,我称之为ctx

这是该功能的核心部分

    SQLiteDatabase db = null;
    try
    {
        db = ctx.openOrCreateDatabase(DB_NAME, Context.MODE_PRIVATE, null);
        // Start the transaction
        db.beginTransaction();

        // Fill the table
        db.execSQL("INSERT INTO users () values ()");
        // ... more inserts...

        db.setTransactionSuccessful();
    }
    catch (final SQLiteException se)
    {
        System.out.println
        (
            ctx.getClass().getSimpleName() + "\n" +
                "Could not import to the database"
        );
        se.printStackTrace();
        result = 0;
    }
    finally
    {
        // End the transaction
        db.endTransaction();
        db.close();
    }

<强> [编辑]

然后我读到:I want to add further table

这(改变现有的数据库结构)必须在onUpgrade()方法中完成,将 DATABASE_VERSION 常量设置为更高的值(以便生成onUpgrade()方法火灾。