創造工学設計I 電子情報工学科4年(前期) 12回目 (09/07/2015) 担当 古山彰一 (shoichi@nc-toyama. ac 創造工学設計I 電子情報工学科4年(前期) 12回目 (09/07/2015) 担当 古山彰一 (shoichi@nc-toyama.ac.jp)
入力したテキストをファイルに保存する package jp.ac.nc_toyama.chap14_2_1; import android.support.v7.app.ActionBarActivity; import android.app.AlertDialog; import android.content.*; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.graphics.Color; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup.LayoutParams; import android.widget.*; public class MainActivity extends ActionBarActivity implements View.OnClickListener { //本ではView.が無いが、それだと走らない(03072015SF) //データベース名を定数に登録 private final static String DB_NAME = "testDB.db"; //テーブル名を登録 private final static String DB_TABLE = "testTable"; //データベースのバージョンを登録 private final static int DB_VERSION = 1; //データベース用のオブジェクトを格納するフィールド変数 private SQLiteDatabase databaseObject; //エディットテキスト private EditText varEditText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //リニアレイアウトの生成 LinearLayout varlayout = new LinearLayout(MainActivity.this); varlayout.setBackgroundColor(Color.rgb(153,153,153)); varlayout.setOrientation(LinearLayout.VERTICAL); setContentView(varlayout); //エディットテキストの生成 varEditText = new EditText(MainActivity.this); varEditText.setLayoutParams(new LinearLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); varEditText.setLines(6); varlayout.addView(varEditText); //ボタンの生成 varlayout.addView(makeButton("データを書き込みます", "write")); varlayout.addView(makeButton("データを読み込みます", "read")); //データベースオブジェクトの作成 DatabaseHelper dbHelperObject = new DatabaseHelper(MainActivity.this); databaseObject = dbHelperObject.getWritableDatabase(); } //データベースからの読み込みを行うメソッド private String readToDB() throws Exception { //データベースからテーブルを読み込む Cursor cursor = databaseObject.query( DB_TABLE, new String[]{"id", "info"}, "id='0'", null, null, null, null); //cursor内のレコード数が0の場合は例外処理を行うインスタンスを生成 if (cursor.getCount() == 0) throw new Exception(); //カーソルの位置を先頭のレコードに移動 cursor.moveToFirst(); //cursorオブジェクト内のレコードデータをString型に変換 String valueCursor = cursor.getString(1); //カーソルを閉じる cursor.close(); //レコードのデータを呼び出し元に返す return valueCursor; } //ダイアログを表示するメソッドの定義 private static void showDialog(Context context, String title, String text) { AlertDialog.Builder varAlertDialog = new AlertDialog.Builder(context); varAlertDialog.setTitle(title); varAlertDialog.setMessage(text); varAlertDialog.setPositiveButton("OK", null); varAlertDialog.show(); } //ヘルパークラスの定義 private static class DatabaseHelper extends SQLiteOpenHelper { //データベースを作成、または開く、管理するための処理 public DatabaseHelper(Context context) { //ヘルパークラスクラスのコンストラクターの呼び出し super(context, DB_NAME, null, DB_VERSION); } //テーブルを作成するメソッドの定義 @Override public void onCreate(SQLiteDatabase db) { //テーブルの作成 db.execSQL("CREATE TABLE IF NOT EXISTS " + DB_TABLE + "(id text primary key, info text)"); } //データベースをアップグレードするメソッドの定義 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //古いバージョンのテーブルが存在する場合はこれを削除 db.execSQL("DROP TABLE IF EXISTS " + DB_TABLE); //新規テーブルの作成 onCreate(db); } } } //ボタンを生成するメソッド private Button makeButton(String text, String tag) { Button varButton = new Button(MainActivity.this); varButton.setText(text); varButton.setTag(tag); varButton.setOnClickListener(MainActivity.this); varButton.setLayoutParams(new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); return varButton; } //ボタンクリック時の処理 public void onClick(View v) { String varTag = (String) v.getTag(); if (varTag.equals("write")) { try { //データベースへの書き込み String writeString = varEditText.getText().toString(); writeToDB(writeString); } catch (Exception e) { //書き込み失敗時にメッセージを表示 showDialog(this, "ERROR", "データの書き込みに失敗しました"); } } else if (varTag.equals("read")) { try { //データベースの読み込み String readString = readToDB(); varEditText.setText(readString); } catch (Exception e) { showDialog(this, "ERROR", "データの読み込みに失敗しました"); } } } //データベースへの書き込みを行うメソッドの定義 private void writeToDB(String editedStrings) throws Exception { // ContentValues型のインスタンスを生成 ContentValues contentValObject = new ContentValues(); //カラムの作成 contentValObject.put("id", "0"); //カラムの追加 contentValObject.put("info", editedStrings); //レコードを上書き int numberOfColumns = databaseObject.update(DB_TABLE, contentValObject, null, null); //レコードが存在しない場合は新規に作成 if (numberOfColumns == 0) databaseObject.insert(DB_TABLE, null, contentValObject); }
アプリを実行する なにか文章を入力する 「データを書き込みます」をタップする アプリを終了する アプリを再起動する 「データを読み込みます」をタップする 最初に書き込んだ文章が表示される
データの検索を行うデータベースアプリ ポイントが5000以上のデータを抽出 // ArrayAdapterのインスタンスを生成 ArrayAdapter<String> ad = new ArrayAdapter<String>( this, android.R.layout.simple_list_item_1); while (cursor.moveToNext()) { //各カラムのidを取得 int idId = cursor.getColumnIndex("id"); int idName = cursor.getColumnIndex("name"); int idPoint = cursor.getColumnIndex("point"); int id = cursor.getInt(idId); String name = cursor.getString(idName); int point = cursor.getInt(idPoint); String row = id + " " + name + " " + point + "ポイント"; ad.add(row); } varListView.setAdapter(ad); varLinearLayout.addView(varListView); //データベースオブジェクトをクローズ dbObject.close(); } } package jp.ac.nc_toyama.chap14_2_2; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.app.*; import android.database.*; import android.database.sqlite.*; import android.os.*; import android.widget.*; public class MainActivity extends ActionBarActivity { ListView varListView; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout varLinearLayout = new LinearLayout(this); varLinearLayout.setOrientation(LinearLayout.HORIZONTAL); setContentView(varLinearLayout); ListView varListView = new ListView(this); //データベース名と保存場所を登録 String dbName = "data/data/" + getPackageName() + "/myDatabase1.db"; //データベースオブジェクトを生成 SQLiteDatabase dbObject = SQLiteDatabase.openOrCreateDatabase(dbName, null); //古いテーブルを破棄するSQL文を登録 String dropTable = "DROP TABLE IF EXISTS namelist"; //3つのカラムを持つテーブルを作成するSQL文を登録 String createTable = "CREATE TABLE namelist" + "(id INTEGER PRIMARY KEY, name STRING, point INTEGER)"; //データを追加するSQL文を登録 String[] insertData = { "INSERT INTO namelist(name, point) VALUES ('秀和太郎', 1680)", "INSERT INTO namelist(name, point) VALUES ('安藤ロイド', 5480)", "INSERT INTO namelist(name, point) VALUES ('Java 郁代', 7860)", "INSERT INTO namelist(name, point) VALUES ('須磨 穂', 12890)", "INSERT INTO namelist(name, point) VALUES ('愛 穂武', 1020)", "INSERT INTO namelist(name, point) VALUES ('秀和次郎', 680)"}; //検索を行うSQL文の登録(0の部分を任意のポイント数に書き換える) String query = "SELECT * FROM namelist WHERE point >= 5000"; //ポイントが5000以上のデータを抽出 //古いテーブルを破棄 dbObject.execSQL(dropTable); //テーブルを作成 dbObject.execSQL(createTable); //データを追加 for (int i = 0; i < insertData.length; i++) { dbObject.execSQL(insertData[i]); } //データへアクセスするためのカーソルオブジェクトを生成してクエリーを実行 Cursor cursor = dbObject.rawQuery(query, null); ポイントが5000以上のデータを抽出
課題1~3をpdfファイルにしてメールで提出しなさい。 課題1:Chap14_2_1をプログラミングし、実行しなさい。また、その画面のハードコピーを取りなさい。 課題2:Chap14_2_2をプログラミングし、実行しなさい。画面のハードコピーを取りなさい。 課題3:Chap14_2_2について、 全てのデータ(ポイントが0以上)を表示するようにプログラムを変更しなさい。 全てのデータの表示が降順になるようにしなさい(ポイントが高いものが上、低いものが下になるように)。 課題1~3をpdfファイルにしてメールで提出しなさい。 締切 本日中(23:59まで) 提出先 shoichi@nc-toyama.ac.jp 課題ファイル名 12i4??.pdf (??は二桁の出席番号)