[英]SQLite Statement in Android Studio 3.5.3
我是 Android Studio 的新手,所以請耐心等待……這個論壇經常給我提供建議和示例(作為讀者),但今天我決定尋求幫助:
從幾小時開始,我嘗試在 Android Studio 中構建 SQLite 語句:有一列COLUMN_LAST_ATTEMPT
將日期和時間作為字符串,例如2020-01-09 17:23
,請參閱屏幕截圖,我想獲取最新日期(沒有時間) 來自表,例如2020-09-01
。 我嘗試了各種選項,但無法運行。
我需要的是一個 Android SQLite 語句
SELECT MAX(SUBSTR(last_attempt,11,20)) FROM quiz_questions
(在 DBBrowser 上運行),其中“最后一次嘗試”是“quiz_questions”表中的一列,“quiz_questions”表中該列的屏幕截圖
我嘗試了以下 rawQueries,它們都不起作用:
在 QuizDBHelper 類中
//...
final QuizDbHelper dbHelper = QuizDbHelper.getInstance(this);
//...
public String newestQuiz(){
db = getReadableDatabase();
String result = null;
Cursor cursor = db.rawQuery("SELECT MAX(" + QuizContract.QuestionsTable.COLUMN_LAST_ATTEMPT + ") FROM "
+ QuizContract.QuestionsTable.TABLE_NAME, null);
//Cursor cursor = db.rawQuery("SELECT MAX(SUBSTR(" + QuizContract.QuestionsTable.COLUMN_LAST_ATTEMPT +
// ",11,20)) FROM " + QuizContract.QuestionsTable.TABLE_NAME, null);
//Cursor cursor = db.rawQuery("SELECT " + QuizContract.QuestionsTable.COLUMN_LAST_ATTEMPT + " FROM " +
// QuizContract.QuestionsTable.TABLE_NAME, null);
if(cursor.moveToFirst()){
do {
result = cursor.getString(c.getColumnIndex(QuizContract.QuestionsTable.COLUMN_LAST_ATTEMPT));
} while (cursor.moveToNext());
}
cursor.close();
return result;
}
在統計課
String LastUse = dbHelper.newestQuiz();
LastUsage.setText("Letzte Challenge: " + LastUse);
//LastUsage is a TextView in activity_Statistics.xml
//attached with LastUsage = findViewById(R.id.text_lastUsage);
SQLite 語句要么完全錯誤,要么我在統計課上犯了(基本的?)錯誤。 我需要...新手幫助!
我需要類似Select column from table where substring of date-Entry == newest
您的問題似乎是列名。 那是一個 Cursor 只包含提取的列,而不是表中的所有列。 盡管您根據QuizContract.QuestionsTable.COLUMN_LAST_ATTEMPT
將查詢基於列, QuizContract.QuestionsTable.COLUMN_LAST_ATTEMPT
不會是游標中的列名。
相反,它將MAX(SUBSTR(" + QuizContract.QuestionsTable.COLUMN_LAST_ATTEMPT + // ",11,20))
最簡單的管理方法是使用AS為 Cursor 中的列指定一個特定名稱。 因此,也許使用:-
Cursor cursor = db.rawQuery("SELECT MAX(" + QuizContract.QuestionsTable.COLUMN_LAST_ATTEMPT + ") AS " + QuizContract.QuestionsTable.COLUMN_LAST_ATTEMPT + " FROM "
+ QuizContract.QuestionsTable.TABLE_NAME, null);
但是,您可能更喜歡使用特定於情況的列名(AS ????),例如
........ AS max_" + QuizContract.QuestionsTable.COLUMN_LAST_ATTEMPT + ........
然后你將不得不使用:-
result = cursor.getString(c.getColumnIndex("max_" + QuizContract.QuestionsTable.COLUMN_LAST_ATTEMPT));
或者,由於它只是在游標中返回的單個值/列,因此您可以使用列偏移量 0,在這種情況下,只要有效,列名就無關緊要。 但是,由於缺乏對正在訪問的列的驗證,通常不建議使用偏移量。
重新評論:-
我只需要日期部分
由於日期是公認的日期時間格式(並且此類格式可直接排序/排序),因此請使用 max(date(column_name)) 甚至 max(column_name)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.