java 如何将初始数据添加到 SQLite 数据库?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/6080975/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-30 14:14:33  来源:igfitidea点击:

How to add initial data to SQLite database?

javaandroidsqlsqlite

提问by LA_

I need to add initial values to SQLite database, once application is started first time. How should I do it?

第一次启动应用程序后,我需要向 SQLite 数据库添加初始值。我该怎么做?

回答by Nikhil

In DBAdapter.java class file you can do that.

在 DBAdapter.java 类文件中,您可以做到这一点。



    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_TABLE_1);
        db.execSQL(CREATE_TABLE_2);
        db.execSQL(CREATE_TABLE_3);
        db.execSQL("insert into " + DATABASE_TABLE3 + "(" + KEY_ROWID + ","
                + KEY_DEF + ") values(1,'')");
    }


Like this type.

喜欢这种类型。

回答by dev4life

One time or first-load requirements like this are common.

像这样的一次性或首次加载要求很常见。

1) Set a flag variable named FIRSTLOAD and set it to True. Be sure to save this variable to isolated storage in the device to read back each time the application is started. 2) Create a method which checks the value of FIRSTLOAD and only executes if FIRSTLOAD is true. Place your code which 'add[s] initial values to SQLite database' here. Then set the FIRSTLOAD variable to false. This way it will only execute the code once!

1) 设置一个名为 FIRSTLOAD 的标志变量并将其设置为 True。确保将此变量保存到设备中的隔离存储中,以便在每次应用程序启动时回读。2) 创建一个方法来检查 FIRSTLOAD 的值,并且仅在 FIRSTLOAD 为真时才执行。将“向 SQLite 数据库添加[s] 初始值”的代码放在这里。然后将 FIRSTLOAD 变量设置为 false。这样它只会执行一次代码!

Boolean FIRSTLOAD= new Boolean("true");

void SetInitialValues()
{
   if(!FIRSTLOAD)
      return;

   // insert your code to run only when application is started first time here


   FIRSTLOAD = False;
}

回答by Jaydeep Khamar

You can create your own SQLite database, put in assets folder and access it as shown in the answer of this link: adding your own SQLite database to an android application

您可以创建自己的 SQLite 数据库,放入 assets 文件夹并按照此链接的答案所示访问它: 将您自己的 SQLite 数据库添加到 android 应用程序

回答by sidslog

You should use SQLiteOpenHelper for this

您应该为此使用 SQLiteOpenHelper

    private static class OpenHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "rss.sqlite";
    private static final int DATABASE_VERSION = 1;

    OpenHelper(Context context) {
       super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE RSS (TITLE TEXT, LINK TEXT, DESCR TEXT, PUBDATE DATE, GUID TEXT, READ TEXT, TYPE TEXT)");
        db.execSQL("CREATE TABLE PAGE (LINK TEXT, CONTENT TEXT)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }
}

And use it in code

并在代码中使用它

    OpenHelper openHelper = new OpenHelper(this.context);
    this.db = openHelper.getWritableDatabase();

回答by turtletramp

In case you are using org.droidparts library OR-Mapper for accessing your database you can do it like this.

如果您使用 org.droidparts 库 OR-Mapper 来访问您的数据库,您可以这样做。

In your implementation of

在您的实施中

public class CategoryEntityMgr extends EntityManager<Category> {
    public CategoryEntityMgr(Context ctx) {
        super(Category.class, ctx);
    }

    // NEW --> this one must be used in onCreateTables or you will receive a database locked exception
    private CategoryEntityMgr(Context ctx, SQLiteDatabase db) {
        super(Category.class, ctx, db);
    }
}

In your implementation of AbstractDbOpenHelper:

在您的 AbstractDbOpenHelper 实现中:

protected void onCreateTables(SQLiteDatabase db) {
    // create your tables as usual
    createTables(db, Booking.class, Category.class);

    // Use a new instance of your entity manager
    //    but use the 2nd constructor to provide the db connection
    CategoryEntityMgr mgr = new CategoryEntityMgr(ctx, db);

    // add the new table row / entity you an to have
    Category c = new Category();
    c.name = "the value for this column";
    mgr.createOrUpdate(c);
}

回答by azelez

You should check the number of objects inside your database each time you open the database for the first time in your app. Don't forget that user can free all data.

每次在应用程序中第一次打开数据库时,您都应该检查数据库中的对象数量。不要忘记用户可以释放所有数据。

    //Open DataBase
    MyDb.Open();

    //Get All List
    MyCursor = MyDb.getAllNames(); //You should have a function to get all the table data

    //First Time we open Database, add default Values
    if ( MyCursor.getCount() < 1 )
    {
        AddDefaultValuesToDataBase();
    }

From Here you can continue to get the values again.

从这里您可以继续再次获取值。

Hope it helps, BR, Adrian.

希望它有所帮助,BR,阿德里安。