前提・実現したいこと
kotlinでSQLiteを使用したアプリケーションを作ろうとしています。
ID,テキスト,日付のカラムを備えた簡単なアプリです。
日付で降順に並べ替える関数で、日付であるcreated_atというカラムが読み込まれていないようです。誤字や余分な空白など探したのですが自分だと見つけられませんでした
発生している問題・エラーメッセージ
E/SQLiteLog: (1) no such column: created_at android.database.sqlite.SQLiteException: no such column: created_at (code 1): , while compiling: SELECT * FROM texts ORDER BY created_at DESC
該当のソースコード
kotlin
1//データベース名とバージョン定数を宣言 2private const val DB_NAME="SampleDatabase" 3private const val DB_VERSION=1 4 5//SQLiteOpenHelperクラスを継承したクラスを作成 6class SampleDBOpenHelper(context: Context): SQLiteOpenHelper(context, 7 DB_NAME,null, 8 DB_VERSION 9){ 10 override fun onCreate(db: SQLiteDatabase?) { 11 //テーブルの作成 12 //カラムの内容を示す 13 //[ID(主キー)][テキスト][作成日時] 14 db?.execSQL("CREATE TABLE 'texts' ( " + 15 " _id INTEGER PRIMARY KEY AUTOINCREMENT, "+ 16 " text TEXT NOT NULL, "+ 17 " created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP)") 18 } 19 20 override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) { 21 //通常であればバージョンを更新する際のSQLを発行するが、今回はこれを実装しない。 22 } 23} 24 25//TEXTカラムを[作成日時]順に並べ替える関数 26//引数:context(アプリの状態(入力、起動などが入るが今回は入力)) 27//戻り値:日付順に並べ替えたテキストのテーブル 28fun queryTexts(context: Context):List<String>{ 29 //読み込み用のデータベースを開く 30 //先ほど作成したSWLiteDBOpenHelperを使う。継承元の関数を用いる。 31 val database = SampleDBOpenHelper(context).readableDatabase 32 //データベースから全件検索する 33 //query([table],[columns],[selection],[selectionArgs],[groupBy],[having],[orderBy]) 34 //[table]を指定して、[orderBy]で日付順に並べる 35 val cursor = database.query("texts",null,null,null,null,null,"created_at DESC") 36 //[テキスト]を入れるための可変な空の文字列リストを作る。 37 val texts = mutableListOf<String>() 38 //並べ替えたデータベースを使う 39 cursor.use{ 40 //カーソルで順次処理していく 41 while(cursor.moveToNext()){ 42 //保存されているテキストを得る 43 val text = cursor.getString(cursor.getColumnIndex("text")) 44 texts.add(text) 45 } 46 } 47 database.close() 48 return texts 49} 50
試したこと
誤字チェック…以外の方法が思いつきませんでした…
補足情報(FW/ツールのバージョンなど)
開発環境:AndroidStudio3.6.3
あなたの回答
tips
プレビュー