我试图计算报告,并将结果显示在texview“ edt1”中。但是没有显示。
有mydatabasehelper:
public void calculrapport(Argent a)
{
db = this.getWritableDatabase();
String query = "select sum(Entree) from Argent where date between \"datedebut\" and \"datefin\" ;";
Cursor cursor = db.rawQuery(query , null) ;
int count = cursor.getCount();
}
有我的课程Rapport.java:
public void onOKClick ( View v ) {
if (v.getId() == R.id.okrapport) {
EditText datedebut = (EditText) findViewById(R.id.datedebut);
EditText datefin = (EditText) findViewById(R.id.datefin);
String strdatedebut = datedebut.getText().toString();
String strdatefin = datefin.getText().toString();
Argent a = new Argent();
helper.calculrapport(a);
edt1.setText( );
}
}
谢谢。
答案 0 :(得分:0)
假设查询按预期方式工作(特别是考虑到所使用的变量具有适当的范围,这似乎不太可能尝试使用select sum(Entree) from Argent
来进行测试,而不会引起datedebut和datefin变量的复杂性可以解析,如果可以解析为可用值),则需要:-
提取适当的值,然后从方法中返回该值,然后使用返回的值在TextView中设置文本。
要返回值,该方法不应为空,而应具有适当的返回类型(本示例将使用字符串),
因此,请使用public void calculrapport(Argent a)
而不是public String calculrapport(Argent a)
(因此需要该方法来返回字符串)
要提取该值,需要将光标移动到相应的行(由于sum函数是一个聚合函数,并且只有一组,因此只能有一行)(聚合函数起作用在gropus上),即所有行)
这样的方法可能是:-
public String calculrapport(Argent a)
{
String rv = "0"; //<<<< used to return 0 if no rows are selected by the query
db = this.getWritableDatabase();
String query = "select sum(Entree) from Argent where date between \"datedebut\" and \"datefin\" ;";
Cursor cursor = db.rawQuery(query , null) ;
if (cursor.moveToFirst()) {
rv = cursor.getString(0); //<<<< get the value from the 1st (only) column
}
cursor.close(); //<<<< Cursors should always be closed when done with
return rv;
}
使用返回的值设置TextView而不是使用:-
helper.calculrapport(a);
edt1.setText( );
使用:-
edt1.setText(helper.calculrapport(a));
或者:-
String sum = helper.calculrapport(a);
edt1.setText(sum);
问题位于SQlite查询中(从以下位置选择sum(Entree) 介于\“ datedebut \”和\“ datefin \”;)之间的确切日期 当我们称该类中的“ datedebut”和“ datefin”为对象时 rapport.java
然后String query = "select sum(Entree) from Argent where date between \"datedebut\" and \"datefin\" ;";
解析为:-
select sum(Entree) from Argent where date between "datedebut" and "datefin" ;
我相信,假设datedebut和datefin是字符串变量,并且它们采用有效的SQLite日期格式,例如它们可能是2018年1月1日和2018年2月1日(并且date列中的值被格式化为有效的SQLite日期格式),而您应该使用:-
String query = "select sum(Entree) from Argent where date between '" + datedebut + "' and '" + datefin +"' ;";
然后将解析为:-
SELECT sum(entree) FROM argent WHERE date BETWEEN '2018-01-01' AND '2018-02-01';
对于有效的SQLite日期格式;请参阅Date And Time Functions