【发布时间】:2021-04-08 14:06:47
【问题描述】:
我正在编写一个应用程序来跟踪用户在给定日期输入的两个数字。该项目对我来说是一种学习练习,也是我的 SO 用于他的工作的东西。使用 android studio 中的数据库检查器,我可以看到数据库具有值:
| Date (String) | morningodometer (REAL)| eveningodometer (REAL) |
| ------------- | --------------------- | ---------------------- |
| 2021-01-01 | 42.0 | 56.9 |
我有一个查询,然后从表中获取数据,其中date = 2021-01-01,但我的查询返回 0 个条目。我的数据库定义/助手在这里:
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String TABLE_NAME = "BEEPBEEP";
public static final String _ID = "_id";
public static final String DATE = "date";
public static final String MORNING_ODOMETER = "morningodometer";
public static final String EVENING_ODOMETER = "eveningodometer";
static final String DB_NAME = "BEEPBEEP.DB";
static final int DB_VERSION = 1;
private static final String CREATE_TABLE = "create table " + TABLE_NAME + " (" + DATE +
" TEXT PRIMARY KEY, " + MORNING_ODOMETER + " REAL NOT NULL, " + EVENING_ODOMETER +
" REAL NOT NULL);";
public DatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
}
我根据日期获取数字的代码在这里:
public Optional<DayOdometer> getOdometerForDate(Date date) {
String[] columns = new String[] {DatabaseHelper.MORNING_ODOMETER, DatabaseHelper.EVENING_ODOMETER};
String formattedDate = dateFormatter.format(date);
String selection = "?=?";
String[] selectionArgs = {DatabaseHelper.DATE, formattedDate};
Cursor cursor = dbHelper.getReadableDatabase().query(DatabaseHelper.TABLE_NAME,
columns,
selection,
selectionArgs,
null,
null,
null,
null);
if (cursor.getCount() > 0) {
cursor.moveToFirst();
float eveningKms = cursor.getFloat(cursor.getColumnIndex(DatabaseHelper.EVENING_ODOMETER));
float morningKms = cursor.getFloat(cursor.getColumnIndex(DatabaseHelper.MORNING_ODOMETER));
cursor.close();
return Optional.of(new DayOdometer(morningKms, eveningKms));
}
return Optional.empty();
}
我已将调试语句放入应用程序中,并在弹出窗口中显示用于选择参数的日期,并且它在视觉上与数据库条目匹配。然后我删除了我的选择标准,并将返回的光标中的日期与 formattedDate 字符串进行比较,它说它们是相等的。 我对自己做错了什么感到困惑。
【问题讨论】:
标签: java android database sqlite android-sqlite