简体   繁体   中英

Retrieving data from DB crashes

I am currently learning to store some data using SQLite. The current project is planned to be a notes app. When launching the app there are numerous errors. One is that it cant insert the data and the other being that the table notes don't exist. If I leave the code to display the data in the login, the app crashes.

I tried to delete the function to retrieve the data and display it and the app stopped crashing, however, I was still getting errors about not being able to insert the data into the table

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        DatabaseHandler db = new DatabaseHandler(this);
            db.AddNote(new Note("12313", "jkfsabk"));

        List<Note> notes = db.getAllNotes();

        for (Note c: notes){
            String log = "NAME: " + c.getNoteName() + " DESCRIPTION: " + c.getNoteDescription() + "\n";
            text = text + log;
        }
        System.out.println(text);
public class DatabaseHandler extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "notesDB";
    private static final String TABLE_NAME = "notes";

    private static final String KEY_ID = "id";
    private static final String KEY_NAME = "name";
    private static final String KEY_DESCRIPTION = "description";


    public DatabaseHandler(Context context) {
        super(context, Util.DATABASE_NAME, null, Util.DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_CONTACT_TABLE = "CREATE TABLE " + TABLE_NAME + "(" + KEY_ID + " INTEGER PRIMARY KEY ," + KEY_NAME + " TEXT," + KEY_DESCRIPTION + " TEXT)";
        db.execSQL(CREATE_CONTACT_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);

        onCreate(db);
    }

    public void AddNote(Note note){
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues value = new ContentValues();
        value.put(KEY_NAME, note.getNoteName());
        value.put(KEY_DESCRIPTION, note.getNoteDescription());

        db.insert(TABLE_NAME, null, value);
        db.close();
    }

    Note getNote(int id) {
        SQLiteDatabase db = this.getReadableDatabase();

        Cursor cursor = db.query(TABLE_NAME, new String[]{KEY_ID, KEY_NAME, KEY_DESCRIPTION}, KEY_ID
                + "=?", new String[]{String.valueOf(id)}, null, null, null, null);
        if (cursor != null){
            cursor.moveToFirst();
        }

        Note note = new Note(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2));

        return note;
    }

    public List<Note> getAllNotes(){
        List<Note> noteList = new ArrayList<>();

        String selectQuery = "SELECT  * FROM " + TABLE_NAME;

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);

        if(cursor.moveToFirst()){
            do{
                Note note = new Note();
                note.setID(Integer.parseInt(cursor.getString(0)));
                note.setNoteName(cursor.getString(1));
                note.setNoteDescription(cursor.getString(2));

                noteList.add(note);
            } while(cursor.moveToNext());

        } cursor.close();

        return noteList;
    }

    public int updateNotes(Note note){
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_NAME, note.getNoteName());
        values.put(KEY_DESCRIPTION, note.getNoteDescription());

        return db.update(TABLE_NAME, values, KEY_ID + "=?", new String[]{String.valueOf(note.getID())});
    }

    public void deleteNote(Note note){
        SQLiteDatabase db = this.getWritableDatabase();

        db.delete(TABLE_NAME, KEY_ID + "=?", new String[]{String.valueOf(note.getID())});
        db.close();
    }

    public int getNoteCount(Note note){
        String countQuery = "SELECT  * FROM " + TABLE_NAME;
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(countQuery, null);
        cursor.close();


        return cursor.getCount();
    }
}
public class Note {
    private int noteID;
    private String noteName;
    private String noteDescription;
    public Note() {}
    public Note(Integer id, String notename, String notedescription) {
        this.noteID = id;
        this.noteName = notename;
        this.noteDescription = notedescription;
    }

    public Note(String notename, String notedescription){
        this.noteName = notename;
        this.noteDescription = notedescription;
    }
    public void setID(int id) {
        this.noteID = id;
    }
    public int getID() {
        return this.noteID;
    }
    public void setNoteName(String notename) {
        this.noteName = notename;
    }
    public String getNoteName() {
        return this.noteName;
    }
    public void setNoteDescription(String notedescription) {
        this.noteDescription = notedescription;
    }
    public String getNoteDescription() {
        return this.noteDescription;
    }


}

I expect the output

NAME: 12313 DESCRIPTION: jkfsabk,

but instead I get the error:

