Android SQLiteOpenHelper:为什么不调用 onCreate() 方法?

2022-08-31 16:26:05

我正在尝试制作我的第一个Android应用程序。我注意到,如果数据库不存在,则不会调用该方法来创建表。但是,即使认为我试图调试,该方法也不起作用。SQLiteOpenHelper.onCreate()onCreate()

请看下面的代码,给我任何建议。任何帮助将不胜感激。

public class NameToPinyinActivity extends Activity {

    DatabaseOpenHelper helper = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.nametopinyin);

        Button searchButton = (Button) findViewById(R.id.search);
        searchButton.setOnClickListener(new ButtonClickListener());

        helper = new DatabaseOpenHelper(NameToPinyinActivity.this);
    }

public class DatabaseOpenHelper extends SQLiteOpenHelper {

    /** DB Name */
    private static final String DB_NAME = "pinyin";

    /** CREATE TABLE SQL */
    private static final String CREATE_TABLE_SQL = "CREATE TABLE UNICODE_PINYIN"
            + "(ID INTEGER PRIMARY KEY AUTOINCREMENT, "
            + "UNICODE TEXT NOT NULL, PINYIN TEXT NOT NULL)";

    public DatabaseOpenHelper(Context context) {
        super(context, DB_NAME, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.beginTransaction();
        try {
            db.execSQL(CREATE_TABLE_SQL);
            db.setTransactionSuccessful();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            db.endTransaction();
        }
    }

答案 1

我也遇到了SQLiteOpenHelper的麻烦。对我有用的是存储一个成员变量

SQLiteDatabase db;

在 SQLiteOpenHelper 子类中并调用

 db = getWritableDatabase();

在构造函数中。

这个问题的答案还包括有用的信息:SQLiteOpenHelper无法调用Create?

我希望这有帮助!


答案 2

在调用方法或类之前,不会创建数据库。getWritableDatabase()getReadableDatabase()SQLiteOpenHelper

就像该数据库将在您实际需要时在内存中创建一样简单。:)


推荐