初学Android、データストレージのSQLiteデータベースの使用(四十六)


SQLiteOpenHelperはAndroidが提供するsqliteデータベースを管理するツールクラスです
主にデータベースを作成し、データベースのバージョンを管理するために使用されます.このクラスは抽象クラスであり、このクラスを継承して実装する必要があるメソッドonCreate(SQLiteDatabase):データベースが初めて生産されるときにこのメソッドが呼び出され、一般的にこのメソッドでデータベーステーブルを生産します.onUpgrade(SQLiteDatabase,int,int):データベースのアップグレードが必要な場合、Androidシステムはこのメソッドをアクティブに呼び出します.一般的に、この方法でデータベース・テーブルを削除し、新しいデータベース・テーブルを構築します.もちろん、アプリケーションのニーズに応じて、他の操作が必要かどうかは異なります.onOpen(SQLiteDatabase):これはデータベースを開くときのコールバック関数であり、一般的には使用されません. 
プログラムでこのクラスのメソッドgetWritableDatabase()またはgetReadableDatabase()メソッドを呼び出すと、データがない場合、Androidシステムは自動的にデータベースを生産します.データベースの使用が完了したら、close()メソッドを呼び出してデータベースを閉じてください. 
次は単語の本プログラムの例です.フロントに単語を入力してデータベースに保存し、クエリーします.
line.xml



		
	


popup.xml


	


main.xml



	
继承SQLiteOpenHelper

package WangLi.IO.DataBaseHelper;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class MyDatabaseHelper extends SQLiteOpenHelper
{
	final String CREATE_TABLE_SQL =
		"create table dict(_id integer primary key autoincrement , word , detail)";

	public MyDatabaseHelper(Context context, String name, int version)
	{
		super(context, name, null, version);
	}

	@Override
	public void onCreate(SQLiteDatabase db)
	{
		//              
		db.execSQL(CREATE_TABLE_SQL);
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
	{
		System.out.println("--------onUpdate Called--------" 
			+ oldVersion + "--->" + newVersion);
	}
}
クエリー結果を表示するフォーム
package WangLi.IO.DataBaseHelper;

import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class ResultActivity extends Activity
{
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.popup);
		ListView listView = (ListView)findViewById(R.id.show);
		Intent intent = getIntent();
		//   intent      
		Bundle data = intent.getExtras();
		// Bundle        
		@SuppressWarnings("unchecked")
		List> list = 
			(List>)data.getSerializable("data");
		// List   SimpleAdapter
		SimpleAdapter adapter = new SimpleAdapter(
			ResultActivity.this , list
			, R.layout.line , new String[]{"word" , "detail"}
			, new int[]{R.id.word , R.id.detail});
		//  ListView
		listView.setAdapter(adapter);
	}
}
メインインタフェース
package WangLi.IO.DataBaseHelper;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
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.EditText;
import android.widget.Toast;

public class Dict extends Activity {
	MyDatabaseHelper dbHelper;
	Button insert = null;
	Button search = null;
	
	protected ArrayList> convertCursorToList(Cursor cursor)
	{
		ArrayList> result = 
				new ArrayList>();
		//  Cursor   
		while(cursor.moveToNext())
		{
			//          ArrayList 
			Map map = new HashMap();
			//        2 , 3   
			map.put("word", cursor.getString(1));
			map.put("detail", cursor.getString(2));
			result.add(map);
		}
		return result;
	}
	
	private void insertData(SQLiteDatabase db,
			String word,String detail)
	{
		//      
		db.execSQL("insert into dict values(null , ? , ?)"
			, new String[]{word , detail});
	}
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //  MyDatabaseHelper  ,        1,          
        //                     databases   
        dbHelper = new MyDatabaseHelper(this, "myDict.db3" , 1);
        insert = (Button)findViewById(R.id.insert);
        search = (Button)findViewById(R.id.search);
        insert.setOnClickListener(new OnClickListener(){
        	public void onClick(View source)
        	{
        		//      
        		String word = ((EditText)findViewById(R.id.word)).getText().toString();
        		String detail = ((EditText)findViewById(R.id.detail)).getText().toString();
        		//       
        		insertData(dbHelper.getReadableDatabase(), word, detail);
        		//      
        		Toast.makeText(Dict.this, "       ", 8000).show();
        	}
        });
        search.setOnClickListener(new OnClickListener(){
        	public void onClick(View source)
        	{
        		//      
        		String key = ((EditText)findViewById(R.id.key)).getText().toString();
        		//    
        		Cursor cursor = dbHelper.getReadableDatabase().rawQuery(
        				"select * from dict where word like ? or detail like ?", 
        				new String[]{"%" + key + "%","%" + key + "%"});
        		//    Bundler  
        		Bundle data = new Bundle();
        		data.putSerializable("data", convertCursorToList(cursor));
        		//    Intent
        		Intent intent = new Intent(Dict.this, ResultActivity.class);
        		intent.putExtras(data);
        		//  Activity
        		startActivity(intent);
        	}
        });
    }
    
    public void onDestroy()
    {
    	super.onDestroy();
    	//       MyDatabaseHelper  SQLiteDatabase
    	if(dbHelper != null)
    	{
    		dbHelper.close();
    	}
    }
}

データベース・クエリー・ツールを使用して、レコードを挿入したばかりのことを確認します.