在textview中显示结果sqlite查询

时间:2018-07-01 18:18:35

标签: android database sqlite android-sqlite

我试图计算报告,并将结果显示在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( );

    }

}

谢谢。

1 个答案:

答案 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

  • 请注意,上面的代码是内部代码,未经测试,因此可能包含一些简单的键入错误。