初学Android,数据存储之使用SQLite数据库(四十六)
来源:互联网 发布:西安交大acca知乎 编辑:程序博客网 时间:2024/05/17 06:45
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"?><LinearLayout xmlns:android="http://schemas.android.com/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://schemas.android.com/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://schemas.android.com/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);}@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<Map<String , String>> list = (List<Map<String , String>>)data.getSerializable("data");//将List封装成SimpleAdapterSimpleAdapter adapter = new SimpleAdapter(ResultActivity.this , list, R.layout.line , new String[]{"word" , "detail"}, new int[]{R.id.word , R.id.detail});//填充ListViewlistView.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数据库(四十六)
- 初学Android,数据存储之使用SQLite数据库(四十五)
- Android数据存储之使用SQLite数据库存储数据
- Android 存储数据之3 使用SQLite数据库存储
- Android数据存储之SQLite数据库存储
- Android数据存储之SQLite数据库存储
- Android数据存储之SQLite数据库存储
- Android数据存储之:SQLite数据库存储
- Android 数据存储之SQLite数据库存储
- Android数据存储之SQLite数据库存储
- Android 之 使用嵌入式关系型SQLite数据库存储数据
- Android 数据存储之 SQLite嵌入式数据库
- Android数据存储之Sqlite数据库
- Android 数据存储 之 SQLite数据库详解
- Android 数据存储 之 SQLite数据库详解
- Android 数据存储 之 SQLite数据库详解
- Android 数据存储 之 SQLite数据库详解
- Android 数据存储 之 SQLite数据库详解
- BufferedReader与InputStream的心得
- HDU 4122--Alice's mooncake shop(单调队列)
- CSS webkit
- fortran如何获取命令行中输入的参数
- C#验证类 可验证:邮箱,电话,手机,数字,英文,日期,身份证,邮编,网址,IP
- 初学Android,数据存储之使用SQLite数据库(四十六)
- ShellBasedUnixGroupsMapping: got exception trying to get groups for user webuser
- 观察者模式
- AJAX POST数据中有特殊符号导致数据丢失的解决方法
- MySql5.0安装详细图解
- 《疯狂的程序员》经典语录~~句句真理
- 黑马程序员---交通灯管理系统
- 烦:DB2 V9.5 ERRORS:[encoding not supported]/[SQLCODE=-104, SQLSTATE=42601]
- Linux信号列表