初学Android,数据存储之使用SQLite数据库(四十六)
16lz
2022-05-09
SQLiteOpenHelper是Android提供的一个管理sqlite数据库的一个工具类
主要用于创建一个数据库,并对数据库的版本进行管理。此类为一抽象类,使用是需要继承此类并实现该类的方法
onCreate(SQLiteDatabase):在数据库第一次生产的时候会调用这个方法,一般我们在这个方法里边生产数据库表。
onUpgrade(SQLiteDatabase,int,int):当数据库需要升级的时候,Android系统会主动的调用这个方法。一般我们在这个方法里边删除数据库表,并建立新的数据库表,当然是否还需要做其他的操作,完全取决于应用程序的需求。
onOpen(SQLiteDatabase):这是当打开数据库时的回调函数,一般也不会用到。
当在程序当中调用这个类的方法getWritableDatabase()或者getReadableDatabase()方法的时候,如果当时没有数据,那么Android系统就会自动生产一个数据库。数据库使用完后记得调用close()方法关闭数据库。
下面是一个生词本程序例子,前台输入一些生词,存入数据库,然后再把它查询出来
line.xml
<?xml version="1.0" encoding="utf-8"?>
popup.xml
<?xml version="1.0" encoding="utf-8"?>
main.xml
<?xml version="1.0" encoding="utf-8"?>
继承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);}@Overridepublic void onCreate(SQLiteDatabase db){// 第一个使用数据库时自动建表db.execSQL(CREATE_TABLE_SQL);}@Overridepublic 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{@Overridepublic 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
主界面
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:你要的WebView与 JS 交互方式 都在这里了
- Android(安卓)中几种更新UI界面的方法
- Android(安卓)View视图绘制
- Android(安卓)Diaolog与AlertDialog用法实例
- 64位win7下Android(安卓)SDK Manager闪退的解决方法
- Android高手进阶教程(十六)---Android中Intent传递对象的两种方
- Android(安卓)资源文件使用方法详解
- 浅谈Java中Collections.sort对List排序的两种方法
- Python list sort方法的具体使用