我对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
};
答案 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;
}