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