我在运行时为我的App创建SQLite数据库(如果它不存在),如果有,则插入行 . 因为它应该在运行时创建,我已经通过创建SQLiteOpenHelper的子类并覆盖onCreate()方法来实现它 -
“我需要在项目的/ assets文件夹中放置任何内容吗?”
我没有使用任何内容提供商“我是否需要在AndroidManifest.xml中添加任何标签?”
这就是我所做的 . 字符串已正确定义,我没有得到任何运行时异常 .
SQLiteOpenHelper子类的实现 .
public class MyDB extends SQLiteOpenHelper {
public MyDB(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION );
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(USERAUTH_TABLE_CREATE);
db.execSQL(USERPREF_TABLE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int
newVersion) {
Log.w("Example", "Upgrading database, this will drop tables and
recreate.");
db.execSQL("DROP TABLE IF EXISTS " + USERAUTH_TABLE_NAME);
db.execSQL("DROP TABLE IF EXISTS " + USERPREF_TABLE_NAME);
onCreate(db);
}
}
这是我创建SQLiteOpenHelper的MyDB子类的实例的地方 .
MyDB tdb = new MyDB(Activity.this);
SQLiteDatabase db = tdb.getReadableDatabase();
一切都运行,当我转到sqlite shell并编写以下查询
select * from table_name - 它只是告诉我没有这样的记录存在 . 我设置了断点,似乎在调用getReadableDatabase()后,永远不会执行@Override OnCreate()方法,这是我执行Create table SQLs的地方 . 我也尝试过getWritableDatabase() .
我不明白为什么没有创建表 . 如果有人可以帮助那将是非常棒的 .
谢谢 .
查询文本字符串#1
private static final String USERAUTH_TABLE_CREATE =“CREATE TABLE”USERAUTH_TABLE_NAME“(”“INTEGER NOT NULL”,“dip TEXT NOT NULL”,“email TEXT NOT NULL”,“password TEXT NOT NULL”,“flag INTEGER”“);” ;
查询文本字符串#2
private static final String USERPREF_TABLE_CREATE =
"CREATE TABLE " + USERPREF_TABLE_NAME + " (" +
"tpd TEXT NOT NULL ," +
"cat TEXT NOT NULL" + ");";
5 回答
“我需要在项目的/ assets文件夹中放置任何内容吗?”
没有
“我需要在AndroidManifest.xml中添加任何标签吗?”
没有
你的语法还可以......你可以粘贴你正在创建表的查询吗?
问题解决了 . 代码一直在工作 . sqlite shell没有向我显示表和数据库 . 当我让我的应用程序在模拟器上运行并使用DDMS导航到data> data> your-package-name> databases> your-database-file时,系统显示我已经创建了SQLite DB . 我已经检查过表格了 .
谢谢大家!
这个简单的应用程序将创建一个数据库和一个表w,最后它将
检索你已经进入的值,并在textBox中显示vl .
如果未调用
onCreate()
,则表示已为您的应用程序创建了数据库 . 解决问题的最快方法是在模拟器上删除项目(设置 - >应用程序 - >您的应用程序),然后重新启动应用程序 . 或者,您可以使用ADB删除数据库 - 这取决于您 . 删除数据库后重新启动应用程序将调用onCreate()
,因为数据库不存在,然后将运行表创建sql . 只有当您的数据库不存在时才会调用onCreate()
(这在您第一次在代码中调用数据库时就是如此) .这可能是一个愚蠢的问题,但您是否定义了DATABASE_NAME和DATABASE_VERSION变量?