【问题标题】:Android database don't do anything if selected row doesn't exist如果所选行不存在,Android 数据库不执行任何操作
【发布时间】:2012-12-26 06:56:35
【问题描述】:


我做了一个查询,使用 ID 从数据库中请求一个随机行。但我有一个小问题。如果它存在或不存在,我希望它显示一条消息。例如我的数据库是这样的:

ID - ingilizce - turkce
1 - 你好 - 梅哈巴
4 - 嗨 - selam

如您所见,第二条和第三条记录不存在。我生成一个介于 1 和 4 之间的随机数,并得到属于 ID 的行。因此,当它生成一个像 2 或 3 这样的数字时,它会生成一个新的随机数。
我的代码在这里:

公共无效 kelimeUret() {

SQLiteDatabase db = kelimeler.getReadableDatabase();

rastgele = new Random();

Cursor kayit = db.rawQuery("SELECT count(*) FROM kelimeler", null);

kayit.moveToFirst();

int max = Integer.parseInt(kayit.getString(0));
int min = 1;

int rastgeleKayit = rastgele.nextInt(max - min + 1) + min;

Cursor kayit3 = db.rawQuery("SELECT * FROM kelimeler WHERE id=" + rastgeleKayit, null);
kayit3.moveToFirst();
int kayitSayisi = kayit3.getCount();

if (kayitSayisi<1) {

    //Toast.makeText(getApplicationContext(), "bu kayıt yok", Toast.LENGTH_SHORT).show();
    //kelimeUret();

    // I COULDN'T DO HERE !

} else {

    Cursor kayit2 = db.rawQuery("SELECT ingilizce FROM kelimeler WHERE id=" + rastgeleKayit, null);

    kayit2.moveToFirst();

    String sonuc = kayit2.getString(0);

    olusturulanKelime = sonuc;

    kelime = (TextView) findViewById(R.id.kelime);
    kelime.setText(sonuc);

}

感谢您的回复...

【问题讨论】:

  • 你必须测试 moveToFirst 的结果。 true 表示有一行,false 表示没有。
  • 但是,我建议使用select * from kelimeler order by random() limit 1

标签: android database select random


【解决方案1】:
Cursor kayit3 = db.rawQuery("SELECT * FROM kelimeler WHERE id=" + rastgeleKayit, null);
kayit3.moveToFirst();

kayit3.getCount();将返回查询返回的记录数。如果没有记录,则它不存在。如果返回多于 1 条记录,则该记录存在。

希望对你有帮助

【讨论】:

  • 这就是我要找的!谢谢。
  • 如果随机化不存在,我应该如何刷新它?我的新代码已被编辑。
  • 最好在你完成所有问题之前进行递归......这样每次都会迭代
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-26
  • 2020-07-30
相关资源
最近更新 更多