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

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

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

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

Android Studio

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

Q&A

解決済

1回答

3930閲覧

android studio でSQLiteを使用していますが、エラーになってしまいます

matsutake

総合スコア34

SQLite

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

Android Studio

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

0グッド

1クリップ

投稿2017/10/05 05:55

編集2017/10/05 06:30

現在SQLiteを使用してアプリを開発しているのですが
画面遷移時に、SQLiteによりデータベースからデータを取得し、表示しようとしているのですが
オープン後にデータを取得するところでエラーになってしまいます。
他の場所でも同様の処理を行う箇所があるのですが、そちらでは問題なく処理が行われるので
同様に記述しているのですが、うまくいきません。

どこが悪いのでしょうか。

エラー内容は「no such table: productsmaster」でしたのでテーブルが作成されていないということのようでした。開発環境がMacBook Proなのですが、エミュレーター内のDBの内容の確認の方法も調べてみたのですが、わからない状況で、DBの状況も確認できずにいます。

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <Spinner android:id="@+id/products_Spinner01" android:layout_width="200dp" android:layout_height="wrap_content"> </Spinner> <ListView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/listview_pro" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> </LinearLayout> ●AddProducts.java public class AddProducts extends AppCompatActivity { private DBAdapter_Products dbAdapter_products; // DBAdapter private ArrayAdapter<String> adapter_products; // ArrayAdapter private ArrayList<String> items_products; // ArrayList private Spinner spinner; private ListView mListViewProducts; // ListView @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.add_products); spinner = (Spinner)findViewById(R.id.products_Spinner01); dbAdapter_products = new DBAdapter_Products(this); dbAdapter_products.openDB(); mListViewProducts = (ListView) findViewById(R.id.listview_pro); items_products = new ArrayList<>(); String[] columns = {DBAdapter_Products.COL_PRODUCTS}; Cursor c = dbAdapter_products.getDB(columns); ← ここでエラーになります } ●DBAdapter_Products.jave public class DBAdapter_Products { private final static String DB_NAME = "datecheck.db"; private final static String DB_TABLE = "productsmaster"; private final static int DB_VERSION = 1; public final static String COL_ID = "_id"; public final static String COL_GENRE = "genre"; public final static String COL_PRODUCTS = "products"; public final static String COL_CODE = "code"; private SQLiteDatabase db = null; private DBAdapter_Products.DBHelper dbHelper = null; protected Context context; public DBAdapter_Products(Context context) { this.context = context; dbHelper = new DBAdapter_Products.DBHelper(this.context); } /** * openDB() * * @return this */ public DBAdapter_Products openDB() { db = dbHelper.getWritableDatabase(); return this; } /** * closeDB() */ public void closeDB() { db.close(); db = null; } /** * getDB() * * @param columns String[] * @return */ public Cursor getDB(String[] columns) { return db.query(DB_TABLE, columns, null, null, null, null, null); } /** * DBHelper */ private static class DBHelper extends SQLiteOpenHelper { public DBHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); } /** * onCreate() * * @param db SQLiteDatabase */ @Override public void onCreate(SQLiteDatabase db) { String createTbl = "CREATE TABLE " + DB_TABLE + " (" + COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + COL_GENRE + " TEXT NOT NULL," + COL_PRODUCTS + " TEXT NOT NULL," + COL_CODE + " INTEGER NOT NULL" + ");"; db.execSQL(createTbl); } /** * * @param db SQLiteDatabase * @param oldVersion int 古いバージョン * @param newVersion int 新しいバージョン */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS" + DB_TABLE); onCreate(db); } } }

コードも記載させていただきますが、量的に全ては載せることができないので
関係ある場所のみ記載させていただいております。

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

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

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

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

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

matsutake

2017/10/05 06:31

ご丁寧にご指摘いただき、ありがとうございました。そして、質問する際のマナーをしっかり把握していなかったこと、申し訳ございませんでした。
guest

回答1

0

ベストアンサー

このテーブルは後から追加したものでしょうか?その場合、DB_VERSIONの値を増加させないとデータベースが更新されません。
DB_VERSIONの値を増加させて、再度確認してください。この場合テーブルが削除される実装なので注意してください。
また、「他の場所でも同様の処理を行う箇所がある」とありますが、これは今回の質問と同一のテーブルにアクセスしているのでしょうか。

投稿2017/10/05 08:45

yona

総合スコア18155

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

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

matsutake

2017/10/05 16:08

いつもご丁寧なご回答、ありがとうございます。 後からテーブルを追加するとはどういうことなのでしょうか。 どのタイミングから見てのお話になるのでしょうか。 「他の場所でも同様の処理を行う箇所がある」というのは、別のタイミングで同一のテーブルにアクセスする際の処理と、別のテーブルにアクセスする際の処理の2パターンのことを指します。
yona

2017/10/06 08:11

SQLiteOpenHelper#onCreateは同一バージョンで一度しか呼ばれません。 そのため、「テーブルAを作成するコード」と「テーブルBを作成するコード」の実装タイミングによっては片方のテーブルが作成されない可能性があります。 しかし、他所で「同一テーブルにアクセスできている」ということを信頼するならテーブルは存在しているみたいですね。 他所でテーブルにアクセスするメソッドはどのように書いていますか? コードはファイル単位でマークダウンしてください。
matsutake

2017/10/06 10:24

ご回答、ありがとうございました。 申し訳ございません。前回のコメントで訂正がございます。 テーブルAとテーブルBを作成するタイミングによっては片方のテーブルが作成されない可能性があるというご指摘通り、片方のテーブルしか作成できておりませんでした。 今回もご丁寧なご回答、ありがとうございました。 また、質問させて頂く際のマナーをしっかり把握してないことでご迷惑をおかけし申し訳ございません。 今後は質問の内容、回答、書き方等、気をつけるようにいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問