質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

3回答

15081閲覧

android でsqliteの更新ができず、no such clumnがでます

kuma39339

総合スコア7

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2016/09/09 03:29

###前提・実現したいこと
ここに質問したいことを詳細に書いてください
androidStudioで英単語アプリを作成しています。
sqlite更新の処理をいれたときにエラーメッセージがでてきました。

###発生している問題・エラーメッセージ

E/SQLiteLog: (1) no such column: answer E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.nkd.englishapp, PID: 6242 android.database.sqlite.SQLiteException: no such column: answer (code 1): , while compiling: UPDATE englishword SET answer=? WHERE id_ = ? at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889) at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500) at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58) at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31) at android.database.sqlite.SQLiteDatabase.updateWithOnConflict(SQLiteDatabase.java:1576) at android.database.sqlite.SQLiteDatabase.update(SQLiteDatabase.java:1524) at com.example.nkd.englishapp.DatabaseHelper.answerWord(DatabaseHelper.java:87) at com.example.nkd.englishapp.wordActivity.onClick(wordActivity.java:81) at android.view.View.performClick(View.java:4781) at android.view.View$PerformClick.run(View.java:19874) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5288) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

###該当のソースコード

public class DatabaseHelper extends SQLiteOpenHelper { private static final String DBNAME = "word.db"; private static final int DBVERSION = 1; public static final String TABLE_ENGLISHWORD = "englishword"; public static final String COLUMN_ID = "_id"; public static final String COLUMN_ENGLISHWORD = "englishword"; public static final String COLUMN_WORD = "word"; public static final String COLUMN_ANSWER = "answer"; private static final String CREATE_TABLE_SQL = "create table " + TABLE_ENGLISHWORD + "" + "(" + COLUMN_ID + " integer primary key autoincrement," + COLUMN_ENGLISHWORD + " text not null," + COLUMN_WORD + "text not null," + COLUMN_ANSWER + "integer not null)"; public DatabaseHelper(Context context) { super(context, DBNAME, null, DBVERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_TABLE_SQL); db.execSQL("INSERT INTO " + TABLE_ENGLISHWORD + " VALUES(0,'apple','りんご',0);"); db.execSQL("INSERT INTO " + TABLE_ENGLISHWORD + " VALUES(1,'test','テスト',0);"); db.execSQL("INSERT INTO " + TABLE_ENGLISHWORD + " VALUES(2,'table','机',0);"); db.execSQL("INSERT INTO " + TABLE_ENGLISHWORD + " VALUES(3,'giutar','ギター',0);"); db.execSQL("INSERT INTO " + TABLE_ENGLISHWORD + " VALUES(4,'product','製品',0);"); db.execSQL("INSERT INTO " + TABLE_ENGLISHWORD + " VALUES(5,'ddemand','需要、供給',0);"); db.execSQL("INSERT INTO " + TABLE_ENGLISHWORD + " VALUES(6,'especially','特に',0);"); db.execSQL("INSERT INTO " + TABLE_ENGLISHWORD + " VALUES(7,'increase','増える、増やす',0);"); db.execSQL("INSERT INTO " + TABLE_ENGLISHWORD + " VALUES(8,'release','公表する、発売する',0);"); db.execSQL("INSERT INTO " + TABLE_ENGLISHWORD + " VALUES(9,'work overtime','時間外労働をする、残業する',0);"); } /*public void answerWord(SQLiteDatabase db, int id) { String updateSql = "UPDATE englishword SET answer = 1 WHERE _id = ?"; db.execSQL(updateSql, new String[]{String.valueOf(id)}); }*/ public void answerWord(SQLiteDatabase db, int id) { ContentValues values = new ContentValues(); values.put(COLUMN_ANSWER, 1); db.update("englishword", values, "id_ = ?", new String[]{String.valueOf(id)}); } }

###試したこと
なんで、no such culumnになるのかわけがわからないです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

エラーの内容は「answerというカラムはない」というものです。
原因は他の方も回答されているとおり、スペースがないことによりカラム名が意図したものと異なっているためと思われます。
「CREATE_TABLE_SQL」をコンソールやアプリの画面に出力して、実際にどういうSQLが実行されているかをご確認ください。

なお、SQLiteOpenHelperのonCreateはデータベースファイルが存在しない場合に実行されます。
SQLを修正後(問題がない場合)は、一度アプリをアンインストールして内部データを削除してください

投稿2016/09/09 04:19

KaedeKazane

総合スコア408

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kuma39339

2016/09/09 04:51

回答ありがとうございます。 そのとおりでした
guest

0

ベストアンサー

  • COLUMN_ANSWER + "integer not null)";

この結果は「answerinteger not null)」という風に文字列がくっついちゃうと思います。
COLUMN_WORDのあたりの文も同様ですね。他と同じように先頭にスペースを入れれば解決するはずです。

投稿2016/09/09 03:41

ishi9

総合スコア1294

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kuma39339

2016/09/09 03:51

create文はうまくいってると思います。update文のほかにselect文を実行しましたが、そちらはうまくいって表示されます。コメントありがとうございます。
ishi9

2016/09/09 04:03 編集

answerintegerというカラムができるだけで、Create自体はできてしまうでしょう。 試したselect文の方は中身がわからないのでなんとも言えません。 スペース入れるだけですので、ひとまず騙されたと思ってお試しください。
kuma39339

2016/09/09 04:00

スペースはすでに入ってました。
ishi9

2016/09/09 04:11

それは失礼しました。何らかの理由で古いsqliteファイルが残ってしまっているのかもしれませんが、こちらからではそれはわかりませんね。 となるとsqliteファイルの中身を見てみるしかなさそうですね。 windowsの方に引っ張ってこれるなら ・pupsqlite https://www.eonet.ne.jp/~pup/software.html といったビューワを使うことでDBの詳細を調べる事ができます。 (macの場合は恐らく類似のソフトがあるとは思いますが詳細はわかりません)
kuma39339

2016/09/09 04:39

申し訳ございません。スペースをいれる場所を間違えていました。ishi9様の言うとうり、 スペースをいれると治りました。ありがとうございました
guest

0

Create文が怪しいです。
カラム名と型の間にスペースが無いように見えます。

投稿2016/09/09 03:41

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kuma39339

2016/09/09 03:51

create文はうまくいってると思います。update文のほかにselect文を実行しましたが、そちらはうまくいって表示されます。コメントありがとうございます。
kuma39339

2016/09/09 04:40

スペースをいれるところを間違えてました。yuna様の言うとうり、スペースをいれるとうまくいきました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問