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

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

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

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

448閲覧

JavaでのSQLiteのデータの更新

退会済みユーザー

退会済みユーザー

総合スコア0

SQLite

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2017/08/30 12:26

JavaでSQLiteのデータの更新を行いたいのですがなかなかうまくいかず、現在下記のようなコードを書いてみたのですが、
Caused by: android.database.sqlite.SQLiteException: no such column:
とのエラーが発生してしまいます。

そこでいろいろ検索してみるとデータの更新に、db.execSQL()は使わずにupdate()のほうが良いといった情報を目にしました。

カラムが存在しないといったエラーのようなのですが、このエラーがなぜ発生してしまっているのか、どちらのメソッドが良いのか合わせて教えていただけるとありがたいです。

db.execSQL("update " + SQLDataContract.Data.TABLE_NAME + " set " + s1 + " = ?, " + s2 + " = ?, " + s3 + " = ?, " + s4 + " = ?, " + s5 + " = ? " + " where " + SQLDataContract.Data.COL_YEAR + " = ? and " + SQLDataContract.Data.COL_MONTH + " = ? and " + SQLDataContract.Data.COL_DATE + " = ? and " + SQLDataContract.Data.COL_PLACE + " = ?", new Object[]{n1, n2, n3, n4, n5, year, month, date, place}); コード

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

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

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

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

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

num79kill

2017/08/30 23:32

とりあえずDBをマイグレーションしよう(バージョン定数を加算と必要クエリ)
退会済みユーザー

退会済みユーザー

2017/08/31 04:17

バージョン加算しました
guest

回答1

0

ベストアンサー

execSQLに渡しているSQL文をログ出力してください。
エラーメッセージの通りテーブルに存在しないカラム名が含まれているはずです。

投稿2017/08/30 13:16

yona

総合スコア18155

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

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

退会済みユーザー

退会済みユーザー

2017/08/30 13:22

SQL文をログ出力するとはどういうことですか? 初歩的なことかと思いますがすみません
退会済みユーザー

退会済みユーザー

2017/08/30 13:31

Caused by: android.database.sqlite.SQLiteException: no such column: rank1 (code 1): , while compiling: update data set s1= ?, s2= ?, s3= ?, s4= ?, s5= ? where year = ? and month = ? and date = ? and place = ? これでしょうか? 全部が?になってしまっているのがいけないということですか?
yona

2017/08/30 13:46 編集

一度、execSQLに渡している値をString型の変数に格納し、Log.dでログキャットに出力してください。詳しくはあなたが調べてください。 また、エラーメッセージには「rank1なんてカラムは存在しない」と書かれています、これを読んで何か考えましたか? あと、エラーメッセージは省略せずに全文を記載してください。
退会済みユーザー

退会済みユーザー

2017/08/30 14:11

また、エラーメッセージには「rank1なんてカラムは存在しない」と書かれています、これを読んで何か考えましたか? これについては理解はしています。わかりやすいようにと書き換えていたのですがrank1のところだけ変え忘れてしまいました。 Process: package, PID: 22853 java.lang.IllegalStateException: Could not execute method for android:onClick at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293) at android.view.View.performClick(View.java:4569) at android.view.View$PerformClick.run(View.java:18553) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:212) at android.app.ActivityThread.main(ActivityThread.java:5151) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) at android.view.View.performClick(View.java:4569)  at android.view.View$PerformClick.run(View.java:18553)  at android.os.Handler.handleCallback(Handler.java:733)  at android.os.Handler.dispatchMessage(Handler.java:95)  at android.os.Looper.loop(Looper.java:212)  at android.app.ActivityThread.main(ActivityThread.java:5151)  at java.lang.reflect.Method.invokeNative(Native Method)  at java.lang.reflect.Method.invoke(Method.java:515)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)  at dalvik.system.NativeStart.main(Native Method)  Caused by: android.database.sqlite.SQLiteException: no such column: s1(code 1): , while compiling: update data set s1= ?, s2= ?, s3= ?, s4= ?, s5= ? where year = ? and month = ? and date = ? and place = ? 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.executeSql(SQLiteDatabase.java:1672) at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1653) at package.SQLDateWritable.setRaceInfo(SQLDateWritable.java:125) at package.MainAlterRace.save(MainAlterRace.java:53) at java.lang.reflect.Method.invokeNative(Native Method)  at java.lang.reflect.Method.invoke(Method.java:515)  at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)  at android.view.View.performClick(View.java:4569)  at android.view.View$PerformClick.run(View.java:18553)  at android.os.Handler.handleCallback(Handler.java:733)  at android.os.Handler.dispatchMessage(Handler.java:95)  at android.os.Looper.loop(Looper.java:212)  at android.app.ActivityThread.main(ActivityThread.java:5151)  at java.lang.reflect.Method.invokeNative(Native Method)  at java.lang.reflect.Method.invoke(Method.java:515)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)  at dalvik.system.NativeStart.main(Native Method) 
退会済みユーザー

