Android とデータベースの連結 1 データベースオープンヘルパー SQLite は データベースを1つのファイルで扱うので 指定のデータベースがないときは作成し あるときは 既存のファイルを開く という処理が必要です そういう一連の処理をしてくれるのが SQLiteOpenHelper クラス
|
|
|
- しまな かつま
- 9 years ago
- Views:
Transcription
1 Android Programming and Database IS04 組み込み 1
2 Android とデータベースの連結 1 データベースオープンヘルパー SQLite は データベースを1つのファイルで扱うので 指定のデータベースがないときは作成し あるときは 既存のファイルを開く という処理が必要です そういう一連の処理をしてくれるのが SQLiteOpenHelper クラスです これを継承して テーブル作成 初期うデータ挿入まで定義しておきます package jp.ac.neec.kmt.is04.takata; import android.content.context; import android.database.sqlite.sqlitedatabase; import android.database.sqlite.sqlitedatabase.cursorfactory; import android.database.sqlite.sqliteopenhelper; public class DBHelper extends SQLiteOpenHelper { public DBHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); // TODO Auto-generated constructor public void oncreate(sqlitedatabase db) { // TODO Auto-generated method stub String sql = "create table planet_table (" + "id integer primary key autoincrement," + "name text," + "image text" + ")"; // テーブル作成 sql="insert into planet_table (name,image) values(' 水星 ','mercury.jpg')"; sql="insert into planet_table (name,image) values(' 金星 ','venus.jpg')"; sql="insert into planet_table (name,image) values(' 地球 ','earth.jpg')"; sql="insert into planet_table (name,image) values(' 火星 ','mars.jpg')"; sql="insert into planet_table (name,image) values(' 木星 ','jupiter.jpg')"; 2
3 sql="insert into planet_table (name,image) values(' 土星 public void onupgrade(sqlitedatabase db, int oldversion, int newversion) { // TODO Auto-generated method stub 2 主プログラムからオープンヘルパーを呼び出してデータベースを使えるようにする Activity.java SQLiteDatabase db; public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); DBHelper dbhelper = new DBHelper(this, "planet_db", null, 1); db = dbhelper.getwritabledatabase(); new DBHelper(this, "planet_db", null, 1); このクラス, データベース名, 特別なカーソルを使うか?, DB 番号 SQLiteOpenHelper 戻り値 SQLiteDatabase SQLiteDatabase メソッド getreadabledatabase() 読み込み専用でデータベースを開く getwritabledatabase() 書き込みもできるデータベースを開く 3 SQL を発行する Select 文のようにデータを読み出す SQL と delete 文や insert 文のようにデータベースに影響を与える SQL とで扱いが違います データの挿入や削除の場合 sql="insert into photo_table (name,title) values('mercury.jpg',' 水星 ')"; 3
4 データの読み出しの場合 Cursor cursor = null; sql = "select * from photo_table"; cursor = db.rawquery(sql, null); 4 データの読み出しデータを読み出した瞬間は 先頭のデータの前を指しています カーソル データ1 データ2 まず 先頭のデータを指すようにカーソルを移動します cursor.movetofirst(); カーソル データ 1 データ 2 カーソル移動のメソッド (Cursor クラス ) 戻り値メソッド boolean move(into offset) 現在のカーソル位置から相対値で移動する boolean movetofirst() 先頭位置に移動する boolean movetolast() 最後の位置に移動する boolean movetonext() 次の行に移動する boolean movetoposition(int position) 絶対値に移動する boolean movetoprevious() 前の行に移動するいずれも移動できなかったとき false となる 4
5 カーソル位置のデータを読み込む データの種類によってメソッドが異なります 引数に カラム位置を指定する ( 最初のカラムは 0) String name=cursor.getstring(1); 戻り値 メソッド double getdouble(int columnindex) int getint(int columnindex) long getlong(int columnindex) String getstring(int columnindex) その他のメソッド戻り値 int int int String int int boolean boolean boolean boolean boolean メソッド getcolumncount() カラム数を得る getcolumnindex(string columnname) カラム名からカラム番号を得る 指定の名前がないときは-1 が返る getcolumnindexorthrow(string columnname) カラム名からカラム番号を得る 指定の名前がないときは例外を投げる getcolumnname(int columnindex) カラム番号からカラム名を得る getcount() 総行数を返す getposition() 現在カーソルがある位置を求める isafterlast() 最後の行より後にカーソルがあるか? isbeforfirst() 最初の行より前にカーソルがあるか? isfirst() 先頭行にカーソルがあるか? islast() 最終行にカーソルがあるか? isnull(int columnindex) 指定のカラムが NULL か? 5
6 プログラム例データベースの最初のレコードを表示する Activity package jp.ac.neec.kmt.is04.takata; import java.io.file; import android.app.activity; import android.database.cursor; import android.database.sqlite.sqlitedatabase; import android.graphics.bitmap; import android.graphics.bitmapfactory; import android.os.bundle; import android.os.environment; import android.widget.imageview; import android.widget.textview; public class HelloDBActivity extends Activity { SQLiteDatabase db; Cursor cursor = null; 6
7 /** Called when the activity is first created. public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); DBHelper dbhelper = new DBHelper(this, "planet_db", null, 1); db = dbhelper.getwritabledatabase(); String sql = "select * from planet_table"; cursor = db.rawquery(sql, null); cursor.movetofirst(); String name=cursor.getstring(1); String image=cursor.getstring(2); System.out.println("name="+name); File dir = Environment.getExternalStorageDirectory(); dir = new File(dir, "Pictures"); String path = dir.getabsolutepath(); Bitmap bitmap = BitmapFactory.decodeFile(path+"/"+image); TextView textview = (TextView) this.findviewbyid(r.id.planet_name); ImageView imageview = (ImageView) this.findviewbyid(r.id.planet_image); textview.settext(name); imageview.setimagebitmap(bitmap); データベースの場所 :data/data/( パッケージ名 )/database/ この中のファイルを削除すると データベースは削除されます 7
8 データベースからリストを表示する SDカード上の画像ファイルをすべて表示するのではなく データベースの情報をもとに SDカード上の画像を選んで表示するプロジェクトです 1 レイアウトの作成プログラミング編 p43 を参考に メインのレイアウトと 1 行分のレイアウトを設計してください ( 画像を載せる場合には 画像のサイズが大きくなりすぎないように 最初からサイズを指定しておくとよい ) android:layout_width="85dp" android:layout_height="85dp" 2 データベースヘルパークラスの作成データベースを作成し 初期データをインサートしておく そのとき コマンドで SQL が正しいことを確認しておく 3 Activity からでデータベースヘルパーのインスタンス作成し データベースとの連携に問題がないことを実験しておく ( データベースプログラミング編 p3) これはあとでアダプタに移動します Activity.java SQLiteDatabase db; public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); DBHelper dbhelper = new DBHelper(this, "planet_db", null, 1); db = dbhelper.getwritabledatabase(); 4 1 行分のデータを格納するクラスの作成プログラミング編 p44 を参考に ただし 画像がある場合でも データベースに格納されているのはファイル名なので String にしておくのがおすすめ ビットマップ化は 表示のときに行う 5 アダプタの作成プログラミング編 p45 を参考に ただし 読み込むのはSDカードではなく データベースになります Adapter // コンストラクタ public DataListAdapter(Context c) { // レイアウトとデータを統合させるおまじない 8
9 layoutinflater = (LayoutInflater) c.getsystemservice(context.layout_inflater_service); // 袋をインスタンス化 list = new ArrayList<LineData>(); // ここからデータベースから情報を取得する DBHelper dbhelper = new DBHelper(c, "planet_db", null, 1); db = dbhelper.getwritabledatabase(); String sql = "select * from planet_table"; cursor = db.rawquery(sql, null); cursor.movetofirst(); while(cursor.movetonext()){ //DBから全部読む int id = cursor.getint(0); String name=cursor.getstring(1); String image=cursor.getstring(2); System.out.println(id + " " + name + " " + image); LineData one = new LineData(id, name, image); list.add(one); getview で画像のファイル名からビットマップに変換します そのために コンストラクタで Path を取得しておくとよいでしょう getcount でデータの個数を返してください プログラミング編 p46 参照 6 Activity で表示しますプログラミング編 p47 参照 9
10 リストをタップして 次の画面に進む リストをタップして 詳細情報を表示するようにします 1 リストにイベントをつけますプログラム編 p49 2 第 2 画面を設計します プログラム編 p51~ 3 第 2 画面をマニフェストに登録しますプログラム編 p55~ 4 Intent を使って第 2 画面を呼び出しますプログラム編 p55 5 第 2 画面から戻るボタンでメイン画面に戻りますプログラム編 p58 6 リスト中の選ばれたデータを第 2 画面に送りますここでは データベース 1 行分のデータをまるごと第 2 画面に送ります そのためには オブジェクトがシリアライズ化できなければなりません 文字や数値だけからなるデータはシリアライズ化できます public class LineData implements Serializable { private static final long serialversionuid = 1L; private int id; //ID private String name; // 名前 private String image; // 画像ファイル名 10
11 Activity public void onitemclick(adapterview<?> parent, View view, int position, long id) { // TODO Auto-generated method stub LineData data = adapter.getitem(position); Intent intent = new Intent(this, SecondActivity.class); intent.putextra("data", adapter.getitem(position)); startactivityforresult(intent, 1); 7 第 2 画面でデータをうけとり 表示します第 2Activity protected void oncreate(bundle savedinstancestate) { // TODO Auto-generated method stub super.oncreate(savedinstancestate); setcontentview(r.layout.second); subtext = (TextView) this.findviewbyid(r.id.textsub); subimage = (ImageView) this.findviewbyid(r.id.imagesub); Intent intent = this.getintent(); LineData data = (LineData) intent.getserializableextra("data"); subtext.settext(subtext.gettext() + data.getname()); File dir = Environment.getExternalStorageDirectory(); dir = new File(dir, "Pictures"); String path = dir.getabsolutepath(); Bitmap bitmap = BitmapFactory.decodeFile(path+"/"+ data.getimage()); subimage.setimagebitmap(bitmap); 第 2 画面で新たにデータベースを参照することもできます 11
12 main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" /> <ListView android:layout_height="match_parent" android:layout_width="match_parent" > </ListView> </LinearLayout> list_item.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" /> <ImageView android:layout_width="85dp" 12
13 android:layout_height="85dp" android:layout_gravity="center_vertical" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dp" android:text="test" android:textsize="16sp" /> </LinearLayout> DBHelper package jp.ac.neec.kmt.is04.takata; import android.content.context; import android.database.sqlite.sqlitedatabase; import android.database.sqlite.sqlitedatabase.cursorfactory; import android.database.sqlite.sqliteopenhelper; public class DBHelper extends SQLiteOpenHelper { public DBHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); // TODO Auto-generated constructor public void oncreate(sqlitedatabase db) { // TODO Auto-generated method stub String sql = "create table planet_table (" + "id integer primary key autoincrement," + "name text," + "image text" 13
14 + ")"; // テーブル作成 sql="insert into planet_table (name,image) values(' 水星 ','mercury.jpg')"; sql="insert into planet_table (name,image) values(' 金星 ','venus.jpg')"; sql="insert into planet_table (name,image) values(' 地球 ','earth.jpg')"; sql="insert into planet_table (name,image) values(' 火星 ','mars.jpg')"; sql="insert into planet_table (name,image) values(' 木星 ','jupiter.jpg')"; sql="insert into planet_table (name,image) values(' 土星 public void onupgrade(sqlitedatabase db, int oldversion, int newversion) { // TODO Auto-generated method stub LineData package jp.ac.neec.kmt.is04.takata; public class LineData implements Serializable { private static final long serialversionuid = 1L; private int id; //ID private String name; // 名前 private String image; // 画像ファイル名 // コンストラクタ public LineData(int id, String name, String image) { 14
15 this.id = id; this.name = name; this.image = image; // セッタ ゲッタ public int getid() { return id; public void setid(int id) { this.id = id; public String getname() { return name; public void setname(string name) { this.name = name; public String getimage() { return image; public void setimage(string image) { this.image = image; 15
16 DataListAdapter package jp.ac.neec.kmt.is04.takata; import java.io.file; import java.util.arraylist; import android.content.context; import android.database.cursor; import android.database.sqlite.sqlitedatabase; import android.graphics.bitmap; import android.graphics.bitmapfactory; import android.os.environment; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.baseadapter; import android.widget.imageview; import android.widget.textview; public class DataListAdapter extends BaseAdapter { private ArrayList<LineData> list; private LayoutInflater layoutinflater = null; private SQLiteDatabase db; private Cursor cursor = null; private String path; // コンストラクタ public DataListAdapter(Context c) { // レイアウトとデータを統合させるおまじない layoutinflater = (LayoutInflater) c.getsystemservice(context.layout_inflater_service); // 袋をインスタンス化 list = new ArrayList<LineData>(); // ここからデータベースから情報を取得する 16
17 DBHelper dbhelper = new DBHelper(c, "planet_db", null, 1); db = dbhelper.getwritabledatabase(); String sql = "select * from planet_table"; cursor = db.rawquery(sql, null); cursor.movetofirst(); while(cursor.movetonext()){ int id = cursor.getint(0); String name=cursor.getstring(1); String image=cursor.getstring(2); System.out.println(id + " " + name + " " + image); LineData one = new LineData(id, name, image); list.add(one); File dir = Environment.getExternalStorageDirectory(); dir = new File(dir, "Pictures"); path = dir.getabsolutepath(); System.out.println("path="+path); // public int getcount() { // TODO Auto-generated method stub return public Object getitem(int arg0) { // TODO Auto-generated method stub return null; 17
18 @Override public long getitemid(int arg0) { // TODO Auto-generated method stub return public View getview(int position, View convertview, ViewGroup parent) { // TODO Auto-generated method stub convertview = layoutinflater.inflate(r.layout.list_item, null); TextView idview = (TextView) convertview.findviewbyid(r.id.idarea); ImageView imageview = (ImageView) convertview.findviewbyid(r.id.imagearea); TextView nameview = (TextView)convertView.findViewById(R.id.nameArea); idview.settext("" + list.get(position).getid()); Bitmap bitmap = BitmapFactory.decodeFile(path+"/"+list.get(position).getImage()); imageview.setimagebitmap(bitmap); imageview.setscaletype(imageview.scaletype.center_crop); nameview.settext(list.get(position).getname()); System.out.println("name="+list.get(position).getName()); return convertview; public ArrayList<LineData> getlist(){ return list; 18
19 Activity package jp.ac.neec.kmt.is04.takata; import android.app.activity; import android.database.sqlite.sqlitedatabase; import android.os.bundle; import android.widget.listview; public class HelloDBListActivity extends Activity { /** Called when the activity is first created. public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); DataListAdapter adapter = new DataListAdapter(this); ListView listview = (ListView) this.findviewbyid(r.id.listmain); listview.setadapter(adapter); public void onitemclick(adapterview<?> parent, View view, int position, long id) { // TODO Auto-generated method stub LineData data = adapter.getitem(position); testtext.settext(data.getname()); Intent intent = new Intent(this, SecondActivity.class); intent.putextra("position", position); intent.putextra("data", adapter.getitem(position)); //intent.setaction(intent.action_view); startactivityforresult(intent, 1); 19
20 データベースの検索データベースは 必要なデータを必要なときに必要なだけ取り出せなければなりません そのための機能が検索です 検索して得られるのは 1 件だけとは限りません いろいろなケースを想定してアプリを設計しましょう 1 オープンヘルパーの作成テーブルを作成 初期データをインサートあらかじめコマンドを実行してSQL 文が正しいことを検証しておく public void oncreate(sqlitedatabase db) { // TODO Auto-generated method stub String sql = "create table town_table(" + "id integer primary key autoincrement," + "ken char(20) not null," + "town char(20)" +")"; // テーブル作成 sql = "insert into town_table (ken, town) values(' 東京 ', ' 蒲田 ')"; sql = "insert into town_table (ken, town) values(' 東京 ', ' 渋谷 ')"; sql = "insert into town_table (ken, town) values(' 東京 ', ' 新宿 ')"; 20
21 sql = "insert into town_table (ken, town) values(' 東京 ', ' 四谷 ')"; sql = "insert into town_table (ken, town) values(' 神奈川 ', ' 横浜 ')"; sql = "insert into town_table (ken, town) values(' 神奈川 ', ' 川崎 ')"; sql = "insert into town_table (ken, town) values(' 神奈川 ', ' 相模原 ')"; sql = "insert into town_table (ken, town) values(' 埼玉 ', ' 越谷 ')"; sql = "insert into town_table (ken, town) values(' 埼玉 ', ' 熊谷 ')"; sql = "insert into town_table (ken, town) values(' 千葉 ', ' 浦安 ')"; 2 ヘルパーの呼び出し Activity からヘルパーを呼び出して データベースを作成 DDMS でデータベースができていることを確認する data/data/< パッケージ名 >/< データベース名 > Activity public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); DBHelper dbhelper = new DBHelper(this, "town_db", null,1); db = dbhelper.getwritabledatabase(); // テスト TextView test1 = (TextView) this.findviewbyid(r.id.test_id); String sql = "select * from town_table"; Cursor cursor = db.rawquery(sql, null); test1.settext("" + cursor.getcount()); 21
22 3 データベース読み出しテストデータベースが入力されていることを確認するため 件数を調べて表示してみましょう TextView に ID をつけておきます public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); DBHelper dbhelper = new DBHelper(c, "town_db", null,1); db = dbhelper.getwritabledatabase(); String sql = "select * from town_table"; Cursor cursor = db.rawquery(sql, null); TextView textview = (TextView) this.findviewbyid(r.id.test_id); textview.settext("" + cursor.getcount()); 4 画面レイアウト検索を行うためのテキストエディタとボタン それに結果を表示するリストを作成しておきます main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id = "@+id/test_id" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <EditText 22
23 android:layout_height="wrap_content" android:layout_width="0dp" android:layout_weight="3" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onclick="onclickgo" /> </LinearLayout> <ListView android:layout_height="match_parent" android:layout_width="match_parent" > </ListView> </LinearLayout> リストの 1 行分の定義 list_item.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <TextView android:id="@+id/text_ken" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" /> <TextView android:id="@+id/text_town" android:layout_width="0dp" 23
24 android:layout_height="wrap_content" android:layout_weight="1" /> </LinearLayout> 5 データを受け取るクラスデータベースの 1 件分を受け取るクラスを作成 LineData.java 6 アダプタデータベースから読み込んでリストを作成 public DataListAdapter(Context c) { layoutflater = (LayoutInflater) c.getsystemservice(context.layout_inflater_service); list = new ArrayList<LineData>(); DBHelper dbhelper = new DBHelper(c, "town_db", null,1); db = dbhelper.getwritabledatabase(); String sql = "select * from town_table"; Cursor cursor = db.rawquery(sql, null); while(cursor.movetonext()){ int id = cursor.getint(0); String ken = cursor.getstring(1); String town = cursor.getstring(2); System.out.println(id + " " + ken + " " + town); LineData one = new LineData(id,ken, town); list.add(one); 24
25 7 ためしに全データ表示 Activity public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); DataListAdapter adapter = new DataListAdapter(this); ListView listview = (ListView) this.findviewbyid(r.id.result_id); listview.setadapter(adapter); 25
26 8 ボタンのイベントハンドラを記述 EditText からテキストを読み込んでおく これがキーワードになる Activity public void onclickgo(view view){ EditText ev = (EditText) this.findviewbyid(r.id.key_ed); String key = ev.gettext().tostring(); 9 アダプタにもう一つのコンストラクタ public DataListAdapter(Context c, String key) { layoutflater = (LayoutInflater) c.getsystemservice(context.layout_inflater_service); list = new ArrayList<LineData>(); DBHelper dbhelper = new DBHelper(c, "town_db", null,1); db = dbhelper.getwritabledatabase(); String sql = "select * from town_table where ken='" + key + "'"; Cursor cursor = db.rawquery(sql, null); while(cursor.movetonext()){ int id = cursor.getint(0); String ken = cursor.getstring(1); String town = cursor.getstring(2); System.out.println(id + " " + ken + " " + town); LineData one = new LineData(id,ken, town); list.add(one); 10 アダプタの呼び出し Activity public void onclickgo(view view){ EditText ev = (EditText) this.findviewbyid(r.id.key_ed); String key = ev.gettext().tostring(); DataListAdapter adapter = new DataListAdapter(this, key); ListView listview = (ListView) this.findviewbyid(r.id.result_id); listview.setadapter(adapter); 26
27 データベースの登録 データベースにデータを新規に登録します 1 まず 入力画面を作ります main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/test_tx" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <EditText android:id="@+id/ken_ed" 27
28 android:layout_height="wrap_content" android:layout_width="0dp" android:layout_weight="1" /> <EditText android:layout_height="wrap_content" android:layout_width="0dp" android:layout_weight="1" /> <Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:onclick="onclickreg" /> </LinearLayout> </LinearLayout> 2 データベースヘルパーを作りますすでにできているデータベースを使うときは どうせ oncreate は動かないので 何も書かなくてOK 3 データベースと連結します public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); DBHelper dbhelper = new DBHelper(this, "town_db", null, 1); db = dbhelper.getwritabledatabase(); 28
29 4 ボタンのイベント Activity public void OnClickReg(View view){ EditText kenarea = (EditText) this.findviewbyid(r.id.ken_ed); EditText townarea = (EditText) this.findviewbyid(r.id.town_ed); String ken = kenarea.gettext().tostring(); String town = townarea.gettext().tostring(); String sql = "insert into town_table (ken, town) values('" + ken + "','" + town + "')"; System.out.println(sql); // SQL を発行するまえに 正しいかどうか チェックしてください sql 文が log に表示されるので これを選んでファイルに保存するファイルを開いて コマンドプロンプトで実行してみる sqlite> insert into town_table (ken, town) values(' 東京 ',' 銀座 '); sqlite> select * from town_table; 1 東京 蒲田 2 東京 渋谷 3 東京 新宿 4 東京 四谷 5 神奈川 横浜 6 神奈川 川崎 7 神奈川 相模原 8 埼玉 越谷 9 埼玉 熊谷 10 千葉 浦安 11 東京 銀座 sqlite> 挿入されることを確認してから コメント文をはずして実行する 検索用アプリで確認する 29
30 銀座が追加されており 成功した 30
31 リストから個別へ リスト表示から 1 つ選んで個別詳細データを表示します セカンドアクティビティ側で あらためてデータベースを読み直します ID を指定して読み込みができるようにアダプタのコンストラクタを追加 // コンストラクタ public DataListAdapter(Context c) { String sql = "select * from planet_table"; dataset(c, sql); public DataListAdapter(Context c,int id) { String sql = "select * from planet_table where id="+id; dataset(c, sql); public void dataset(context c, String sql){ // レイアウトとデータを統合させるおまじない layoutinflater = (LayoutInflater) c.getsystemservice(context.layout_inflater_service); // 袋をインスタンス化 list = new ArrayList<LineData>(); // ここからデータベースから情報を取得する DBHelper dbhelper = new DBHelper(c, "planet_db", null, 1); 31
32 db = dbhelper.getwritabledatabase(); cursor = db.rawquery(sql, null); //cursor.movetofirst(); while(cursor.movetonext()){ int id = cursor.getint(0); String name=cursor.getstring(1); String image=cursor.getstring(2); System.out.println(id + " " + name + " " + image); LineData one = new LineData(id, name, image); list.add(one); File dir = Environment.getExternalStorageDirectory(); dir = new File(dir, "Pictures"); path = dir.getabsolutepath(); System.out.println("path="+path); セカンドアクティビティでアダプタを作り直して表示 protected void oncreate(bundle savedinstancestate) { // TODO Auto-generated method stub super.oncreate(savedinstancestate); setcontentview(r.layout.second); subtext = (TextView) this.findviewbyid(r.id.textsub); subimage = (ImageView) this.findviewbyid(r.id.imagesub); Intent intent = this.getintent(); int id = intent.getintextra("id", 0); subtext.settext("" + id); adapter = new DataListAdapter(this, id); int size = adapter.getcount(); LineData data = adapter.getitem(0); 32
33 subtext.settext(subtext.gettext() + data.getname()); dir = new File(dir, "Pictures"); String path = dir.getabsolutepath(); Bitmap bitmap = BitmapFactory.decodeFile(path+"/"+ data.getimage()); subimage.setimagebitmap(bitmap); 詳しい説明をファイルから読んでみよう ( とりあえずファイル固定 ) セカンドアクティビティ File dir = Environment.getExternalStorageDirectory(); String description = readfromfile("earth.txt"); TextView desarea = (TextView) this.findviewbyid(r.id.desriptionsub); desarea.settext(description); private String readfromfile(string filename){ String readstring = ""; String SDFile = android.os.environment.getexternalstoragedirectory().getpath() + "/Text/earth.txt"; File file = new File(SDFile); try{ FileInputStream fis = new FileInputStream(file); InputStreamReader isr = new InputStreamReader(fis,"UTF-8"); BufferedReader br= new BufferedReader(isr); String s; while ((s = br.readline() )!= null){ readstring = readstring+s+" r n"; br.close(); isr.close(); fis.close(); catch(filenotfoundexception e){ e.printstacktrace(); 33
34 catch(unsupportedencodingexception e){ e.printstacktrace(); catch (IOException e) { e.printstacktrace(); return readstring; 34
35 CSV からデータベースに読み込み Excel で作成したデータを CSV で書き出して それを使ってデータベースに読み込みを行うと データベースのデータ作成が楽にできます Helper を作成します データベースがまだない場合には public void oncreate(sqlitedatabase db) { // TODO Auto-generated method stub ここでデータベースをCreateする Activity public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); // データベースに接続する DBHelper dbhelper = new DBHelper(this, "town_db", null,1); db = dbhelper.getwritabledatabase(); // ファイルに接続する String readstring=""; String SDFile = Environment.getExternalStorageDirectory().getPath() + "/Text/city.csv"; File file = new File(SDFile); try { // ストリームを確立する FileInputStream fis = new FileInputStream(file); InputStreamReader isr = new InputStreamReader(fis,"UTF-8"); BufferedReader br= new BufferedReader(isr); String s; while ((s = br.readline() )!= null){ //1 行分の処理 String[] part = s.split(","); //, で分割する 35
36 //insert 文を組み立てる String sql = "insert into town_table (ken, town) values('"+part[0]+"', '"+part[1]+"')"; System.out.println(sql); readstring += sql + " r n"; //sql = "select * from town_table"; //db.rawquery(sql, null); br.close(); isr.close(); fis.close(); catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printstacktrace(); catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printstacktrace(); catch (IOException e) { // TODO Auto-generated catch block e.printstacktrace(); // 確認用にSQLを表示 TextView tv = (TextView) this.findviewbyid(r.id.text_id); tv.settext(readstring); 36
37 ファイル名を入力するエディットテキストを用意し データ取り込みボタンでデータベースに追加するアプリなども考えられます 37
38 正規表現 入力データに制限をかけ 不正なデータがデータベースに登録されないようにしましょうそういうときには 文字列のマッチングを調べる正規表現が便利です あいう 通常の文字リテラル. 任意の 1 文字 [ あいう ] ここに含まれる任意の 1 文字 [^あいう] ここに含まれる任意の 1 文字以外 ^あ 先頭の文字を指定 あ $ 最後の文字を指定 あ? 0 回または 1 回 あ + 1 回以上の繰り返し あ * 0 回以上の繰り返し あ {n, m n 回以上 m 回以下の繰り返し あ {n, n 回以上の繰り返し あ {n n 回の繰り返し ( あ い ) 選択どちらでもよい { グループ ( 繰り返しの単位指定 ) プログラム例 AlertDialog.Builder dlg; dlg = new AlertDialog.Builder(this); dlg.settitle("test"); dlg.setpositivebutton(" 閉じる ", null); EditText et = (EditText) this.findviewbyid(r.id.input_et); Pattern pattern = Pattern.compile("^あ.*$"); Matcher matcher = pattern.matcher(et.gettext()); if(matcher.matches()){ dlg.setmessage("ok"); System.out.println("OK"); else{ dlg.setmessage("ng"); System.out.println("NG"); dlg.show(); 38
39 アプリケーション作品制作について 設計項目 1. 画面遷移図 2. データベース仕様書 フィールド名 内容 型 備考 ( 内容説明と属性 primary key など ) id 主キー Integer primary Key autoincrement 3. 画像やテキストファイルがある場合には 保存場所 ( フォルダ階層 ) 4. データベースと画面との関係 39
日 力力 生 行行 入 入 力力 生 用 方
日 力力 生 行行 入 入 力力 生 用 方 力力 生 行行 自 行行 生 力力 生 一 二 力力 生 力力 力力 方 ファイル書き込み Androidプロジェクトの 生成 新規Androidプロジェクトを下記の設定値で作成 項 目名 設定値 プロジェクト名 Sample9 ビルドターゲット Android 2.2にチェックを付 ける アプリケーション名 Sample9 パッケージ名 jp.ac.uot
Microsoft Word - Android_SQLite講座_画面800×1280
Page 5 5 アクティビティ ( 一覧 ) を作成する ファイル名 : src/jp/edu/mie/view010.java ( 新規作成 ) /* * View010 */ import android.app.activity; import android.content.intent; import android.os.bundle; import android.view.view;
非推奨メソッド等の掲載について
非推奨メソッド等の掲載について スマートにプログラミング Android 入門編第 2 版 SDK 4/2.3 対応 (2012 年 6 月 11 日発行第 2 版第 1 刷 ) において 一部現在では非推奨となったレイアウト及びメソッドの利用が掲載されておりました お詫びと共に補足 訂正させて頂きます 下記にその対応について示します 株式会社リックテレコム書籍出版部 ( 情報更新日 :2012.8.14)
1: Preference Display 1 package sample. pref ; 2 3 import android. app. Activity ; 4 import android. content. Intent ; 5 import android. content. Shar
Android 2 1 (Activity) (layout strings.xml) XML Activity (Intent manifest) Android Eclipse XML Preference, DataBase, File 3 2 Preference Preference Preference URL:[http://www.aichi-pu.ac.jp/ist/lab/yamamoto/android/android-tutorial/tutorial02/tutorial02.pdf]
Microsoft Word - _Intent.doc
public class Intent extends Object implements Parcelable Cloneable 英和 : 意図, 目的 intent が 意図 目的 を意味するように Android ではアプリ ( アクティビティ ) が何をしたいかという 意図 目的 のリクエスト メッセージをシステムに送ると, システムがそれを解釈 判断し, 適切なアクティビティへ渡す仕組みが備わっている
2-2. TableLayout TableLayout は任意のビューを表形式で配置したい場合に利用する (HTML の Table に近いイメー ジ ) 2-3. FrameLayout ビューを重ねて表示するためのレイアウト 後から配置した部品が前面に来る仕様となっている 3. まとめ レイア
1. レイアウトの基本 Android でレイアウトを作成する方法には XML で定義する方法 と プログラム上から作成する方法 の 2 つがある XML で定義する方が読みやすく変更も容易なので 基本的には XML でレイアウトを作成し 動的にレイアウトを変更したい場合にプログラムで記述するのが一般的である 2. レイアウトの種類 ビューを配置するベースとなるレイアウトについて説明する ここで紹介するレイアウト以外にも
mazec テクニカルガイド第5版(Android版)
法人向け mazec テクニカルガイド 外部アプリケーション連携 ( Android 版 ) 第 6 版 Android は Google Inc. の登録商標です その他記載された会社名 製品名等は 各社の登録商標もしくは商標 または弊社の商標です 本書は株式会社 MetaMoJi が作成したものであり マニュアルの著作権は 株式会社 MetaMoJi に帰属します 本書の内容は予告なく変更することがあります
データベースからデータの 読 み 込 み Cursorクラス
アンドロイドのデータベースについて SQlite データベースからデータの 読 み 込 み Cursorクラス Cursorでデータをとってきます // 注 意 定 数 でDatabaseクラスの 中 にあるとします public static final String ID = " id"; public static final String NAME = "_name"; // 例 えばこんなデータベースがあるとして(SQLiteOpenHelperクラスを
オブジェクト指向プログラミング・同演習 5月21日演習課題
オブジェクト指向プログラミング 同演習 5 月 21 日演習課題 問題 1 配列の例外処理例外が発生する可能性のある処理を try で囲み その後に catch で例外を捕捉します 例外処理の終了処理として finally が行われます これは書かなくて自動的に行われます 提出課題 1 (Kadai052301.java) 以下のプログラムは例外処理をしていない ArrayIndexOutOfBoundsException
文字列操作と正規表現
文字列操作と正規表現 オブジェクト指向プログラミング特論 2018 年度只木進一 : 工学系研究科 2 文字列と文字列クラス 0 個以上の長さの文字の列 Java では String クラス 操作 文字列を作る 連結する 文字列中に文字列を探す 文字列中の文字列を置き換える 部分文字列を得る 3 String クラス 文字列を保持するクラス 文字列は定数であることに注意 比較に注意 == : オブジェクトとしての同等性
「Android Studioではじめる 簡単Androidアプリ開発」正誤表
Android Studio Android 2016/04/19 Android Studio Android *1 Android Studio Android Studio Android Studio Android Studio Android PDF : Android Studio Android Android Studio Android *2 c R TM *1 Android
補足資料 キーイベント処理サンプル package jp.co.keyevent; import android.app.activity; import android.os.bundle; import android.view.keyevent; import android.widget.t
補足資料 キーイベント処理サンプル package jp.co.keyevent; import android.app.activity; import android.os.bundle; import android.view.keyevent; import android.widget.toast; public class KeyEventSampleActivity extends Activity
intra-mart Accel Platform — イベントナビゲータ 開発ガイド 初版
Copyright 2013 NTT DATA INTRAMART CORPORATION 1 Top 目次 intra-mart Accel Platform イベントナビゲータ開発ガイド初版 2013-07-01 改訂情報概要イベントフローの作成 更新 削除をハンドリングするイベントフローを非表示にする回答を非表示にするリンクを非表示にするタイトル コメントを動的に変更するリンク情報を動的に変更するナビゲート結果のリンクにステータスを表示する
PowerPoint Presentation
Webデザイン特別プログラムデータベース実習編 3 MySQL 演習, phpmyadmin 静岡理工科大学総合情報学部幸谷智紀 http://na-inet.jp/ RDB の基礎の基礎 RDB(Relational DataBase) はデータを集合として扱う データの取り扱いはテーブル (= 集合 ) の演算 ( 和集合, 積集合 ) と同じ データベースには複数のテーブルを作ることができる
Javaプログラムの実行手順
戻り値のあるメソッド メソッドには 処理に使用する値を引数として渡すことができました 呼び出し 側からメソッドに値を渡すだけでなく 逆にメソッドで処理を行った結果の値を 呼び出し側で受け取ることもできます メソッドから戻してもらう値のことを もどりち戻り値といいます ( 図 5-4) 図 5-4. 戻り値を返すメソッドのイメージ 戻り値を受け取ることによって ある計算を行った結果や 処理に成功したか失
Brekeke PBX - Version 2.1 ARSプラグイン開発ガイド
Brekeke PBX Version 2.1 ARS プラグイン開発ガイド Brekeke Software, Inc. バージョン Brekeke PBX v2.1 ARS プラグイン開発ガイド, 2008 年 2 月 著作権本書の著作権は Brekeke Software, Inc. にあります Copyright 2003-2008 Brekeke Software, Inc. 本書の一部または全部を
1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String
目次 1.SqlCtl クラスリファレンス 2 (1)Connect() メソッド 2 (2)DisConnect() メソッド 3 (3)Commit() メソッド 3 (4)Rollback() メソッド 4 2.SqlStm クラスリファレンス 5 (1)Prepare() メソッド 5 (2)Execute() メソッド 6 (3)Release() メソッド 6 (4)Immediate()
Android Layout SDK プログラミング マニュアル
プログラミングマニュアル Version 1.3.0 用 更新履歴 年月日 バージョン 履歴 2014.09.08 1.2.0.0 新規 (Layout Utilities ユーザーズ ガイド ) 2016.08.16 1.3.0.0 モバイル端末用レイアウトで直線部品と矩形部品に対応 モバイル端末用レイアウトファイルを CLFX から XML へ変更 Layout Print Engine から
Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac
Actual4Test http://www.actual4test.com Actual4test - actual test exam dumps-pass for IT exams Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN
第1章 ビジュアルプログラミング入門
付録 A 既存のクラスの利用の仕方 第 7 章では フレームクラス (NewJFrame.java) とそこから呼び出されるクラス (Meibo.java など ) を同じプロジェクト内 つまり同じパッケージ内に定義しました しかし 一般には 別のパッケージ ( フォルダ ) に保管されているクラスを利用する場合があります ここでは その方法を説明します なお フォルダは Java の用語ではパッケージに対応するので
プログラミング基礎I(再)
山元進 クラスとは クラスの宣言 オブジェクトの作成 クラスのメンバー フィールド 変数 配列 メソッド メソッドとは メソッドの引数 戻り値 変数の型を拡張したもの 例えば車のデータベース 車のメーカー 車種 登録番号などのデータ データベースの操作 ( 新規データのボタンなど ) プログラムで使う部品の仕様書 そのクラスのオブジェクトを作ると初めて部品になる 継承 などの仕組みにより カスタマイズが安全
Prog2_6th
2017 年 11 月 2 日 ( 木 ) 実施 インテントインテントとは Android アプリは複数のアクティビティを持つことが出来, また, アクティビティ以外の要素も持つので, 複数のアクティビティ間, アクティビティとアクティビティ以外の要素との間といったオブジェクト間を結び付ける仕組みが必要となる その役割を担うのがインテントで, 複数のアプリ間やアプリとシステムとの間もインテントで結び付けることが出来る
2
プログラミング応用演習 b 10 月 5 日演習課題 2016/10/05 PAb 演習課題 プログラム仕様書作成課題 課題クラスを読み 次に示すクラスの仕様書を完成させよ なお 仕様書は クラス 1 つに付き 1 つ作成す る 加えて 図 1 のようなクラス継承の模式図を作成せよ < クラス名 のプログラム仕様書 > 作成者 : 学籍番号 名前 (1) クラスクラス名 : クラス名 説明 : クラスが何を表現しているか
JavaプログラミングⅠ
Java プログラミング Ⅰ 12 回目クラス 今日の講義で学ぶ内容 クラスとは クラスの宣言と利用 クラスの応用 クラス クラスとは 異なる複数の型の変数を内部にもつ型です 直観的に表現すると int 型や double 型は 1 1 つの値を管理できます int 型の変数 配列型は 2 5 8 6 3 7 同じ型の複数の変数を管理できます 配列型の変数 ( 配列変数 ) クラスは double
目 次 Java GUI 3 1 概要 クラス構成 ソースコード例 課題...7 i
Java GUI 3 Java GUI 3 - サンプルプログラム (1) - 2011-09-25 Version 1.00 K. Yanai 目 次 Java GUI 3 1 概要...1 2 クラス構成...2 3 ソースコード例...3 4 課題...7 i 1 概要まずは簡単なサンプルプログラムをみながら Java GUI の基本的なことを学びましょう 本サンプルは 図に示すようなひとつのメイン画面を使用します
PowerPoint Presentation
上級プログラミング 2( 第 5 回 ) 工学部情報工学科 木村昌臣 今日のテーマ データベース入門 データベースシステムの用意の仕方 データベースを作ってみる データベースを使ってみる データベースプログラミング JDBCを使った検索プログラム JDBCを使った更新プログラム データベース入門 今回の説明は Windows 環境を前提としているため Linux など他のプラットフォーム上で作業を行う場合は
データの作成方法のイメージ ( キーワードで結合の場合 ) 地図太郎 キーワードの値は文字列です キーワードの値は重複しないようにします 同じ値にする Excel データ (CSV) 注意キーワードの値は文字列です キーワードの値は重複しないようにします 1 ツールバーの 編集レイヤの選択 から 編
手順 4 Excel データを活用する ( リスト / グラフ 色分け ) 外部の表データ (CSV 形式 ) を読み込み リスト表示やカード表示 その値によって簡単なグラフ ( 円 正方形 棒の 3 種類 ) や色分け表示することができます この機能を使って地図太郎の属性情報に無い項目も Excel で作成し CSV 形式で保存することにより 自由に作成することができます (Excel でデータを保存するとき
intra-mart Accel Platform — イベントナビゲータ 開発ガイド 初版 None
クイック検索検索 目次 Copyright 2013 NTT DATA INTRAMART CORPORATION 1 Top 目次 intra-mart Accel Platform イベントナビゲータ開発ガイド初版 2013-07-01 None 改訂情報概要イベントフローの作成 更新 削除をハンドリングするイベントフローを非表示にする回答を非表示にするリンクを非表示にするタイトル コメントを動的に変更するリンク情報を動的に変更するナビゲート結果のリンクにステータスを表示する
Microsoft Word - tutorial3-dbreverse.docx
株式会社チェンジビジョン使用バージョン :astah* 6.0, 6.1 [ ] サンプル サポート対象外 目次 DB リバースを使ってみよう ( サンプル サポート対象外 ) 2 ご利用の前に 2 予備知識 2 データベースの環境設定をしてみよう 2 astah* データベースリバースコンポーネントを使用してみよう 5 作成した asta ファイルを astah* professional で開いてみよう
前ページからの続き // テキストボックス02 id 属性で取得 // id 属性で取得する場合は一意に決まるので 何番目かの指定は不要 var textbox02elem = document.getelementbyid("text_box02_id"); if ("001" == statee
全体のヒント 1. テキストボックスの制御 1.1. 日付入力日付の入力ボックスは フォーカスが入った時にスラッショを消し フォーカスが他の項目等に移るとスラッシュが加わるようにする オンフォーカス 20100101 オフフォーカス 2010/01/01 1.1.1 オンフォーカス時にスラッシュを消す入力項目のスラッシュを消すには include/function.js ファイル内の var delslash
スライド 1
WindowsForm サンプル解説 S2Container.NET, S2Dao.NET コミッタ 藤井宏明 1 S2Container.NET の Examples フォルダに付属する WindowsSample の解説です 概要 アプリケーション アーキテクチャー ソリューション構成 プロジェクト概要 サンプル説明 2 Ⅰ. アプリケーション アーキテクチャー 3 アプリケーション アーキテクチャー
About me! 足立昌彦 / +Masahiko.Adachi )! バイドゥ株式会社技術顧問 (Simeji)! 株式会社カブク Co-Founder! Google Developer Expert (Android)
Discover Support Library Masahiko Adachi @adamrokcer / +Masahiko.Adachi 28 th Sep, 2013 About me! 足立昌彦 ( @adamrocker / +Masahiko.Adachi )! バイドゥ株式会社技術顧問 (Simeji)! 株式会社カブク Co-Founder! Google Developer Expert
PowerPoint Presentation
ソフトウェア演習 B GUI を持つ Java プログラムの 設計と実装 4.1 例題 :GUI を持った電卓を作ろう プロジェクトCalculator パッケージ名 :example ソースファイル : Calculator.java GUI.java EventProcessor.java 2 4.2 GUI とイベント処理 GUI の構成 :Swing GUI の場合 フレーム JFrame:
import android.database.sqlite.sqlitedatabase.cursorfactory; public class DatabaseHelper extends SQLiteOpenHelper { /* データベース名 */ private final static
Android データベース処理の便利 ( ヘルパー ) クラスの利用 SQLiteOpenHelper クラス 必ずしもこのヘルパークラスは利用する必要はないのですが 利用すると以下のような利 点があります このクラスを使うと発生する3つの利点 ) 1 指定したデータベースファイルが存在していないときは自動的にファイル生成を行う事ができる 2 DB オープン時 もしテーブルが存在していないときは自動的にテーブル生成を行う事ができる
JAVA入門
JAVA 入門後期 10 情報処理試験例題解説 H14 年度秋問 8 次の Java プログラムの説明及びプログラムを読んで, 設問に答えよ プログラムの説明 ディジタル論理回路シミュレータを作成するためのクラスとテスト用クラスである (1) ゲートを表す抽象クラス Gate のサブクラスとして, NOT ゲートを表すクラス NotGate 及び AND ゲートを表すクラス AndGate を定義する
PowerPoint プレゼンテーション
オブジェクト指向 プログラミング演習 第 4 回継承 オーバーライド ポリモルフィズム 今日のお題 継承 オーバーライド ポリモルフィズム 継承 (inherit) あるクラス c のサブクラス s を定義する : このとき s は c を継承していると言う 何かの下位概念を表すクラスは その上位概念を表すクラスの属性や機能を ( 基本的には ) 使える 継承の例 大学生 長崎県立大学の学生 大学生を継承する概念
メソッドのまとめ
メソッド (4) 擬似コードテスト技法 http://java.cis.k.hosei.ac.jp/ 授業の前に自己点検以下のことがらを友達に説明できますか? メソッドの宣言とは 起動とは何ですか メソッドの宣言はどのように書きますか メソッドの宣言はどこに置きますか メソッドの起動はどのようにしますか メソッドの仮引数 実引数 戻り値とは何ですか メソッドの起動にあたって実引数はどのようにして仮引数に渡されますか
Java (9) 1 Lesson Java System.out.println() 1 Java API 1 Java Java 1
Java (9) 1 Lesson 7 2008-05-20 Java System.out.println() 1 Java API 1 Java Java 1 GUI 2 Java 3 1.1 5 3 1.0 10.0, 1.0, 0.5 5.0, 3.0, 0.3 4.0, 1.0, 0.6 1 2 4 3, ( 2 3 2 1.2 Java (stream) 4 1 a 5 (End of
Microsoft PowerPoint - chap10_OOP.ppt
プログラミング講義 Chapter 10: オブジェクト指向プログラミング (Object-Oriented Programming=OOP) の入り口の入り口の入り口 秋山英三 F1027 1 例 : 部屋のデータを扱う // Test.java の内容 public class Test { public static void main(string[] args) { double length1,
データアダプタ概要
データベース TableAdapter クエリを実行する方法 TableAdapter クエリは アプリケーションがデータベースに対して実行出来る SQL ステートメントやストアドプロシージャで TableAdapter で型指定されたメソッドと仕て公開される TableAdapter クエリは 所有るオブジェクトのメソッドと同様に 関連付けられたメソッドを呼び出す事に依り実行出来る TableAdapter
