初学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();
    	}
    }
}

用数据库查询工具看看刚刚插入记录




你可能感兴趣的:(Android,android,数据库,sqlite,存储,layout,string)