我在运行时为我的应用程序创建SQLite数据库,如果它不存在并插入行,如果它。由于它应该是在运行时创建的,我已经通过创建SQLiteOpenHelper的子类并覆盖了onCreate()方法来实现它 - “我需要在我的项目的/ assets文件夹中放置任何东西吗?”为Android应用程序创建SQLite数据库
我没有使用任何Content Provider“我需要在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的外壳,并编写以下查询
SELECT * FROM表名 - 它只是告诉我没有这样的记录存在。我设置了断点,看起来在getReadableDatabase()被调用后,@Override的OnCreate()方法从未被执行,这是我执行Create table SQL的地方。我也试过getWritableDatabase() 。
我不明白为什么没有创建表。如果任何人都可以提供帮助,那就太棒了。
谢谢。
查询文本字符串#1
私有静态最后字符串USERAUTH_TABLE_CREATE = “CREATE TABLE” + USERAUTH_TABLE_NAME + “(” + “数INTEGER NOT NULL,” + “浸渍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" + ");";
这可能有相关性,也可能没有关系,但可能有帮助:http://code.google.com/p/android/issues/detail?id=1732。 – 2010-09-23 15:58:16
谢谢查理..有用的信息。我将尝试在一次调用中实现表格创作。 – Aakash 2010-09-23 16:07:21
您是否检查过sqlite文件(数据库)是否实际上是在文件系统上创建的(通过DDMS或telnet模拟器)?如果是这样,您可以将该文件从模拟器复制到桌面,并使用SQLitebrowser检查您的表是否已创建。 – ccheneson 2010-09-23 17:53:37