我正在编写一个应用程序来跟踪用户在给定日期输入的两个数字。这个项目对我来说是一种学习练习,也是我在工作中可以用到的东西。使用android中的数据库检查器,我可以看到数据库具有以下值:
| 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();
}我在应用程序中放置了调试语句和弹出窗口,显示用于选择args的日期,它与数据库条目直观地匹配。因此,我删除了我的选择标准,并将返回的游标中的日期与formattedDate字符串进行了比较,结果表明它们是相等的。我有点困惑于我做错了什么。
发布于 2021-01-01 23:24:57
不能将?占位符用于列的名称,而只能用于参数值。
改为:
String selection = DatabaseHelper.DATE + "=?";
String[] selectionArgs = {formattedDate};https://stackoverflow.com/questions/65534588
复制相似问题