Android 大于运算符(>;)未从数据库中提供正确的结果
我有一个名为“amountDesc”的文本类型列,其中包含一些值。我想得到所有大于100的值。我写了一个查询,但没有给出正确的结果 数据库,如下图所示。 我尝试过以下代码:Android 大于运算符(>;)未从数据库中提供正确的结果,android,sqlite,Android,Sqlite,我有一个名为“amountDesc”的文本类型列,其中包含一些值。我想得到所有大于100的值。我写了一个查询,但没有给出正确的结果 数据库,如下图所示。 我尝试过以下代码: String query = "SELECT amountDesc FROM increment WHERE amountDesc > 100"; Cursor rawQuery = getReadableDatabase().rawQuery(query, null); if (r
String query = "SELECT amountDesc FROM increment WHERE amountDesc > 100";
Cursor rawQuery = getReadableDatabase().rawQuery(query, null);
if (rawQuery.moveToFirst()) {
while (!rawQuery.isAfterLast()) {
String value = rawQuery.getString(rawQuery.getColumnIndex("amountDesc"));
rawQuery.moveToNext();
Log.d("tvlateamoutn1", value);
}
}
在Logcat上获取这些值:
500 50 200 50
正如您所看到的,它的值不正确,因为我需要>100个值。我知道这对大多数初学者来说是个问题,但我还是坚持了下来。请下定决心
我有一个名为“amountDesc”的文本类型列,其中包含一些值
那么在表定义中有amountDesc TEXT
或类似的内容
发件人:
具有文本相关性的列使用存储类NULL、TEXT或BLOB存储所有数据。如果数字数据插入到具有文本关联性的列中,则在存储之前会将其转换为文本形式
:
如果一个操作数具有文本关联,而另一个操作数没有关联,则文本关联将应用于另一个操作数
由于该列具有文本相关性,因此另一个操作数正在从整数100
转换为字符串'100'
。字符串'50'
大于字符串'100'
,因为'5'
大于'1'
。因此,您的查询返回的正是您要求它返回的内容。你只是在问一些与你想象中不同的问题
如果要将该列中的值视为整数并进行相应比较,请在创建表时使用INTEGER
notTEXT
。如果没有为列中存储的数据选择正确的关联性,一个糟糕的解决方法是在计算中使用值时将其强制转换为适当的类型CAST(amountDesc为整数)>100
或类似的内容
(阅读和理解有关数据类型和关联性的链接文档对于有效使用sqlite是必不可少的。)您能否检查模式中的amountDesc数据类型。若声明的数据类型为字符串,则无法与整数(100)进行比较。我们能否在字符串类型列上应用>运算符?