简体   繁体   English

Android SQLite 数据获取

[英]Android SQLite data fetching

Every time I run a "select *" query from my SQLite, the app keeps stopping.每次我从我的 SQLite 运行“select *”查询时,应用程序都会停止。 I've deduced it to it calling the database helper every time, but I don't know how to fix it.我推断它每次都调用数据库助手,但我不知道如何修复它。

MainActivity.java主活动.java

public class MainActivity extends AppCompatActivity {
    DatabaseHelper databaseHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        getWindow().setStatusBarColor(Color.WHITE);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        displayUsers();
    }

    public void displayUsers() {
        Cursor cursor = databaseHelper.getAllUsers(); //here's where the error keeps on happening
        if(cursor.getCount() == 0) {
            Toast.makeText(this, "none", Toast.LENGTH_SHORT).show();
        }
    }
}

DatabaseHelper.java数据库助手

public class DatabaseHelper extends SQLiteOpenHelper {
    public static final String DATABASE_NAME = "reminders.db";
    public static final String T_1 = "tbl_users";
    public static final String T1_COL_1 = "ID";
    public static final String T1_COL_2 = "FIRST_NAME";
    public static final String T1_COL_3 = "MIDDLE_INITIAL";
    public static final String T1_COL_4 = "LAST_NAME";
    public static final String T1_COL_5 = "PHONE";
    public static final String T1_COL_6 = "EMAIL";
    public static final String T1_COL_7 = "USERNAME";
    public static final String T1_COL_8 = "PASSWORD";

    public DatabaseHelper(@Nullable Context context) {
        super(context, DATABASE_NAME, null, 1);
        SQLiteDatabase database = this.getWritableDatabase();
    }
    ...//other functions

    public Cursor getAllUsers() {
        SQLiteDatabase database = this.getWritableDatabase();
        Cursor cursor = database.rawQuery("select * from " + T_1, null);
        return cursor;
    }
}

Before returning cursor close your database在返回游标之前关闭您的数据库

public Cursor getAllUsers() {
   SQLiteDatabase database = this.getWritableDatabase();
   Cursor cursor = database.rawQuery("select * from " + T_1, null);

   database.close(); // Added

   return cursor;
}

Your DatabaseHelper class doesn't create any object cause you didn't call new DatabaseHelper (this).您的 DatabaseHelper 类不会创建任何对象,因为您没有调用 new DatabaseHelper (this)。 Thats why databasehelper return null.这就是 databasehelper 返回 null 的原因。 You can try those line in onCreate method, databaseHelper= new DatabaseHelper(this);您可以在 onCreate 方法中尝试这些行,databaseHelper= new DatabaseHelper(this);

In following function at first your have to initialize database to get WritableDatabase in DatabaseHelper class.在下面的函数中,首先你必须初始化数据库以获得 DatabaseHelper 类中的 WritableDatabase。

public void displayUsers() {
databaseHelper = DatabaseHelper(MainActivity.this)
        Cursor cursor = databaseHelper.getAllUsers();
        if(cursor.getCount() == 0) {
            Toast.makeText(this, "none", Toast.LENGTH_SHORT).show();
        }
}

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

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