2012年04月12日

SQLiteデータベース変更のサンプルプログラム


SQLiteデータベースでデータベースを作成・追加・変更・消去の
サンプルプログラムです
データベースにデータを書き込む
データベースの内容の確認は以下を参照してください
SQLiteのデータベースの保存場所
データベースの確認方法

まずはレイアウトのmain.xmlにボタンを3つ配置します
それぞれinsert用、update用、delete用です
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent"
	android:orientation="vertical" >

    <Button
    	android:id="@+id/button1"
    	android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:text="insert" />

    <Button
    	android:id="@+id/button2"
    	android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:text="update" />

    <Button
    	android:id="@+id/button3"
    	android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:text="delete" />
    
</LinearLayout>

次にDatabaseHelper.javaを少々変更します
テーブル内容はNo・Name・Tel・Ageと変わりませんが初期値を入力します
初期値もSQLコマンドで入力します
package blog.test;

import android.content.Context;  
import android.database.sqlite.SQLiteDatabase;  
import android.database.sqlite.SQLiteOpenHelper;  
  
  
public class DatabaseHelper extends SQLiteOpenHelper {  
   
    // データベース名   
    private final static String DB_NAME = "blog_testdb";  
    // データベースのバージョン   
    private final static int DB_VER = 1;  
   
    //コンストラクタ  
    public DatabaseHelper(Context context) {  
        super(context, DB_NAME, null, DB_VER);  
    }  
  
    //onCreateメソッド 
    //データベースが作成された時に呼ばれます。
    @Override  
    public void onCreate(SQLiteDatabase db) {  
        String sql = "";  
        sql += "create table MyTable (";  
        sql += " No integer primary key autoincrement";  
        sql += ",Name text not null";  
        sql += ",Tel text";  
        sql += ",Age integer";  
        sql += ")";  
        db.execSQL(sql);  
        
        //初期テーブル作成
        db.execSQL("insert into MyTable(Name,Tel,age) values" +
        		" ('山田',110 ,20);");
        db.execSQL("insert into MyTable(Name,Tel,age) values " +
        		"('田中',119 ,25);");
        db.execSQL("insert into MyTable(Name,Tel,age) values" +
        		" ('佐藤',117, 30);");
    	
    }  
  
    

    /* 
     * onUpgradeメソッド 
     * onUpgrade()メソッドはデータベースをバージョンアップした時に呼ばれる
     */  
    @Override  
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
    
    }  
  
}  

最後ににMainActivity.javaを変更します
やることとしては
・それぞれのボタンにsetOnClickListenerを持たせ押したときのイベントを取得する
・Insert Update deleteをボタンに割り振る
・更新の成否を判定する
の3つです
package blog.test;
 
import android.app.Activity;
import android.content.ContentValues;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
 
public class MainActivity extends Activity implements OnClickListener {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
		        super.onCreate(savedInstanceState);
		setTitle("MainActivity");
		setContentView(R.layout.main);
		
		//データベースヘルパーのインスタンスを作成する(まだデータベースはできない)  
		DatabaseHelper dbHelper = new DatabaseHelper(this);  
		//データベースオブジェクトを取得する(データベースにアクセスすると作成される。)  
		SQLiteDatabase db = dbHelper.getWritableDatabase();   
		//データベースを閉じる  
		db.close();  
		
		
		/**それぞれのidを設定**/
		Button button1=(Button)findViewById(R.id.button1);
		Button button2=(Button)findViewById(R.id.button2);
		Button button3=(Button)findViewById(R.id.button3);
		/**ボタンが押されたらonClickが動作するよう設定**/
		button1.setOnClickListener(this);
		button2.setOnClickListener(this);
		button3.setOnClickListener(this);
		
	
    }
    
    
    /**ボタンが押された時の処理**/
	public void onClick(View v){
		//ContentValuesを作成して変更するデータを各ボタンで記入する
		ContentValues values = new ContentValues();
		DatabaseHelper dbHelper = new DatabaseHelper(this);
		//データベースを書き込み可能にする
		SQLiteDatabase db = dbHelper.getWritableDatabase();  
		long ret;
		switch(v.getId()){
		case R.id.button1://insertボタン
			values.put("Name", "高橋");  
			values.put("Tel", "999");  
			values.put("Age", 40);  
			try {ret = db.insert("MyTable", null, values);}
			finally {db.close();}//データベースを閉じる
			if (ret == -1) {//insert失敗だとretに-1が返される
				Toast.makeText(this, "Insert失敗", Toast.LENGTH_SHORT).show();  
			} else {   
			    Toast.makeText(this, "Insert成功", Toast.LENGTH_SHORT).show();  
			}  
		      break;
		case R.id.button2://updateボタン
			values.put("Age",50);//Ageを50に変更する
			String whereClause = "No = ?";//検索条件にNoを指定
			String whereArgs[] = new String[1];  
			whereArgs[0] = "1";//Noが1のものをアップデート
			try {ret = db.update("MyTable", values, whereClause, whereArgs);}
			finally {db.close(); }  
			if (ret == -1){  //update失敗だとretに-1が返される
			    Toast.makeText(this, "Update失敗", Toast.LENGTH_SHORT).show();  
			} else {   
			    Toast.makeText(this, "Update成功", Toast.LENGTH_SHORT).show();  
			}  
              break;
          case R.id.button3://deleteボタン
			String whereClause2 = "No = ?"; //検索条件にNoを指定
			String whereArgs2[] = new String[1];  
			whereArgs2[0] = "2";//Noが2のものをDelete
			try {ret = db.delete("MyTable", whereClause2, whereArgs2);}
			finally {db.close(); }  
			if (ret == -1){  //delete失敗だとretに-1が返される
			    Toast.makeText(this, "Delete失敗", Toast.LENGTH_SHORT).show();  
			} else {   
			    Toast.makeText(this, "Delete成功", Toast.LENGTH_SHORT).show();  
			}  
			break;
        }
    }
}

