現在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); } } }
コードも記載させていただきますが、量的に全ては載せることができないので
関係ある場所のみ記載させていただいております。
回答1件
あなたの回答
tips
プレビュー