退会済みユーザー

2017/08/30 14:12

Logについては勉強不足でお返事遅くなってしまいそうです。
退会済みユーザー

退会済みユーザー

2017/08/30 14:18

execSQLに渡している値とはupdate data set s1= ?, s2= ?, s3= ?, s4= ?, s5= ? where year = ? and month = ? and date = ? and place = ?これのことではないのですか?
yona

2017/08/30 15:10

エラーログは回答者全員に必要な情報です、質問に追記してください。 また、エラーメッセージを理解しているのであれば、s1というカラムが存在するかを確認してください。 おそらくクリエイト文が間違っている可能性があります、見直してください。
退会済みユーザー

退会済みユーザー

2017/08/31 04:13

文字数制限で追加できなかったためこちらにしか追加できませんでしたすみません。 カラムは自分では存在していると思うのですが、、、 クリエイト文の方確認してみます。
退会済みユーザー

退会済みユーザー

2017/09/04 11:47

遅くなってしまってすみません。なかなか時間が取れず進展は少ないのですが、1つだけ分かったことがあり、 カラムの名前がrank1,distance1,course1,raceName1,baba1となっているのですが、raceName1,baba1の二つではエラーが起きていなくrank1,distance1,course1でエラーが発生していることがわかりました。カラムの名前の付け方に問題があるのでしょうか?何か関係ありそうでしょうか?
yona

2017/09/04 12:11

クリエイト文を確認し、カラムがあるかどうかを確認しないと解決しないですよ。
退会済みユーザー

退会済みユーザー

2017/09/04 12:43 編集

カラムはありました。 なのでなにがおかしいのかさっぱりわかりません。 そんな中一つ気づいたのがカラムの名前によってエラーの有無があることです。
yona

2017/09/04 13:42

カラムがあるのはどうやって確認しましたか? また、カラムを1つずつにするとどうなりますか?
退会済みユーザー

退会済みユーザー

2017/09/08 11:06

