将值插入同一行但不同的列
Insert value into same row but different column
大家好。我是 android 的新手,现在使用 cursor
检查特定列是否为空。如果为空,则该值将被插入到选定的列中。该代码实际上工作正常,但它们被插入到两个不同的行中。我怎样才能解决这个问题,以便值 c
和 d
将插入同一行但不同的列?
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) {
...
大家好。我是 android 的新手,现在使用 cursor
检查特定列是否为空。如果为空,则该值将被插入到选定的列中。该代码实际上工作正常,但它们被插入到两个不同的行中。我怎样才能解决这个问题,以便值 c
和 d
将插入同一行但不同的列?
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) {
...