【问题标题】:Android SQLite select by non-primary key columnAndroid SQLite 按非主键列选择
【发布时间】:2014-11-05 14:14:26
【问题描述】:

我已经使用 SQLiteAssetHelper 创建了我的 sqlite 数据库,我可以很好地执行 CRUD 操作。但是,我无法让以下 Select 语句返回任何行:

String query = "Select * from Student where serial=?";

Cursor c = rawQuery(query, String[]{serial.trim()});

序列值最初为 null,并在应用程序中更新。我的更新查询在这里:

ContentValues cv = new ContentValues();
cv.put("serial", serial.trim());
cv.put("isactivated", 1);

//This returns "1" meaning 1 row was affected
mDb.update("Student", cv, "uid=?", new String[]{String.valueOf(student.getUid())});

我数据库中的序列字段不是主键。这就是它不起作用的原因吗?主键的选择语句工作正常:

String query = "Select * from Student where id=?";

Cursor c = rawQuery(query, String[]{String.valueOf(id)});

【问题讨论】:

  • 返回 0 行吗?你的 logcat 说什么?
  • 您也可以使用非主键从数据库中获取数据,更新后能否检查序列值?
  • 伙计,serial 列有实际值还是为空?更新真的有什么作用吗?选择查询看起来很好...确保serial 的值不是null 否则选择查询将不会返回任何内容
  • db.update() 返回受影响的行数。它正在返回一个。这意味着它工作正常?
  • 我从外部来源获得了连续剧。不,它不为空

标签: android mysql sqlite


【解决方案1】:

好吧,我想通了。希望这对某人有所帮助。我正在用

包装我的数据库事务
db.beginTransactionNonExclusive();

//Database operations

db.endTransaction();

我正在阅读 beginTransactionNonExclusive() 的文档,所做的所有更改都将在事务结束时回滚,除非您调用

db.setTransactionSuccessful()

打电话之前

db.endTransaction();

感谢大家的帮助。

【讨论】:

    【解决方案2】:

    尝试这样使用

    db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy)

    Cursor c = db.query("Student",null,"serial"+"=?",new String[]{serial.trim()},null, null, null);
    

    如果需要,请进行必要的更改,例如您的表名。

    【讨论】:

    • 感谢您的快速回复。我马上试试
    【解决方案3】:

    看起来像您在 TEXT 中的连续专栏。

    使用like子句代替=

    例子

    db.query("Student",null,"serial like '%?%' ",new String[]{serial.trim()},null, null, null);
    

    如果完美匹配则不需要%

    db.query("Student",null,"serial like '?' ",new String[]{serial.trim()},null, null, null);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-29
      • 1970-01-01
      • 2021-03-25
      • 1970-01-01
      • 2011-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多