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 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/263973959
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック
×

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