无法使用strftime()获取SQLite rawquery以在Android App

时间:2018-02-01 19:57:19

标签: android sqlite android-sqlite

我对Android / SQLite编程非常陌生,现在尝试了几个小时,但我无法让它工作。

我在SQLite中有一个表格,日期格式为YYYY-MM-DD。

现在我想创建一个查询,其中我得到一个月的所有元素的光标,我无法让它工作。日期存储在TABLE_BIER的“KEY_DATUM”列中。

提前感谢您提供有关如何设置此类查询的任何提示。

我的查询方法:

public Cursor getCursorFuerMonat(int monat){
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor= db.rawQuery("SELECT "+columns+"FROM "+TABLE_BIER+" WHERE strftime('%m',"+KEY_DATUM+") = ?",new String[]{""+monat});
    cursor.moveToFirst();
    return cursor;
}

变量声明:

public class DatabaseHandler extends SQLiteOpenHelper {
//Version der Datenbank
private static final int DATABASE_VERSION = 1;
// Name der Datenbank
private static final String DATABASE_NAME = "bierZaehlDB";

// Name der Tabelle
private static final String TABLE_BIER = "bierTabelle";

// Namen der Spalten
private static final String KEY_ID = "_id";
private static final String KEY_DATUM = "SpalteDatum";
private static final String KEY_ANZAHL = "SpalteAnzahl";
private String[] columns = {
        KEY_ID, KEY_ANZAHL, KEY_DATUM
};

1 个答案:

答案 0 :(得分:1)

首先,在字符串中添加一个数组(如columns),使用隐式数组进行sting转换,即包含方括号的字符串[_id,SpalteDatum,SpalteAnzahl]

然后,strftime('%m', ...)从日期字段中提取两位数的月份,因此e。 G。二月你会得到字符串" 02",而不是" 2"。您可以使用String.format()格式化这样的数字。

最后,您在FROM之前缺少一个空格。

我不确定为什么你需要将表/列名放在变量中。您是否假设将来会为其他表/列执行相同的代码?我会把它们硬编码到字符串中:

public Cursor getCursorFuerMonat(int monat){
    SQLiteDatabase db = this.getReadableDatabase();
    String select = "SELECT _id, SpalteDatum, SpalteAnzahl " + 
                    "  FROM bierTabelle " + 
                    " WHERE strftime('%m', SpalteDatum) = ?";
    Cursor cursor= db.rawQuery(select, new String[]{String.format("%02d", monat)});
    cursor.moveToFirst();
    return cursor;
}