Sqlite 结果 return 错误的列值与数据库不同

Sqlite result return wrong column values different from database

我正在尝试在我的 android 应用程序中对我的本地 sqlite 数据库进行 select 查询,在我的数据库中我得到以下结果,如

Id  IdVisitaParque Parque TipoParque TipoEstabulacao Animais Amostra Bebedouros CriadoPor CriadoA
1   422326          1       1            2             53      29        3      1
2   422327          2       2            1              2       2        3      1
3   443935          3       1            1             14       8        4      3

但是用下面的代码,

SQLiteDatabase db = dbh.getWritableDatabase();
ArrayList<Parques> parques = new ArrayList<Parques>();
    
String query = "SELECT * FROM parques";
Cursor cursor = null;
try{
    cursor = db.rawQuery(query, null);
    if(cursor.moveToFirst()){
       while(!cursor.isAfterLast()){
            Parques p = new Parques();
            p.setIdVisitaParque(cursor.getColumnIndex(columnIdVisitaParque));
            p.setNumParque(cursor.getColumnIndex(columnNumParque));
            p.setTipoParque(cursor.getColumnIndex(columnTipoParque));
            p.setTipoEstabulacao(cursor.getColumnIndex(columnTipoEstabulacao));
            p.setNumAnimais(cursor.getColumnIndex(columnNumAnimais));
            p.setAmostra(cursor.getColumnIndex(columnAmostra));
            p.setNumBebedouros(cursor.getColumnIndex(columnNumbebedouros));
            p.setCriadoPor(cursor.getColumnIndex(columnCriadoPor));
            parques.add(p);
            cursor.moveToNext();
        };
    }
}catch (SQLException e){
    e.printStackTrace();
}
finally {
    cursor.close();
    db.close();
}

我收到 3 行结果相同,

amostra = 6
arLivreDiasAno = 0
arLivreHorasDia = 0
criadoPor = 9
descricaoParque = 0
idVisitaParque = 1
numAnimais = 5
numBebedouros = 7
numParque = 2
pastoreioDiasAno = 0
pastoreioHorasDia = 0
tipoEstabulacao = 4
tipoParque = 3

我看不懂。

sqlite中的创建table,

public static final String tableName = "parques";
    public static final String columnId = "Id";
    public static final String columnIdVisitaParque = "IdVisitaParque";
    public static final String columnNumParque = "Parque";
    public static final String columnTipoParque = "TipoParque";
    public static final String columnTipoEstabulacao = "TipoEstabulacao";
    public static final String columnNumAnimais = "Animais";
    public static final String columnAmostra = "Amostra";
    public static final String columnNumbebedouros = "Bebedouros";
    public static final String columnCriadoA = "CriadoA";
    public static final String columnCriadoPor = "CriadoPor";

    final DatabaseHelper dbh;

    public static final String createTable = "CREATE TABLE " + tableName + "("
            + columnId + " INTEGER PRIMARY KEY AUTOINCREMENT,"
            + columnIdVisitaParque + " INTEGER,"
            + columnNumParque + " INTEGER, "
            + columnTipoParque + " INTEGER, "
            + columnTipoEstabulacao + " INTEGER, "
            + columnNumAnimais + " INTEGER, "
            + columnAmostra + " INTEGER, "
            + columnNumbebedouros + " INTEGER, "
            + columnCriadoA + " DATETIME,"
            + columnCriadoPor + " INTEGER"
            + ")";

您正在使用列 indexes 更新创建的 p 对象,而不是它们的值。而不是使用 getColumnIndex 的值,您应该使用它来获取实际值,例如 getInt:

while(!cursor.isAfterLast()){
    Parques p = new Parques();
    p.setIdVisitaParque(cursor.getInt(cursor.getColumnIndex(columnIdVisitaParque)));
    p.setNumParque(cursor.getInt(cursor.getColumnIndex(columnNumParque)));
    p.setTipoParque(cursor.getInt(cursor.getColumnIndex(columnTipoParque)));
    p.setTipoEstabulacao(cursor.getInt(cursor.getColumnIndex(columnTipoEstabulacao)));
    p.setNumAnimais(cursor.getInt(cursor.getColumnIndex(columnNumAnimais)));
    p.setAmostra(cursor.getInt(cursor.getColumnIndex(columnAmostra)));
    p.setNumBebedouros(cursor.getInt(cursor.getColumnIndex(columnNumbebedouros)));
    p.setCriadoPor(cursor.getInt(cursor.getColumnIndex(columnCriadoPor)));
    parques.add(p);
    cursor.moveToNext();
};