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

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

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

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

Android

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

926閲覧

Android StudioのSQLiteでtableにvaluesをinsertできない

BaristaYuki

総合スコア10

Java

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

Android

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2019/03/21 07:54

前提・実現したいこと

SQLiteでテーブルを作成した後にinsertしたい。

javaでAndroidアプリを作成中でFrament内のEditTextから取得したStringをSQLiteで作ったDBのテーブルへinsertしたいです。

しかしエミュレータ上でテキストを打ってsaveしてDBにinsertしようとするとCOLUMNがテーブルに存在しないとエラーが出ていて、対処法がわからず困っております。
おそらくcreate文あたりに問題があるのだと思うのですが、初心者なもので上手いLogの出力方法もわからないです。

memoと名付けられたCOLUMNがないというエラーですが、memoのCOLUMNを無くして実行しても、今度はroasterと名付けられたCOLUMNがないと言われました。

ご教授お願い致します。。。

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

2019-03-21 16:17:33.487 16716-16716/com.example.yuki0.coffeelog E/SQLiteLog: (1) table coffeerecord has no column named memo 2019-03-21 16:17:33.491 16716-16716/com.example.yuki0.coffeelog E/SQLiteDatabase: Error inserting date=2019/2/21 rating=3.5 memo=b beans=a roaster=c android.database.sqlite.SQLiteException: table coffeerecord has no column named memo (code 1): , while compiling: INSERT INTO coffeerecord(date,rating,memo,beans,roaster) VALUES (?,?,?,?,?)

該当のソースコード

java

1 2import android.content.Context; 3import android.database.sqlite.SQLiteDatabase; 4import android.database.sqlite.SQLiteOpenHelper; 5import android.util.Log; 6 7public class DatabaseHelper extends SQLiteOpenHelper { 8 9 private static final String DBNAME = "coffeerecord.db"; 10 private static final int DBVERSION = 6; 11 public static final String TABLE_COFFEERECORD = "coffeerecord"; 12 public static final String COLUMN_ID = "_id"; 13 public static final String COLUMN_DATE = "date"; 14 public static final String COLUMN_BEANS = "beans"; 15 public static final String COLUMN_ROASTER = "roaster"; 16 public static final String COLUMN_NOTE = "memo"; 17 public static final String COLUMN_RATING = "rating"; 18 19 private static final String CREATE_TABLE_SQL = 20 "create table " + TABLE_COFFEERECORD 21 + "(" + COLUMN_ID + " integer primary key autoincrement," 22 + COLUMN_DATE + " text not null, " 23 + COLUMN_RATING + " text not null, " 24 + COLUMN_BEANS + " text not null, " 25 + COLUMN_ROASTER + " text not null, " 26 + COLUMN_NOTE + " text not null )"; 27 28 29 public DatabaseHelper(Context context) { 30 super(context, DBNAME, null, DBVERSION); 31 } 32 33 @Override 34 public void onCreate(SQLiteDatabase db) { 35 36 db.execSQL(CREATE_TABLE_SQL); 37 } 38 39 @Override 40 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 41 } 42 43}
//MainActivityのメソッド public void saverecord(String s1, String s2, String s3, String s4, String s5) { //insert data to DB SQLiteDatabase db = mDBHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(DatabaseHelper.COLUMN_DATE, s1); values.put(DatabaseHelper.COLUMN_BEANS, s2); values.put(DatabaseHelper.COLUMN_ROASTER, s3); values.put(DatabaseHelper.COLUMN_NOTE, s4); values.put(DatabaseHelper.COLUMN_RATING, s5); Uri uri = getContentResolver().insert(CoffeeContentProvider.CONTENT_URI, values); showToast("SAVED");

###fragement

