简体   繁体   English

从数据库崩溃中检索数据

[英]Retrieving data from DB crashes

I am currently learning to store some data using SQLite. 我目前正在学习使用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, 姓名:12313描述: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 1- DatabaseHandler类

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 2- MainActivity类



 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(); 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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