Android SQLite在170排后崩溃

Ale*_*rov 5 sqlite android

如何更改此逻辑以使用超过170行.

// Getting All test 
public List<Test> getAllTests(String str) {
    List<Test> testList = new ArrayList<Test>();
    // Select All Query
    String selectQuery = "SELECT  * FROM " + TABLE_TESTS;

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

   // looping through all rows and adding to list
    if (cursor.moveToFirst()) {
        do {
            //select rows by input string   
            if(cursor.getString(1).equals(str)){
                Test test = new Test();
                test.setId(Integer.parseInt(cursor.getString(0)));
                test.setTest(cursor.getString(1));
                test .setResult(Integer.parseInt(cursor.getString(2)));

                // Adding test to list
                testList.add(test);
            }
        } while (cursor.moveToNext());
    }
    //close database 
    db.close();

    //return list data     
    return testList;
}
Run Code Online (Sandbox Code Playgroud)

我想按输入字符串选择所有行.它的逻辑工作与150行完美配合,但160后工作缓慢,并在170行崩溃

Luc*_*fer 4

如何更改此逻辑以处理超过 170 行?

// Getting All test 
public List<Test> getAllTests(String str) {
    List<Test> testList = new ArrayList<Test>();
    // Select All Query

    //String selectQuery = "SELECT  * FROM " + TABLE_TESTS;
String selectQuery = "SELECT id,result FROM " + TABLE_TESTS + " where name ='" + str + "'";
    // Now you are saving memory of one column. 

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

   // looping through all rows and adding to list
    if (cursor.moveToFirst()) {
           Test test = new Test();
           // moved outside loop to prevent creating new object every time.
        do {
            //select rows by input string   
            //if(cursor.getString(1).equals(str)){
            // No need for if Codition any more
                test.setId(Integer.parseInt(cursor.getString(0)));
                //test.setTest(cursor.getString(1));
                test.setTest(str);
                test .setResult(Integer.parseInt(cursor.getString(2)));
                // Adding test to list
                testList.add(test);
            //}
        } while (cursor.moveToNext());
    }
    //close database 
    db.close();

    //return list data     
    return testList;
}
Run Code Online (Sandbox Code Playgroud)