0

sqlite でテーブルを作成しようとしていますが、テーブルを作成できないというエラーが表示されます。コードは同じですが、データベースとテーブルの名前が異なります。フィールドは同じです。疑問も一つ。同じフィールドを含む同じデータベースに別のテーブルを作成できませんか?

DbAdapter.java

コードは以下の通りです。

public class DbAdapter {

    private static final String DATABASE_NAME="bible1";
    private static final String DATABASE_TABLE="test1";
    private static final int DATABASE_VERSION=1;

    public static final String KEY_ID="_id";
    public static final String UNITS="units";
    public static final String CHAPTERS="chapters";

    private static final String CREATE_DATABASE="create table test1 (_id integer primary key autoincrement, units text not null, chapters text not null);";

    private SQLiteHelper sqLiteHelper;
    private static SQLiteDatabase sqLiteDatabase;

    private Context context;

    //constructor

    public DbAdapter(Context c){
        context = c;
    }

    private static class SQLiteHelper extends SQLiteOpenHelper{

        public SQLiteHelper(Context context){

            super(context,DATABASE_NAME,null,DATABASE_VERSION);
        }
        @Override
        public void onCreate(SQLiteDatabase db) {
            // TODO Auto-generated method stub
            db.execSQL(CREATE_DATABASE);
            MakeUnits();
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // TODO Auto-generated method stub

        }

    }

    public DbAdapter open() throws SQLException{
        try{
        sqLiteHelper = new SQLiteHelper(context);
        sqLiteDatabase = sqLiteHelper.getWritableDatabase();
        }catch(NullPointerException ne){
            Log.e("error in creating the table", "bye");
        }

        return this;
    }

    public void close(){
        sqLiteHelper.close();
    }

    public static long MakeUnits()
    {
        ContentValues insert1 = new ContentValues();
        insert1.put(UNITS, "Unit1");
        insert1.put(CHAPTERS, "CHAPTER1");
        return sqLiteDatabase.insert(DATABASE_TABLE,null,insert1);
    }

    public Cursor fetchAllNotes(){
        return sqLiteDatabase.query(DATABASE_TABLE, new String[]{KEY_ID,UNITS,CHAPTERS}, null, null, null, null, null);
    }
}

MainActivity.java

public class MainActivity extends ListActivity {

    private DbAdapter Database;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ListView listContent = (ListView) findViewById(android.R.id.list);

        Database= new DbAdapter(this);
        Database.open();

        Cursor c = Database.fetchAllNotes();
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

open() メソッドが呼び出されるとエラーが発生します。それを理解できませんでした。logcat のタグのエラーは、「テーブルの作成中にエラーが発生しました」ということです

4

2 に答える 2

1

sqLiteDatabase.insert内で呼び出そうとしていますMakeUnitsが、このsqLiteDatabase変数は を呼び出すまで null ですgetWritableDatabase。onではなく、insert onに渡しdbて呼び出す必要があります。MakeUnitsdbsqLiteDatabase

于 2012-10-25T06:22:25.443 に答える
0

データベースは、getWritableDatabase()/getReadableDatabase() を呼び出した場合にのみ作成されます

書き込み可能なデータベースに対する権限がない場合は、読み取り可能なデータベースが取得されます。

    public SQLiteDatabase getWritableDB() {
        try {
            return helper.getWritableDatabase();
        } catch (Exception e) {
            return getReadableDB();
        }
    }

    public SQLiteDatabase getReadableDB() {
        return helper.getReadableDatabase();
    }
于 2012-10-25T06:21:13.490 に答える