CREATE TABLEで宣言?しているものの中に入っていたので、存在すると判断しました。 public static final String TABLE_NAME = "data"; public static final String _ID = "_id"; public static final String COL_YEAR = "year"; public static final String COL_MONTH = "month"; public static final String COL_DATE = "date"; public static final String COL_PLACE = "place"; public static final String COL_RACE_NAME1 = "raceName1"; public static final String COL_DISTANCE1 = "distance1"; public static final String COL_CLASS1 = "rank1"; public static final String COL_COURSE1 = "course1"; public static final String COL_BABA1 = "baba1"; public static final String COL_RACE_NAME2 = "raceName2"; public static final String COL_DISTANCE2 = "distance2"; public static final String COL_CLASS2 = "rank2"; public static final String COL_COURSE2 = "course2"; public static final String COL_BABA2 = "baba2"; public static final String COL_RACE_NAME3 = "raceName3"; public static final String COL_DISTANCE3 = "distance3"; public static final String COL_CLASS3 = "rank3"; public static final String COL_COURSE3 = "course3"; public static final String COL_BABA3 = "baba3"; public static final String COL_RACE_NAME4 = "raceName4"; public static final String COL_DISTANCE4 = "distance4"; public static final String COL_CLASS4 = "rank4"; public static final String COL_COURSE4 = "course4"; public static final String COL_BABA4 = "baba4"; public static final String COL_RACE_NAME5 = "raceName5"; public static final String COL_DISTANCE5 = "distance5"; public static final String COL_CLASS5 = "rank5"; public static final String COL_COURSE5 = "course5"; public static final String COL_BABA5 = "baba5"; public static final String COL_RACE_NAME6 = "raceName6"; public static final String COL_DISTANCE6 = "distance6"; public static final String COL_CLASS6 = "rank6"; public static final String COL_COURSE6 = "course6"; public static final String COL_BABA6 = "baba6"; public static final String COL_RACE_NAME7 = "raceName7"; public static final String COL_DISTANCE7 = "distance7"; public static final String COL_CLASS7 = "rank7"; public static final String COL_COURSE7 = "course7"; public static final String COL_BABA7 = "baba7"; public static final String COL_RACE_NAME8 = "raceName8"; public static final String COL_DISTANCE8 = "distance8"; public static final String COL_CLASS8 = "rank8"; public static final String COL_COURSE8 = "course8"; public static final String COL_BABA8 = "baba8"; public static final String COL_RACE_NAME9 = "raceName9"; public static final String COL_DISTANCE9 = "distance9"; public static final String COL_CLASS9 = "rank9"; public static final String COL_COURSE9 = "course9"; public static final String COL_BABA9 = "baba9"; public static final String COL_RACE_NAME10 = "raceName10"; public static final String COL_DISTANCE10 = "distance10"; public static final String COL_CLASS10 = "rank10"; public static final String COL_COURSE10 = "course10"; public static final String COL_BABA10 = "baba10"; public static final String COL_RACE_NAME11 = "raceName11"; public static final String COL_DISTANCE11 = "distance11"; public static final String COL_CLASS11 = "rank11"; public static final String COL_COURSE11 = "course11"; public static final String COL_BABA11 = "baba11"; public static final String COL_RACE_NAME12 = "raceName12"; public static final String COL_DISTANCE12 = "distance12"; public static final String COL_CLASS12 = "rank12"; public static final String COL_COURSE12 = "course12"; public static final String COL_BABA12 = "baba12"; これを全てCREATE TABLEで宣言しています。
yona

2017/09/08 11:38

それは確認したことになりません。 これらの文字列からクリエイト文を作っているんですよね? それならクリエイト文で文字列の結合の仕方を間違うとカラムはできません。 クリエイト文を記載してください。
退会済みユーザー

退会済みユーザー

2017/09/08 11:59

