我一直在看android开发者网站上的记事本教程,我被困在了两个方面--有人能帮忙吗?
首先,本教程创建一个包含3列的db : id、title和body。我想把身体改成十进制值。其次,我需要用十进制值对这一列进行总计。
那么,在我为body列设置EditText的地方,是否正确地将输入类型设置为"numberDecimal“?还有其他必要的改变吗?
然后如何将本列中的这些值合计起来,是否应该使用某种循环来遍历该列中的每条记录并将它们相加在一起?
例如:
int total = 0;
for(int i = 0; i < mydb.table.NumberOfRows; i++) {
total = total + mydb.table.body[i]
}*对不起,我甚至不知道是否存在计算行数的函数,也不知道如何访问表的某个特定部分(我对SQL很感兴趣,已经有一段时间没有java了)。
建议太好了!
发布于 2011-02-14 08:57:10
仅仅将EditText视图的输入模式更改为"numberDecimal“是不够的,但这是一个很好的开始,因此您可以肯定,您的用户不能输入任何非十进制字符。
要更改body列的数据类型,您必须修改用于创建表的create语句。将数据类型从文本更改为真品,以便body列可以存储浮点数。
此外,还必须修改insert语句,因为body列不再是文本列。因此,在将字符串传递给insert语句之前,必须将表示数值的EditText视图中的字符串转换为浮动。
总之,不需要一个循环,您可以使用sum()或共计()聚合函数(取决于您的需要)让db为您执行此操作。声明看起来会是这样的。
SELECT sum/total(body) FROM <table name>将<table name>替换为表的名称。
对不起,我甚至不知道是否存在计算行数的函数,也不知道如何访问表的某个特定部分(我对SQL很感兴趣,已经有一段时间没有java了)。
要循环数据库查询的结果,您不需要知道结果有多少行。作为查询的结果,您将得到一个游标对象,该对象引用查询返回的行。要遍历这些行,可以使用以下语句:
Cursor cursor = queryDB(.......)
while(cursor.moveToNext()){
<do something with the current result row>
}发布于 2011-02-14 02:08:45
事实上,您正在使用记事本示例作为您所做工作的基础,我正确地假设您使用的是ContentProvider吗?好的,您要做的是运行一个查询,检索数据库中的所有条目:
Cursor c = managedQuery(Notes.CONTENT_URI, new String[] { Notes.BODY }, null, null, null);然后,正如您所说的,在光标中循环:
if (c.moveToFirst()) {
long total = 0;
long body;
int bodyColumn = c.getColumnIndex(Notes.BODY);
do {
// Get the field values
body = c.getLong(bodyColumn);
phoneNumber = cur.getString(phoneColumn);
total += body;
} while (cur.moveToNext());这能回答你的问题吗?如果您需要指定的任何内容,请进行注释。
发布于 2011-02-14 03:45:45
我目前正在研究一个类似问题的答案。目前,我认为数据库的生命周期会导致循环计数方法变得非常烦人,所以如果我是您,我将设计数据库来为您保存计数,并保留总输入行。这只是一个建议,但我认为两个非常简单的一行方法比一个持续增长的递归/循环方法更容易。
https://stackoverflow.com/questions/4988201
复制相似问题