android - 为 Android 应用程序创建 SQLite 数据库

标签 android sqlite

如果我的应用程序不存在,我将在运行时为其创建 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() 方法永远不会执行,这是我执行创建表 SQL 的地方。我尝试过 getWritableDatabase() 以及。

我不明白为什么没有创建表。如果有人能提供帮助那就太好了。

谢谢。

查询文本字符串#1

私有(private)静态最终字符串 USERAUTH_TABLE_CREATE = “创建表”+ USERAUTH_TABLE_NAME +“(”+ “数字整数不为空,”+ “浸文本不为空,”+ “电子邮件文本不为空,”+ “密码文本不为空,”+ “标志整数”+“);” ;

查询文本字符串#2

private static final String USERPREF_TABLE_CREATE = 
 "CREATE TABLE " + USERPREF_TABLE_NAME + " (" +
 "tpd TEXT NOT NULL ," +
 "cat TEXT NOT NULL" + ");";

最佳答案

如果 onCreate() 未被调用,则数据库已为您的应用创建。解决该问题的最快方法是删除模拟器上的项目(设置 --> 应用程序 --> 您的应用程序),然后重新启动您的应用程序。或者,您可以使用 ADB 来删除您的数据库——这取决于您。删除数据库后重新启动应用程序将调用onCreate(),因为数据库不存在,然后将运行您的建表sql。仅当您的数据库不存在时才会调用 onCreate() (因此几乎是您第一次在代码中调用数据库时。

关于android - 为 Android 应用程序创建 SQLite 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3780001/

相关文章:

android - 像 super 应用程序一样的 Bottom Sheet

android - 如何减少 admob 广告后增加的应用程序大小?

ios - 在 iOS 上使用 LLVM 编译时,Sqlite FTS 不起作用

java - Netbeans 中的 JTable-SQLite 绑定(bind)问题

javascript - 使用 jQtouch 的 Web 应用程序中的 SQLite

Android:后退按钮绕过 onKeyDown 并关闭应用程序

android - 从 Play 服务中删除了帐户选择器?

android - 以编程方式更改在另一个 xml 中用作背景的 border.xml 的 startColor?

angular - 选择错误 SQLITE.ALL - 准备错误 1

iphone - 使用撇号安全地将数据插入 SQLite 数据库