Android 如何使用预先填写的表格发送应用程序?
我正在开发一个应用程序,其中我创建了一个包含多个表的数据库:Android 如何使用预先填写的表格发送应用程序?,android,database,sqlite,copy,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,
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个条目,我将在其他类中阅读这些条目。那么,如何添加预填充表呢?
也许,有一种最好的方法可以达到同样的目的,如果我不知道的话,很抱歉。您可以使用SQLiteAssetPer为您的应用程序提供预填充的数据,这里是存储库的链接 在您的应用程序中,只需调用构造函数即可
public Yourclassname(Context context)
{
super(context,Database_Name,null, Database_Version);
}
在onCreate()方法中,只需检查是否没有记录
即:执行如下查询:
SELECT * FROM users
并检查记录计数是否为0
int count = cur.getCount();
如果计数为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();
}
[编辑]
然后我读到:我想添加更多的表
这(更改现有数据库结构)必须在
onUpgrade()
方法中完成,将database\u VERSION常量设置为更高的值(以便启动onUpgrade()
方法)。我不需要在资产文件夹中添加完整的数据库,只需预先填充数据库的一个表,它不是重复的。我在发布之前搜索过,没有人问过要发布一个带有预填充表格的android应用程序。我在应用程序启动时创建数据库,所以我不需要捆绑数据库,我只想在同一数据库的一个表中填充一些数据。非常简单,然后:在onCreate()
方法中,只需检查是否没有记录。然后在事务下执行插入。我相信这是正确的方法。你能用一个例子添加一个答案吗?好的,看看我的答案。重命名你的DB_版本常量:应用程序还没有发布。。。为什么我不能在onCreate()方法中添加这个预先填充的表?好吧,只要不考虑编辑部分,您就可以了。我加了一句“我想加一张桌子”。只需从/data/data/…
路径中删除数据库,然后重新运行app.Ehm。。。我是否必须在SQLiteOpenHelper类中创建一个新方法(使用您的代码)?不一定。不过我还是建议了。我将其称为preFillTable(Context ctx,String tableName){…}
我遇到了一些问题,因为我使用了一个异步任务来填充其他表。所以我不得不在AsyncTask中添加您的方法,现在它可以工作了。谢谢你的大力支持。