初学Android,数据存储之使用SQLite数据库(四十六)
  zNRyot8onCGb 2024年07月26日 31 0

SQLiteOpenHelper是Android提供的一个管理sqlite数据库的一个工具类

主要用于创建一个数据库,并对数据库的版本进行管理。此类为一抽象类,使用是需要继承此类并实现该类的方法 
onCreate(SQLiteDatabase):在数据库第一次生产的时候会调用这个方法,一般我们在这个方法里边生产数据库表。 
onUpgrade(SQLiteDatabase,int,int):当数据库需要升级的时候,Android系统会主动的调用这个方法。一般我们在这个方法里边删除数据库表,并建立新的数据库表,当然是否还需要做其他的操作,完全取决于应用程序的需求。 
onOpen(SQLiteDatabase):这是当打开数据库时的回调函数,一般也不会用到。 

当在程序当中调用这个类的方法getWritableDatabase()或者getReadableDatabase()方法的时候,如果当时没有数据,那么Android系统就会自动生产一个数据库。数据库使用完后记得调用close()方法关闭数据库。 

下面是一个生词本程序例子,前台输入一些生词,存入数据库,然后再把它查询出来

初学Android,数据存储之使用SQLite数据库(四十六)

初学Android,数据存储之使用SQLite数据库(四十六)

line.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http:///apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <EditText android:id="@+id/word" android:layout_width="wrap_content" android:layout_height="wrap_content" android:width="120px" android:editable="false" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/detail" /> <EditText android:id="@+id/detail" android:layout_width="fill_parent" android:layout_height="wrap_content" android:editable="false" android:lines="3" /> </LinearLayout>
popup.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http:///apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" > <ImageView android:layout_width="fill_parent" android:layout_height="wrap_content" android:src="@drawable/line" /> <ListView android:id="@+id/show" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout>
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http:///apk/res/android"
	android:orientation="vertical"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent"
	>
<EditText 
	android:id="@+id/word"
	android:layout_width="fill_parent" 
	android:layout_height="wrap_content" 
	/>
<EditText  
	android:id="@+id/detail"
	android:layout_width="fill_parent" 
	android:layout_height="wrap_content" 
	android:lines="3"
	/>	
<Button  
	android:id="@+id/insert"
	android:layout_width="wrap_content" 
	android:layout_height="wrap_content" 
	android:text="@string/insert"
	/>
<EditText  
	android:id="@+id/key"
	android:layout_width="fill_parent" 
	android:layout_height="wrap_content" 
	/>	
<Button  
	android:id="@+id/search"
	android:layout_width="wrap_content" 
	android:layout_height="wrap_content" 
	android:text="@string/search"
	/>	
<ListView 
	android:id="@+id/show"
	android:layout_width="fill_parent" 
	android:layout_height="fill_parent" 
	/>			
</LinearLayout>
继承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<Map<String , String>> list = 
			(List<Map<String , String>>)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<Map<String,String>> convertCursorToList(Cursor cursor)
	{
		ArrayList<Map<String,String>> result = 
				new ArrayList<Map<String,String>>();
		//遍历Cursor结果集
		while(cursor.moveToNext())
		{
			//将结果集中的数据存入ArrayList中
			Map<String,String> map = new HashMap<String,String>();
			//取出查询记录中第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,数据存储之使用SQLite数据库(四十六)

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2024年07月26日 0

暂无评论

推荐阅读
zNRyot8onCGb
最新推荐 更多