Skip to content

Latest commit

 

History

History
105 lines (83 loc) · 3.39 KB

README.md

File metadata and controls

105 lines (83 loc) · 3.39 KB

目次 前の問題 次の問題


075:複合(15)

  • 以下は、Androidでデータベースを処理するプログラムの一部である。問題点を指摘し、修正せよ。
    • LectureDataModelはプログラム内で使われているデータモデルであり、適切に実装されているものとする。
    • データベースヘルパーのDB生成・アップデート処理はソースコードを一部省略している。
public class Knock075 {
    private Knock075 () {
    };

    public static void update(final Context context,
            final List<LectureDataModel> lectureDatas) {
        SQLiteDatabase db = null;
        try {
            SQLiteOpenHelper helper = new DBHelper(context);
            db = helper.getWritableDatabase();
            db.beginTransaction();

            String sql = "UPDATE " + DBHelper.TABLE_NAME_1
                    + " SET consist_flg=? WHERE _id=?;";
            for (LectureDataModel lectureData : lectureDatas) {
                SQLiteStatement sqlitestatement = db.compileStatement(sql);
                sqlitestatement.bindString(1, lectureData.getConsistFlg());
                sqlitestatement.bindString(2, lectureData.getLectureId());
                sqlitestatement.executeInsert();
            }

            db.setTransactionSuccessful();

        } finally {
            if (db != null) {
                db.endTransaction();
            }

            db.close();
        }
    }

    public static void setDeleteFlag(final Context context, final int year,
            final int month, final String subject) {
        SQLiteDatabase db = null;
        try {
            SQLiteOpenHelper helper = new DBHelper(context);
            db = helper.getWritableDatabase();
            db.beginTransaction();

            String sql = "UPDATE " + DBHelper.TABLE_NAME_1
                    + " SET consist_flg='InConsistent'" 
                     + "WHERE year=? AND month=? AND subject=? ;";

            SQLiteStatement sqlitestatement = db.compileStatement(sql);
            sqlitestatement.bindLong(1, year);
            sqlitestatement.bindLong(2, month);
            sqlitestatement.bindString(3, subject);
            sqlitestatement.executeInsert();

            db.setTransactionSuccessful();

        } finally {
            if (db != null) {
                db.endTransaction();
            }

            db.close();
        }
    }

    /**
     * データベースヘルパー
     */
    private static class DBHelper extends SQLiteOpenHelper {

        /** データベースファイル名 */
        private static final String DB_FILE_NAME = "Database01";
        /** DBバージョン */
        private static final int DB_VERSION = 1;
        /** テーブル名 */
        private static final String TABLE_NAME_1 = "TABLE_NAME";

        /** コンストラクタ */
        public DBHelper(Context context) {
            super(context, DB_FILE_NAME, null, DB_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            Log.i(this.getClass().getCanonicalName(), "init db");
            // データベース作成処理(省略)

        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // データベースのバージョンアップ処理(省略)

        }
    }
}