public static final String CREATE_TABLE = "create table " + SQLDataContract.Data.TABLE_NAME + "(" + SQLDataContract.Data._ID + " integer primary key autoincrement," + SQLDataContract.Data.COL_YEAR + " integer," + SQLDataContract.Data.COL_MONTH + " integer," + SQLDataContract.Data.COL_DATE + " integer," + SQLDataContract.Data.COL_PLACE + " integer," + SQLDataContract.Data.COL_RACE_NAME1 + " text default ''," + SQLDataContract.Data.COL_CLASS1 + "text default ''," + SQLDataContract.Data.COL_COURSE1 + "text default ''," + SQLDataContract.Data.COL_DISTANCE1 + "integer default 0," + SQLDataContract.Data.COL_BABA1 + " text default ''," + SQLDataContract.Data.COL_RACE_NAME2 + " text default ''," + SQLDataContract.Data.COL_CLASS2 + "text default ''," + SQLDataContract.Data.COL_COURSE2 + "text default ''," + SQLDataContract.Data.COL_DISTANCE2 + "integer default 0," + SQLDataContract.Data.COL_BABA2 + " text default ''," + SQLDataContract.Data.COL_RACE_NAME3 + " text default ''," + SQLDataContract.Data.COL_CLASS3 + "text default ''," + SQLDataContract.Data.COL_COURSE3 + "text default ''," + SQLDataContract.Data.COL_DISTANCE3 + "integer default 0," + SQLDataContract.Data.COL_BABA3 + " text default ''," + SQLDataContract.Data.COL_RACE_NAME4 + " text default ''," + SQLDataContract.Data.COL_CLASS4 + "text default ''," + SQLDataContract.Data.COL_COURSE4 + "text default ''," + SQLDataContract.Data.COL_DISTANCE4 + "integer default 0," + SQLDataContract.Data.COL_BABA4 + " text default ''," + SQLDataContract.Data.COL_RACE_NAME5 + " text default ''," + SQLDataContract.Data.COL_CLASS5 + "text default ''," + SQLDataContract.Data.COL_COURSE5 + "text default ''," + SQLDataContract.Data.COL_DISTANCE5 + "integer default 0," + SQLDataContract.Data.COL_BABA5 + " text default ''," + SQLDataContract.Data.COL_RACE_NAME6 + " text default ''," + SQLDataContract.Data.COL_CLASS6 + "text default ''," + SQLDataContract.Data.COL_COURSE6 + "text default ''," + SQLDataContract.Data.COL_DISTANCE6 + "integer default 0," + SQLDataContract.Data.COL_BABA6 + " text default ''," + SQLDataContract.Data.COL_RACE_NAME7 + " text default ''," + SQLDataContract.Data.COL_CLASS7 + "text default ''," + SQLDataContract.Data.COL_COURSE7 + "text default ''," + SQLDataContract.Data.COL_DISTANCE7 + "integer default 0," + SQLDataContract.Data.COL_BABA7 + " text default ''," + SQLDataContract.Data.COL_RACE_NAME8 + " text default ''," + SQLDataContract.Data.COL_CLASS8 + "text default ''," + SQLDataContract.Data.COL_COURSE8 + "text default ''," + SQLDataContract.Data.COL_DISTANCE8 + "integer default 0," + SQLDataContract.Data.COL_BABA8 + " text default ''," + SQLDataContract.Data.COL_RACE_NAME9 + " text default ''," + SQLDataContract.Data.COL_CLASS9 + "text default ''," + SQLDataContract.Data.COL_COURSE9 + "text default ''," + SQLDataContract.Data.COL_DISTANCE9 + "integer default 0," + SQLDataContract.Data.COL_BABA9 + " text default ''," + SQLDataContract.Data.COL_RACE_NAME10 + " text default ''," + SQLDataContract.Data.COL_CLASS10 + "text default ''," + SQLDataContract.Data.COL_COURSE10 + "text default ''," + SQLDataContract.Data.COL_DISTANCE10 + "integer default 0," + SQLDataContract.Data.COL_BABA10 + " text default ''," + SQLDataContract.Data.COL_RACE_NAME11 + " text default ''," + SQLDataContract.Data.COL_CLASS11 + "text default ''," + SQLDataContract.Data.COL_COURSE11 + "text default ''," + SQLDataContract.Data.COL_DISTANCE11 + "integer default 0," + SQLDataContract.Data.COL_BABA11 + " text default ''," + SQLDataContract.Data.COL_RACE_NAME12 + " text default ''," + SQLDataContract.Data.COL_CLASS12 + "text default ''," + SQLDataContract.Data.COL_COURSE12 + "text default ''," + SQLDataContract.Data.COL_DISTANCE12 + "integer default 0," + SQLDataContract.Data.COL_BABA12 + " text default '')"; これです。よろしくお願いします。
yona

2017/09/08 12:11

CREATE_TABLEをログ出力してください、明らかにスペースが足りません。
退会済みユーザー

退会済みユーザー

2017/09/08 12:26

本当ですね。全然気づきませんでした。 すみません。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問