DBに格納されたデータを全て表示したい
- 評価
- クリップ 0
- VIEW 1,009
こんばんは。度々お世話になっております。
私は英単語帳のようなアプリケーションを作成しております。英単語帳のデータとして、日本語、英語、正解か負債階下のフラグを格納するデータベースはSQLiteを使用したいと思っております。DBへの格納、全削除などを行うDB_manage.javaというプログラムについてご意見を頂きたいです。
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DB_manage {
private final static String DB_NAME = "data.db"; // DB 名
private final static String DB_CONTENT_TABLE = "contentSheet"; // DB のテーブル名
private final static String DB_DATE_TABLE = "dateSheet"; // DB のテーブル名(date 用)
private final static int DB_VERSION = 1; // DB のバージョン
//DBのカラム名
public final static String COL_ID = "_id"; // id
public final static String COL_JAP = "japanese";
public final static String COL_ENG = "english";
public final static String COL_TOF = "t_or_f";
private SQLiteDatabase db = null; // SQLiteDatabase
private DBHelper dbHelper = null; // DBHelper
protected Context context; // Context
// コンストラクタ
public DB_manage(Context context) {
this.context = context;
dbHelper = new DBHelper(this.context);
}
public DB_manage openDB() {
db = dbHelper.getWritableDatabase(); // DB の読み書き
return this;
}
public DB_manage readDB() {
db = dbHelper.getReadableDatabase(); // DB の読み込み
return this;
}
public void closeDB() {
db.close(); // DB を閉じる
db = null;
}
//DB のレコードへ登録
public void saveContentDB(String japanese, String english, int t_or_f) {
db.beginTransaction(); // トランザクション開始
try {
ContentValues values = new ContentValues(); // ContentValues でデータを設定していく
values.put(COL_JAP, japanese);
values.put(COL_ENG, english);
values.put(COL_TOF, t_or_f);
// insert メソッド データ登録
// 第 1 引数:DB のテーブル名
// 第 2 引数:更新する条件式
// 第 3 引数:ContentValues
db.insert(DB_CONTENT_TABLE, null, values); // レコードへ登録
db.setTransactionSuccessful(); // トランザクションへコミット
} catch (Exception e) {
e.printStackTrace();
} finally {
db.endTransaction(); // トランザクションの終了
}
}
//!ここでDB のデータを全て取得したい!
//DB のレコードを全削除
public void allDelete() {
db.beginTransaction(); // トランザクション開始
try {
// delete メソッド DB のレコードを削除
// 第 1 引数:テーブル名
// 第 2 引数:削除する条件式 null の場合は全レコードを削除
// 第 3 引数:第 2 引数で?を使用した場合に使用
db.delete(DB_DATE_TABLE, null, null); //DB のレコードを全削除
db.delete(DB_CONTENT_TABLE, null, null); // DB のレコードを全削除
db.setTransactionSuccessful(); // トランザクションへコミット
} catch (Exception e) {
e.printStackTrace();
} finally {
db.endTransaction(); // トランザクションの終了
}
}
/**
* DB のレコードの単一削除
* selectDelete()
*
* @param position String
*/
public void selectDelete(String position) {
db.beginTransaction(); // トランザクション開始
try {
db.delete(DB_DATE_TABLE, COL_ID + "=?", new String[]{position});
db.delete(DB_CONTENT_TABLE, COL_ID + "=?", new String[]{position});
db.setTransactionSuccessful(); // トランザクションへコミット
} catch (Exception e) {
e.printStackTrace();
} finally {
db.endTransaction(); // トランザクションの終了
}
}
/**
* データベースの生成やアップグレードを管理する SQLiteOpenHelper を継承したクラス
* DBHelper
*/
private static class DBHelper extends SQLiteOpenHelper {
// コンストラクタ
public DBHelper(Context context) {
//第 1 引数:コンテキスト
//第 2 引数:DB 名
//第 3 引数:factory null でよい
//第 4 引数:DB のバージョン
super(context, DB_NAME, null, DB_VERSION);
}
/**
* DB 生成時に呼ばれる
* onCreate()
*
* @param db SQLiteDatabase
*/
@Override
public void onCreate(SQLiteDatabase db) {
//テーブルを作成する SQL 文の定義 ※スペースに気を付ける
String createTbl_date = "CREATE TABLE " + DB_DATE_TABLE + " ("
+ COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
+ COL_JAP + " INTEGER NOT NULL,"
+ COL_ENG + " INTEGER NOT NULL,"
+ COL_TOF + " INTEGER NOT NULL"
+ ");";
db.execSQL(createTbl_date); //SQL 実行
}
/**
* DB アップグレード(バージョンアップ)時に呼ばれる
*
* @param db SQLiteDatabase
* @param oldVersion int 古いバージョン
* @param newVersion int 新しいバージョン
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// DB からテーブル削除
db.execSQL("DROP TABLE IF EXISTS '" + DB_CONTENT_TABLE + "'");
// テーブル生成
onCreate(db);
}
}
}
現在のコードはこのようになっております(先人のものをいじったので修正を間違っている部分もあるかもしれません、、、)このコードの、//!ここで全取得したい! という部分で、英単語帳を表示する際に必要となるデータを全取得する関数を作りたいのですが、どのように書けばよいのかわからないので教えて頂きたいです。また、どこかほかの部分にもミスがありましたら教えて頂けると幸いです。
ちなみに、アプリとしては、1枚目がホーム画面、2枚目がDBに単語を格納する画面、3枚目がDBからすべての単語を表示する画面としています。
1枚目のjavaファイルはWords.java、2枚目はactivity_sub.java、3枚目はactivity_sub2.javaというファイル名で、どれもまだボタンやテキストボックスの配置のみ記述しております。
3枚目では、英語の部分をリストのように表示し、それをタップするとトースト表示で日本語が表示されるようにするつもりです。正解と不正解のフラグについては、まだ手を付けていません。。。どなたかよろしければお願いします。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.19%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
Orlofsky
2019/01/08 19:06
[SQLite]タグを追加されては?
amabile046
2019/01/08 19:08
タグを追加しました!ありがとうございます。