package com.example.yuki0.coffeelog; import android.content.ContentValues; import android.content.Context; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.Fragment; import android.text.format.Time; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import android.widget.RatingBar; public class LogFragment extends Fragment { public static String Date; public static String ShopName; public static String BeansName; public static String Memo; public RatingBar ratingBar; public static float num =0; public static String ratenum; private EditText editBeansName; private EditText editShopName; private EditText editMemo; private EditText editDate; public static LogFragment newInstance() { LogFragment fragment = new LogFragment(); return fragment; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ViewGroup root = (ViewGroup)inflater.inflate(R.layout.fragment_log, null); return root; } @Override public void onResume(){ super.onResume(); Time time = new Time("Asia/Tokyo"); time.setToNow(); editBeansName = (EditText)getView().findViewById(R.id.EditBeansName); editShopName = (EditText)getView().findViewById(R.id.EditShopName); editMemo = (EditText)getView().findViewById(R.id.EditMemo); editDate = (EditText)getView().findViewById(R.id.EditDate); ratingBar = (RatingBar)getView().findViewById(R.id.ratingBar); ratingBar.setRating(3); String date = time.year+"/"+time.month+"/"+time.monthDay; editDate.setText(date); ratingBar.setOnRatingBarChangeListener( new RatingBar.OnRatingBarChangeListener() { public void onRatingChanged( RatingBar ratingBar, float rating, boolean fromUser) { // RatingBar のレイティング数が変わったときの動作 float num = ratingBar.getRating(); ratenum = Float.toString(num); } } ); Button btn = (Button)getActivity().findViewById(R.id.savebutton); btn.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view){ //insert data to DB try { Date = editDate.getText().toString(); }catch (NumberFormatException e){ Date = "日付を入力"; } try{ ShopName = editShopName.getText().toString(); }catch (NumberFormatException e){ ShopName = ""; } try { BeansName = editBeansName.getText().toString(); }catch(NumberFormatException e){ BeansName = ""; } try { Memo = editMemo.getText().toString(); }catch (NumberFormatException e){ Memo =""; } ((MainActivity)getActivity()).saverecord(Date,BeansName, Memo, ShopName,ratenum); } }); } }

#ContentProvider

import android.content.ContentProvider; import android.content.ContentValues; import android.content.UriMatcher; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteQueryBuilder; import android.net.Uri; import android.provider.ContactsContract; import android.support.annotation.Nullable; public class CoffeeContentProvider extends ContentProvider { private DatabaseHelper mDbHelper; private static final int COFFEERECOERD = 1; private static final int COFFEERECOERD_ID = 2; private static final String AUTHORITY = "com.example.yuki0.coffeelog.CoffeeContentProvider"; private static final String BASE_PARH = "coffeerecord"; public static final Uri CONTENT_URI = Uri.parse("content://"+AUTHORITY+"/"+BASE_PARH); private static final UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); static{ uriMatcher.addURI(AUTHORITY, BASE_PARH, COFFEERECOERD); uriMatcher.addURI(AUTHORITY, BASE_PARH +"/#", COFFEERECOERD_ID); } @Override public boolean onCreate(){ mDbHelper = new DatabaseHelper(getContext()); return false; } @Nullable @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder){ SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder(); queryBuilder.setTables(DatabaseHelper.TABLE_COFFEERECORD); int uriType = uriMatcher.match(uri); switch(uriType){ case COFFEERECOERD: break; case COFFEERECOERD_ID: queryBuilder.appendWhere(DatabaseHelper.COLUMN_ID + "=" + uri.getLastPathSegment()); break; default: throw new IllegalArgumentException("Unknown URI: "+ uri); } SQLiteDatabase db = mDbHelper.getWritableDatabase(); Cursor cursor = queryBuilder.query(db, projection, selection, selectionArgs,null,null,sortOrder); return cursor; } @Nullable @Override public Uri insert(Uri uri, ContentValues values){ SQLiteDatabase sqlDB = mDbHelper.getWritableDatabase(); int uriType = uriMatcher.match(uri); long id = 0; switch(uriType){ case COFFEERECOERD: id = sqlDB.insert(DatabaseHelper.TABLE_COFFEERECORD, null,values); break; default: throw new IllegalArgumentException("Unknown URI: "+ uri); } getContext().getContentResolver().notifyChange(uri, null); return Uri.withAppendedPath(uri,String.valueOf(id)); } @Nullable @Override public int delete(Uri uri, String selection, String[] selectionArgs){ return 0; } @Nullable @Override public String getType(Uri uri){ return null; } @Nullable @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs){ return 0; } }

試したこと

DBVersion を変えてみたりしたのですがダメでした。
ContentProviderを介さず直接DBにinsertしてもダメでした。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

jimbe

2019/03/21 08:44

実際にデータベースの列がどうなっているか, ご確認されましたでしょうか.
keicha_hrs

2019/03/21 09:28

memoやroasterはプログラム作成途中で追加したカラムなのではありませんか?DatabaseHelper#onCreate()の内容を変更したとしても、Android Studioが気を利かせて既存のテーブルを再生成してくれるような機能は存在しないので、端末内には本当にmemoやroasterというカラムが存在しないテーブルが残存しているような気がします。デバッグ中のアプリを端末の操作によって一旦アンインストールして、それからもう一度同じプログラムを実行してみても、現象は再現するでしょうか?
BaristaYuki

2019/03/21 11:04

端末からアプリをアンインストールしたら解決しました! ありがとうございます。
guest

回答1

0

自己解決

端末からアプリをアンインストールしたら解決いたしました。

投稿2019/03/21 11:06

BaristaYuki

総合スコア10

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問