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
How to add initial data to SQLite database?
提问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,阿德里安。