60

初めての 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();
        }
    }
4

10 に答える 10

64

SQLiteOpenHelperにも問題がありました。私にとってうまくいったのは、メンバー変数を格納することでした

SQLiteDatabase db;

SQLiteOpenHelper サブクラスと呼び出し

 db = getWritableDatabase();

コンストラクターで。

この質問への回答には、役立つ情報も含まれています

これが役立つことを願っています!

于 2011-07-22T15:04:49.150 に答える
26

getWritableDatabase()メソッドまたはクラスgetReadableDatabase()を呼び出すまでSQLiteOpenHelper、データベースは作成されません。

そのデータベースは、実際に必要なときにメモリ内に作成されるのと同じくらい簡単です.:)

于 2013-02-27T10:08:20.740 に答える
-3

AUTOINCREMENTAUTO INCREMENTに変更できます

メモ SQLiteOpenHelperデータベースが初めて作成されるときにonCreateが呼び出されます。onCreate メソッドでテーブルを作成すると、新しいSQLiteDatabaseを作成できません。例を見ることができます

    @Override
    public void onCreate(SQLiteDatabase db) {
        String stringCreateTable = "CREATE TABLE "+"tblUser"+" ( " +
                "id TEXT PRIMARY KEY, " +
                "name TEXT )";
        db.execSQL(stringCreateTable);
    }

于 2015-10-12T04:32:12.640 に答える