retに戻り値を入力してやり-1だったら更新失敗としています

では実際のデータベースがどのように変化したか見てみます
今回はFirefoxのSQLite Manegerを使用して内容を確認しています

まずは初期値のみのデータベースです
device83.png

次にinsertを押したときのデータベースです
device84.png
No4に高橋が追加してあるのがわかります

次にUpdeteを押したときのデータベースです
device85.png
Noが1の“山田”の“Age”が50にアップデートされているのがわかります

最後にDeleteを押したときのデータベースです
device86.png
Noが2の“田中”がデータベース上から消えているのがわかります

スポンサードリンク

posted by kenken at 11:45 | Comment(0) | TrackBack(0) | データベース SQLite | このブログの読者になる | 更新情報をチェックする
2012年04月11日

SQLiteのデータベースの保存場所


AndroidエミュレーターでのSQLiteのデータベースは同じようにEclipse内で確認できます
まずはEclipseからエミュレーターを起動させます
エミュレータの起動
次に右上のアイコン(もしくはウィンドウ→パースペクティブを開く)からDDMSを選択します
すると左上のDeviceに現在起動されているエミュレーターが表示されると思います
device79.png

データベースを確認したいエミュレーターを選択すると右側のファイルエクスプローラーに
フォルダ一覧が表示されます
device80.png

その中の“data”→“data”にアプリケーションのデータ一覧が入ってます
今回はblog.testというアプリケーションなので選択するとその中に“databases”というフォルダがあります
その中に作成したデータベースが入っています
device81.png

今回はblog_test.dbというファイルです
データベースの出力の方法は右上のフロッピー型のアイコンをクリックしてください
device82.png

これにより任意の場所にdbファイルを保存することができます


スポンサードリンク

posted by kenken at 16:35 | Comment(0) | TrackBack(0) | データベース SQLite | このブログの読者になる | 更新情報をチェックする
2012年04月09日

データベースにデータを書き込む


前回はデータベースを作成するところまで行いました
SQLiteデータベースを作成するで作成する
今回は作成したデータベースの行の挿入・更新・削除をおこないます

行の挿入-insert-
テーブルの行にデータを挿入するにはinsertメソッドを使います
insertメソッドを使うにはContentValuesオブジェクトに挿入するデータをセットします
  long insert(String table, String nullColumnHack, ContentValues values)  
longの戻り値には正常に挿入でき場合RowIDが戻り失敗した場合は-1が戻ります
table:テーブル名を指定
nullColumnHack:データを挿入する際、Null値が許されない列に値が指定されていない場合
代わりに利用される値を指定
values登録レコード列名と値を入力したContentValuesを指定

行の更新-update-
行を更新するにはupdateメソッドを使用します
int update(String table, ContentValues values,
 String whereClause, String[] whereArgs) 
intの戻り値はinsertと同様に正常に更新できた場合が
更新したレコード数が戻り、失敗した場合は-1が戻ります
table:テーブル名を指定
values:登録レコード列名と値を入力したContentValuesを指定
whereClause:更新対象を検索するための条件を指定します
 値をnullに指定するとすべての行が更新対象になります
whereArgs:whereClauseにパラメータ(?で指定)が含まれる場合に
 パラメータ値をString配列で指定します
 不要な場合はnullを指定します

行の削除-delete-
行を更新するにはdeleteメソッドを使用します
int delete(String table, String whereClause, String[] whereArgs) 
intの戻り値はinsertと同様に正常に削除できた場合が
削除したレコード数が戻り、失敗した場合は-1が戻ります
table:テーブル名を指定
whereClause:更新対象を検索するための条件を指定します
 値をnullに指定するとすべての行が更新対象になります
whereArgs:whereClauseにパラメータ(?で指定)が含まれる場合に
 パラメータ値をString配列で指定します
 不要な場合はnullを指定します


データベースの内容を確認するには
データベースに書き込むサンプルコード
スポンサードリンク