2019-06-16 18:03:57.155 24382-24382/com.example.myapplication E/libc: Access denied finding property "vendor.perf.iop_v3.enable"
2019-06-16 18:03:57.155 24382-24382/com.example.myapplication E/libc: Access denied finding property "vendor.perf.iop_v3.enable.debug"
2019-06-16 18:03:57.165 24382-24382/com.example.myapplication E/libc: Access denied finding property "vendor.iop.enable_uxe"
2019-06-16 18:03:57.172 24382-24676/com.example.myapplication E/libc: Access denied finding property "vendor.debug.egl.profiler"
2019-06-16 18:03:57.172 24382-24676/com.example.myapplication E/libc: Access denied finding property "vendor.debug.prerotation.disable"
2019-06-16 18:03:57.386 24382-24382/com.example.myapplication E/libc: Access denied finding property "vendor.perf.gestureflingboost.enable"
2019-06-16 18:03:57.390 24382-24382/com.example.myapplication E/libc: Access denied finding property "vendor.perf.iop_v3.enable.debug"
2019-06-16 18:03:57.440 24382-24439/com.example.myapplication E/libc: Access denied finding property "vendor.debug.prerotation.disable"
2019-06-16 18:03:57.441 24382-24439/com.example.myapplication E/libc: Access denied finding property "ro.vendor.graphics.memory"
2019-06-16 18:03:57.441 24382-24439/com.example.myapplication E/libc: Access denied finding property "vendor.debug.prerotation.disable"
2019-06-16 18:03:57.441 24382-24439/com.example.myapplication E/libc: Access denied finding property "vendor.debug.prerotation.disable"
2019-06-16 18:03:57.442 24382-24439/com.example.myapplication E/libc: Access denied finding property "vendor.debug.prerotation.disable"
2019-06-16 18:03:57.449 24382-24439/com.example.myapplication E/libc: Access denied finding property "vendor.debug.egl.changepixelformat"
2019-06-16 18:03:57.482 24382-24439/com.example.myapplication E/libc: Access denied finding property "vendor.debug.egl.swapinterval"
2019-06-16 18:03:57.497 24382-24439/com.example.myapplication E/libc: Access denied finding property "vendor.debug.egl.swapinterval"
2019-06-16 18:03:57.518 24382-24439/com.example.myapplication E/libc: Access denied finding property "vendor.debug.egl.swapinterval"
2019-06-16 18:03:57.527 24382-24439/com.example.myapplication E/libc: Access denied finding property "vendor.debug.egl.swapinterval"
2019-06-16 18:03:57.544 24382-24439/com.example.myapplication E/libc: Access denied finding property "vendor.debug.egl.swapinterval"
2019-06-16 18:03:58.042 24382-24439/com.example.myapplication E/libc: Access denied finding property "vendor.debug.egl.swapinterval"
2019-06-16 18:03:58.542 24382-24439/com.example.myapplication E/libc: Access denied finding property "vendor.debug.egl.swapinterval"
2019-06-16 18:03:59.042 24382-24439/com.example.myapplication E/libc: Access denied finding property "vendor.debug.egl.swapinterval"
2019-06-16 18:03:59.561 24382-24439/com.example.myapplication E/libc: Access denied finding property "vendor.debug.egl.swapinterval"
2019-06-16 18:04:00.078 24382-24439/com.example.myapplication E/libc: Access denied finding property "vendor.debug.egl.swapinterval"
2019-06-16 18:04:00.573 24382-24439/com.example.myapplication E/libc: Access denied finding property "vendor.debug.egl.swapinterval"
2019-06-16 18:04:01.097 24382-24439/com.example.myapplication E/libc: Access denied finding property "vendor.debug.egl.swapinterval"
2019-06-16 18:04:01.593 24382-24439/com.example.myapplication E/libc: Access denied finding property "vendor.debug.egl.swapinterval"
2019-06-16 18:04:02.082 24382-24439/com.example.myapplication E/libc: Access denied finding property "vendor.debug.egl.swapinterval"

I have some corrections in your codes and I try this code , then I get result as you want . Try It .

1- the DatabaseHandler class

public class DatabaseHandler extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "notesDB";
    private static final String TABLE_NAME = "notes";

    private static final String KEY_ID = "id";
    private static final String KEY_NAME = "name";
    private static final String KEY_DESCRIPTION = "description";


    public DatabaseHandler(Context context) {
        super(context, DATABASE_NAME , null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_CONTACT_TABLE = "CREATE TABLE " + TABLE_NAME + "(" + KEY_ID + " INTEGER PRIMARY KEY ," + KEY_NAME + " TEXT," + KEY_DESCRIPTION + " TEXT)";
        db.execSQL(CREATE_CONTACT_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);

        onCreate(db);
    }

    public void AddNote(Note note){
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues value = new ContentValues();
        value.put(KEY_NAME, note.getNoteName());
        value.put(KEY_DESCRIPTION, note.getNoteDescription());

        db.insert(TABLE_NAME, null, value);
        db.close();
    }

    Note getNote(int id) {
        SQLiteDatabase db = this.getReadableDatabase();

        Cursor cursor = db.query(TABLE_NAME, new String[]{KEY_ID, KEY_NAME, KEY_DESCRIPTION}, KEY_ID
                + "=?", new String[]{String.valueOf(id)}, null, null, null, null);
        if (cursor != null){
            cursor.moveToFirst();
        }

        Note note = new Note(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2));

        return note;
    }

    public ArrayList<Note> getAllNotes(){
        ArrayList<Note> noteList = new ArrayList<>();

        String selectQuery = "SELECT  * FROM " + TABLE_NAME;

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);

        if(cursor.moveToFirst()){
            do{
                Note note = new Note();
                note.setID(Integer.parseInt(cursor.getString(0)));
                note.setNoteName(cursor.getString(1));
                note.setNoteDescription(cursor.getString(2));

                noteList.add(note);
            } while(cursor.moveToNext());

        } cursor.close();

        return noteList;
    }

    public int updateNotes(Note note){
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_NAME, note.getNoteName());
        values.put(KEY_DESCRIPTION, note.getNoteDescription());

        return db.update(TABLE_NAME, values, KEY_ID + "=?", new String[]{String.valueOf(note.getID())});
    }

    public void deleteNote(Note note){
        SQLiteDatabase db = this.getWritableDatabase();

        db.delete(TABLE_NAME, KEY_ID + "=?", new String[]{String.valueOf(note.getID())});
        db.close();
    }

    public int getNoteCount(Note note){
        String countQuery = "SELECT  * FROM " + TABLE_NAME;
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(countQuery, null);
        cursor.close();


        return cursor.getCount();
    }
}


2- MainActivity class



 setContentView(R.layout.activity_main);
        DatabaseHandler db = new DatabaseHandler(this);
        db.AddNote(new Note("12313", "jkfsabk"));

        ArrayList<Note> notes = db.getAllNotes();
        String log = null;
        for (Note c: notes){
             log = "NAME: " + c.getNoteName() + " DESCRIPTION: " + c.getNoteDescription() + "\n";
          //  text = text + log;
        }
        Toast.makeText(this, log+"" , Toast.LENGTH_SHORT).show(); 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM