Android 表不存在错误

Android 表不存在错误,android,android-studio,android-sqlite,Android,Android Studio,Android Sqlite,我已经创建了一个包含表的数据库。当我试图提取表中的数据时,AndroidStudio显示一个错误,表示表不存在 我参考了这些链接以寻求帮助 第一个链接没有回答我的问题,第二个链接太复杂了 这是我的代码摘录 DbHelper.java: public DbHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } public void onCreate(

我已经创建了一个包含表的数据库。当我试图提取表中的数据时,AndroidStudio显示一个错误,表示表不存在

我参考了这些链接以寻求帮助

  • 第一个链接没有回答我的问题,第二个链接太复杂了

    这是我的代码摘录

    DbHelper.java:

    public DbHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }
    
        public void onCreate(SQLiteDatabase database) {
    
            String CREATE_TABLE_NOTES_QUERY = "CREATE TABLE " + 
                NoteEntry.TABLE_NAME_NOTES + " (" +
                NoteEntry._ID_NOTES + " INTEGER NOT NULL AUTOINCREMENT, " +
                NoteEntry.COLUMN_COUNTRY + " TEXT NOT NULL, " +
                NoteEntry.COLUMN_DENOMINATION + " REAL NOT NULL DEFAULT 0, " +
                NoteEntry.COLUMN_YEAR + " INTEGER, " +
                NoteEntry.COLUMN_OBVERSE_DESCRIPTION + " TEXT DEFAULT \"Not Available\", " +
                NoteEntry.COLUMN_REVERSE_DESCRIPTION + " TEXT DEFAULT \"Not Available\", " +
                NoteEntry.COLUMN_LENGTH + " REAL DEFAULT 0.0, " +
                NoteEntry.COLUMN_BREADTH + " REAL DEFAULT 0.0, " +
                NoteEntry.COLUMN_THICKNESS + " REAL DEFAULT 0.0);";
    
            database.execSQL(CREATE_TABLE_NOTES_QUERY);
        }
    
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
    }
    
    NoteActivity.java:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_note);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
    
        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(NoteActivity.this, NoteEditorActivity.class);
                startActivity(intent);
            }
        });
    
        displayDatabaseInfo();
    }
    
    private void displayDatabaseInfo() {
    
        CollectoDbHelper mDbHelper = new CollectoDbHelper(this);
        SQLiteDatabase db = mDbHelper.getReadableDatabase();
        Cursor cursor = db.rawQuery("SELECT * FROM " + CollectoContract.NoteEntry.TABLE_NAME_NOTES, null);
        try {
            TextView displayView = (TextView) findViewById(R.id.textview_note);
            displayView.setText("Number of rows in notes table: " + cursor.getCount());
        } finally {
            cursor.close();
        }
    }
    
    日志:

    07-25 14:55:57.357 9162-9162/com.example.android.collecto E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.android.collecto, PID: 9162
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.collecto/com.example.android.collecto.NoteActivity}: android.database.sqlite.SQLiteException: no such table: notes (code 1): , while compiling: SELECT * FROM notes
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2762)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2848)
        at android.app.ActivityThread.-wrap12(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1552)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6334)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
     Caused by: android.database.sqlite.SQLiteException: no such table: notes (code 1): , while compiling: SELECT * FROM notes
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
        at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
        at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
        at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
        at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
        at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
        at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345)
        at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1284)
        at com.example.android.collecto.NoteActivity.displayDatabaseInfo(NoteActivity.java:49)
        at com.example.android.collecto.NoteActivity.onCreate(NoteActivity.java:35)
        at android.app.Activity.performCreate(Activity.java:6743)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1134)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2715)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2848) 
        at android.app.ActivityThread.-wrap12(ActivityThread.java) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1552) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:154) 
        at android.app.ActivityThread.main(ActivityThread.java:6334) 
        at java.lang.reflect.Method.invoke(Native Method)
    
    07-25 14:55:57.357 9162-9162/com.example.android.collecto E/AndroidRuntime:FATAL EXCEPTION:main
    进程:com.example.android.collecto,PID:9162
    java.lang.RuntimeException:无法启动活动组件信息{com.example.android.collecto/com.example.android.collecto.NoteActivity}:android.database.sqlite.SQLiteException:没有这样的表:notes(代码1):,编译时:从notes中选择*
    在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2762)上
    位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2848)
    位于android.app.ActivityThread.-wrap12(ActivityThread.java)
    在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1552)上
    位于android.os.Handler.dispatchMessage(Handler.java:102)
    位于android.os.Looper.loop(Looper.java:154)
    位于android.app.ActivityThread.main(ActivityThread.java:6334)
    位于java.lang.reflect.Method.invoke(本机方法)
    在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)上
    位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
    原因:android.database.sqlite.SQLiteException:没有这样的表:notes(代码1):,编译时:SELECT*FROM notes
    位于android.database.sqlite.SQLiteConnection.nativePrepareStatement(本机方法)
    位于android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
    位于android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
    位于android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
    位于android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58)
    位于android.database.sqlite.SQLiteQuery(SQLiteQuery.java:37)
    位于android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
    位于android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345)
    位于android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1284)
    位于com.example.android.collecto.NoteActivity.displayDatabaseInfo(NoteActivity.java:49)
    位于com.example.android.collecto.NoteActivity.onCreate(NoteActivity.java:35)
    位于android.app.Activity.performCreate(Activity.java:6743)
    位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1134)
    在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2715)上
    位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2848)
    位于android.app.ActivityThread.-wrap12(ActivityThread.java)
    在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1552)上
    位于android.os.Handler.dispatchMessage(Handler.java:102)
    位于android.os.Looper.loop(Looper.java:154)
    位于android.app.ActivityThread.main(ActivityThread.java:6334)
    位于java.lang.reflect.Method.invoke(本机方法)
    

    有人能指导我解决我的错误吗?

    试着调用
    onUpgrade()
    并在内部调用
    onCreate()

    另外,请卸载应用程序并重新安装

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // Drop older table if existed
        db.execSQL("DROP TABLE IF EXISTS " + CREATE_TABLE_NOTES_QUERY);
        // Create tables again
        onCreate(db);
    }
    

    NoteEntry.TABLE\u NAME\u NOTES的值是多少?
    @AkhileshPatil,NoteEntry.TABLE\u NAME\u NOTES=“NOTES”您是否在任何地方调用了onCreate of DBHelper类来在DB中创建表?@kapsym,我不太明白,但是,我在displayDatabaseInfo()中调用了DBHelper类的构造函数方法,但这只会使用您提供的名称为您创建一个空数据库。之后,您还需要在该数据库内创建表。为此,您需要手动调用oncreate方法,或者您可以实现onUpgrade方法,并在其中调用oncreate,该方法将在安装应用程序时自动运行。仍不工作?您可以尝试此方法以获取参考,谢谢!成功了!而且我认为我没有将主键添加到_ID列。我的错误。但非常感谢阿克希勒最受欢迎的朋友:)