posted by kenken at 11:45 | Comment(0) | TrackBack(0) | データベース SQLite | このブログの読者になる | 更新情報をチェックする
2012年04月05日

SQLiteデータベースを作成する


Androidアプリケーションでデータの保存や呼び出しを使いたいときは
標準でSQLiteを使用できます
各アプリケーションのディレクトリ以下に指定したファイル名で
データベースの実体であるファイルが作成されます

SQLiteとは・・・
サーバとしてではなくアプリケーションに組み込まれて利用される軽量のデータベースです
アプリケーション上で扱うデータを保存しておきたいけど
サーバにわざわざ保持する必要がない場合には軽量なSQLiteは非常に有効です
例えば・・・
(1)データを次々に蓄積して、その中からデータを抽出するタイプのアプリケーション
単語帳・メッセンジャーなど
(2)データを永続的に保持しておくタイプのアプリケーション
家計簿・メモなど
(3)大量のデータから任意のデータを探すタイプのアプリケーション
辞書・データベースアプリなど

SQLiteで扱うことのできるデータは以下のものがあります
NULL NULL値
INTEGER 符号付整数
REAL 浮動小数点数
TEXT テキスト
BLOB Binary Large OBject。入力データをそのまま格納

SQLiteデータベースを作成する
まずはSQLiteデータベースを作成してみます
データベースの作成にはSQLiteOpenHelperクラスを使用します
SQLiteOpenHelperクラスのコンストラクタは次のようになります
SQLiteOpenHelper(Context context, String fileName,
 SQLiteDatabase.CursorFactory factory, int version) 
context・・・コンテキストオブジェクト
fileName・・・データベース名
factory・・・通常nullを指定
version・・・データベースのバージョン

コンストラクタとは・・・

今回はデータベース名を“blog_testdb”、データベースのバージョンを“1”
としました
記録するデータは
text形式の“Name”と“Tel”
integer形式の“Age”の3つとしました
まずはDatabaseHelperのクラスを作ります
作成する場所はsrcフォルダの中にあるアクティビティと同列の場所
(今回はsrc/blog/test)
を右クリックで新規→クラスを選びます
device75.png

名前に“DatabaseHelper”と入力しOKをおします
するとActivityと同列にDatabaseHelper.javaが作成されます
device76.png
中を以下のように変更します
package blog.test;

import android.content.Context;  
import android.database.sqlite.SQLiteDatabase;  
import android.database.sqlite.SQLiteOpenHelper;  
  
  
public class DatabaseHelper extends SQLiteOpenHelper {  
   
    // データベース名   
    private final static String DB_NAME = "blog_testdb";  
    // データベースのバージョン   
    private final static int DB_VER = 1;  
   
    //コンストラクタ  
    public DatabaseHelper(Context context) {  
        super(context, DB_NAME, null, DB_VER);  
    }  
  
    //onCreateメソッド 
    //データベースが作成された時に呼ばれます。
    @Override  
    public void onCreate(SQLiteDatabase db) {  
        String sql = "";  
        sql += "create table MyTable (";  
        sql += " _id integer primary key autoincrement";  
        sql += ",Name text not null";  
        sql += ",Tel text";  
        sql += ",Age integer";  
        sql += ")";  
        db.execSQL(sql);  
    }  
  
    /* 
     * onUpgradeメソッド 
     * onUpgrade()メソッドはデータベースをバージョンアップした時に呼ばれる
     */  
    @Override  
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
    
    }  
  
}  
データベースが存在しない状態でデータベースをオープンしようとすると
onCreateメソッドが呼ばれます
その中でMyTableというテーブルが作成されます
" _id integer primary key autoincrement"では
Noに自動連番で0から順番に数字が割り振られていきます

わかりやすくエクセルで例えると
データベース名・・・エクセルファイル名(○○.xls)
テーブル名・・・シート名(sheet1など)
テーブル・・・列(今回はNo・Name・Tel・Age)
これに自分で追加したい項目を行として追加していきます
これでDatabaseHelperクラスは完成しましたがデータベースは作成されていません
MainActivityでDatabaseHelperクラスを実行し
データベースを作成します
MainActibity.java
package blog.test;
 
import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
 
public class MainActivity extends Activity {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
    	        super.onCreate(savedInstanceState);
        setTitle("MainActivity");
        setContentView(R.layout.main);
        
        //データベースヘルパーのインスタンスを作成する(まだデータベースはできない)  
        DatabaseHelper dbHelper = new DatabaseHelper(this);  
        //データベースオブジェクトを取得する(データベースにアクセスすると作成される。)  
        SQLiteDatabase db = dbHelper.getWritableDatabase();   
        //データベースを閉じる  
        db.close();  
	
    }
}
これでpackage blog.test専用のデータベースが作成されました

データベースの確認の仕方
スポンサードリンク

posted by kenken at 14:17 | Comment(0) | TrackBack(0) | データベース SQLite | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。