使用 SQLite 进行简单的数学计算 - Android
我对 SQL 相当陌生,我正在尝试在 Android 应用程序中使用简单的数学进行查询。 这就是我想要做的 -
我有一个名为 allfoods 的表,其中的列名为“卡路里”和“大小”。这是查询——
int tempCalories = 100;
int maxCalories = 300;
Cursor dataFoods = myDataBase.rawQuery("SELECT id FROM allfoods WHERE size <> 0 AND (" + tempCalories + " + (calories * (size / 100)) < " + maxCalories +")" , null);
这有效吗? 我自己测试它时遇到一些麻烦,因为返回的值变化太大。
谢谢!
I'm fairly new to SQL, and i'm trying to make a query with simple math in the Android app.
Here's what i'm trying to do -
I have a table named allfoods, with columns named 'calories' and 'size'. Here's the query-
int tempCalories = 100;
int maxCalories = 300;
Cursor dataFoods = myDataBase.rawQuery("SELECT id FROM allfoods WHERE size <> 0 AND (" + tempCalories + " + (calories * (size / 100)) < " + maxCalories +")" , null);
Will that work?
I have some trouble testing it myself, since the returned values are too varied.
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
Hello tofira,
是的,如果您将
(size / 100.0)
100.0,您的查询将有效>。但是,您的查询可能会返回 0,因为您的方程式:
100 + (卡路里 * (大小 / 100.0))
100 + (卡路里 * (大小 / 100.0))
300
当尺寸和/或卡路里值超出范围时,
将返回 false。证明
为了测试您的查询,我创建了一个包含数据的表和一个测试视图。
数据
为了进行测试,我创建了一个表,其中尺寸值的范围为 1,从 1 到 1000,卡路里的范围为 5,从 5 到 5000,如下所示:
测试
为了测试您的方程,我创建了一个查看以验证方程的每一步。
SQL
结果
结论
针对我的测试数据运行查询将返回第 1 行到第 63 行。
Hello tofira,
Yes, your query will work, if you change the denominator to 100.0 in
(size / 100.0)
.However, your query might return 0, as your equation:
100 + (calories * (size / 100.0)) < 300
will return false when the values for size and/or calories are out of range.
Proof
To test your query I created a table with data, and a tests view.
Data
To have something to test against, I created a table where the values for size ranged in steps of 1 from 1 to 1000 and calories ranged in steps of 5 from 5 to 5000, like this:
Test
To test your equation, I created a view to verify each step of your equation.
SQL
Result
Conclusion
Running your query against my test data would return row 1 to 63.