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();
};
我正在尝试在我的 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();
};