将值插入同一行但不同的列

Insert value into same row but different column

大家好。我是 android 的新手,现在使用 cursor 检查特定列是否为空。如果为空,则该值将被插入到选定的列中。该代码实际上工作正常,但它们被插入到两个不同的行中。我怎样才能解决这个问题,以便值 cd 将插入同一行但不同的列?

 public void checkRow1(String a, String b, String c, String d)
    {
        WD.insertWorkDetails(a1, a, b, c, d);
        Cursor mCursor = database.rawQuery("SELECT TimeOut_Info FROM " + MyDatabaseHelper.TABLE_INFO + " WHERE " +
                MyDatabaseHelper.TimeOut_Info + "= '" + d + "'", null);
        if (mCursor == null) {
            database=dbHelper.getWritableDatabase();
            ContentValues values = new ContentValues();
            values.put(MyDatabaseHelper.TimeOut_Info, d);
            database.insert(MyDatabaseHelper.TABLE_INFO, null, values);
            return ;

        }
             database=dbHelper.getWritableDatabase();
            ContentValues values = new ContentValues();
            values.put(MyDatabaseHelper.TimeIn_Info, c);
            database.insert(MyDatabaseHelper.TABLE_INFO, null, values);
        Toast.makeText(getApplicationContext(), "Data Saved", Toast.LENGTH_LONG).show();

        return;
    }

已编辑

为了检查特定行的特定列中是否已经有值,我使用 **COUNT**

  public void checkRow3(String a, String b, String c, String d) {
        if ((TextUtils.isEmpty(a)) && (TextUtils.isEmpty(b)) && (TextUtils.isEmpty(c)) && (TextUtils.isEmpty(d))) {
           // Toast.makeText(getApplicationContext(), "Do", Toast.LENGTH_LONG).show();
            Toast.makeText(getApplicationContext(), "Row 3 is empty", Toast.LENGTH_LONG).show();
            return;
        } else if ((a != null && a.trim().length() > 0) && ((TextUtils.isEmpty(b)) && (c != null && c.trim().length() > 0) && (d != null && d.trim().length() > 0))) {
           // Toast.makeText(getApplicationContext(), "Done1", Toast.LENGTH_LONG).show();
            WD.insertWorkDetails(a3, a, b, c, d);
            Cursor mCursor = database.rawQuery("SELECT COUNT(TimeOut_Info) FROM " + MyDatabaseHelper.TABLE_INFO ,null);
            if (mCursor.getCount()>0) {
                Toast.makeText(getApplicationContext(), "Already has value", Toast.LENGTH_LONG).show();
                return;
            }
            else
            {
                database = dbHelper.getWritableDatabase();
                ContentValues values = new ContentValues();
                values.put(MyDatabaseHelper.TimeOut_Info, d);
                database.insert(MyDatabaseHelper.TABLE_INFO, null, values);
                Toast.makeText(getApplicationContext(), "Inserted Time Out", Toast.LENGTH_LONG).show();

            }

        } else if ((a != null && a.trim().length() > 0) && (TextUtils.isEmpty(b)) && (TextUtils.isEmpty(c)) && (TextUtils.isEmpty(d))) {

            WD.insertWorkDetails(a3, a, b, c, d);
            // Toast.makeText(getApplicationContext(), "Row 3 is empty", Toast.LENGTH_LONG).show();
        } 

但我得到 "Already has a value" 即使特定列是 null。为什么会发生这种情况?

检查列是否有空值使用方法isNull

rawQuery() 始终是 return 游标。如果未找到数据,则此游标将为空,即 moveToFirst() 将 return false.

带有 SELECT COUNT(...) FROM ... 的简单查询将始终 return 包含单个值的单行,因此游标 getCount() 的 return 值将始终是 1.

请注意 COUNT() 计数 ;要检查列是否为 NULL,您必须使用 WHERE 子句。

要获取计数值,您必须实际从游标读取它(使用 moveToFirst()getInt(0)),或使用 帮助函数 为您做这件事:

long timeInfos = DatabaseUtils.longForQuery(database,
         "SELECT COUNT(*) FROM " + MyDatabaseHelper.TABLE_INFO +
         " WHERE TimeOut_Info IS NOT NULL", null);
if (timeInfos > 0) {
    ...