如何从sqlite记录的每一列获取值?

时间:2014-11-17 19:35:33

标签: android sqlite

我的sql应该只返回一个包含三列的记录。 Funcioando是正确的,因为我正在调试代码以更好地理解我的问题。我需要获取每列的值以移动到ClienteVO类。但他带来了三列,但第二个选择在第二个时候会出现错误Can1t read row # 0, col # -1 from CursorWindow 我检查了调试并且列名正确并且记录返回。

SQLiteDatabase db = new DB(ctx).getReadableDatabase();

String sql = String.format("select limite,valor,nome from limite " +
            " INNER JOIN cliente ON cliente.id = limite.cliente_id " +
            "where cliente.id=1");

Cursor rs = db.rawQuery( sql, null);
ClienteVO vo = null;

if (rs != null){
    vo = new ClienteVO();
    rs.moveToFirst();

    vo.setLimite(rs.getFloat(rs.getColumnIndex("limite")));
    vo.setValor(rs.getFloat(rs.getColumnIndex("valor")));
    vo.setNome(rs.getString(rs.getColumnIndex("nome")));
}

然后阅读有关研究迭代列的信息。他经常穿过三根柱子。我想知道这是获取这些值的唯一方法,以及获得属性的最佳方法。

Cursor rs = db.rawQuery( sql, null);        
ClienteVO vo = null;

if (rs != null){
    vo = new ClienteVO();
    rs.moveToFirst();

    for (Integer i=0; i <= rs.getColumnNames().length; i++ ){
       //How can I get the values of clean way
    }
}

1 个答案:

答案 0 :(得分:0)

    Cursor rs = db.rawQuery( sql, null);

    ClienteVO vo = null;

    vo = new ClienteVO();
    if (rs.moveToFirst()) {
            vo.setLimite(rs.getFloat(0));
            vo.setValor(rs.getFloat(1));
            vo.setNome(rs.getString(2));
    }

你可以写这个。

   Cursor rs = db.rawQuery( sql, null);

上面你有sql变量。它包含什么?

好的,你应该使用下一个

if (rs.moveToFirst()) {//}

检查光标是否至少有一行。