使用帮助程序创建新数据库,但是根据创建的文档,应该在创建数据库后调用,但不能正确调用。任何PLZ都可以帮我解决这个问题。 Plz见下面的代码。
1)有没有办法创建数据库而不是使用帮助器,如果是这样plz建议我! 2)在数据库创建中以及杀死数据库时将调用哪些回调?
OpenHelper(Context context)
{
super(context, "examplee.db", null, 1 );
SQLiteDatabase sqlite = null;
Log.w(TAG, "Openhelp database, ");
sqlite = context.openOrCreateDatabase("examplee.db", Context.MODE_PRIVATE, null );
Log.e ( TAG,"SQ lite database object "+sqlite );
}
public void onOpen(SQLiteDatabase db)
{
Log.e ( TAG,"On open called ");
}
@Override
public void onCreate(SQLiteDatabase db)
{
Log.w(TAG, " On create ");
//db.execSQL(sql);
//db.execSQL("CREATE TABLE " + TABLE_NAME + "(id INTEGER PRIMARY KEY, name TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
Log.w(TAG, "Upgrading database, this will drop tables and recreate.");
//db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
//onCreate(db);
}
}
提前致谢,
答案 0 :(得分:5)
以下是关于如何从模拟器中删除数据库文件的详细说明(在实际的Android手机上调试非常相似)。
运行您的模拟器。如果您遇到问题,那么您可以忽略此帮助信息的其余部分!
根据您的操作系统启动命令行界面。
执行命令:'adb shell'(当然,省略引号)。这将带你进入Android Debug Bridge;你的提示将改为简单的英镑符号。无论您的原始操作系统如何,您现在都处于简化的unix OS中。
您现在在模拟器中。键入命令'ls -l'以验证您是否在根目录中(您将看到与unix根目录系统非常相似的内容)。
将目录更改为存储数据库文件的位置。假设您运行的程序位于软件包com.sillynames.myprogram5中,并且数据库文件名为“myblackbook.db”。您将在目录中找到该文件:
/data/data/com.sillynames.myprogram5/databases/myblackbook.db
进入该目录后,只需通过'rm myblackbook.db'删除数据库。
希望这有帮助! 斯科特
答案 1 :(得分:1)
SQLiteOpenHelper javadoc表示onCreate是“第一次创建数据库时调用。这是表的创建和表的初始填充应该发生的地方。”每次应用程序出现时都不会调用它。在您的情况下,可能已经创建了数据库。
验证db是否存在使用adb登录shell并转到/ data / data /<您的应用程序包名称> / databases并查看employees.db文件是否存在。
在onCreate方法中,您通常会创建表并加载任何初始数据。这是在安装后第一次启动应用程序时执行的。
答案 2 :(得分:0)
有没有办法创建数据库而不是使用帮助器,如果是这样,请告诉我!
是的,您可以使用工具SQLite Manager
或其他工具在系统上手动创建数据库,并将sqlite db
文件捆绑到项目的assets
文件夹中。当您的应用程序运行时,您需要将该数据库文件复制到路径/data/data/your_app_package_name/databases/
请参阅:Using your own SQLite database in Android applications
在数据库创建中以及杀死数据库时将调用哪些回调?
第一次创建数据库时,调用onCreate()
方法。并且无法kill/drop
数据库,而是可以删除该db文件。
答案 3 :(得分:0)
确保您等待获取数据库引用。检查您是否有我的问题的数据库参考。已经在类的顶部声明了 Database _db 但在我的函数中它是 null
final Database db = await initDb();
print("insert to db $db");
初始化数据库
Future<Database> initDb() async {
print("called db init");
try {
final dbFolder = await getDatabasesPath();
if (!await Directory(dbFolder).exists()) {
print("db path does not exist");
await Directory(dbFolder).create(recursive: true).then((value) {
print("db directory $value");
});
}
final dbPath = join(dbFolder, _kBdFileName);
print("db path $dbPath");
// open db
_db = await openDatabase(
dbPath,
version: 1,
onCreate: (db, version) async {
print("Call on create");
await _initDBtables(db).then((value) {
print("on created ");
});
},
);
print("Db initialized $_db");
// success init db
return _db;
} on DatabaseException catch (e) {
print(e);
return _db;
}
}