SQLiteOpenHelper 类
来源:互联网 发布:form表单提交数据加密 编辑:程序博客网 时间:2024/05/17 04:07
SQLiteOpenHelper 是Android提供的一个管理数据库的工具类,可以用于管理数据库创建和版本更新.一般的用法是创建 SQLiteOpenHelper 的子类,并扩展它的onCreate(SQLiteDatabase db)方法和 onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)方法.
常用方法如下:
- getReadableDatabase() : 以读写的方式打开数据库对应的 SQLiteOpenHelper 的对象.
- getWritableDatabase() : 以(写)的方式打开数据库对应的 SQLiteOpenHelper 的对象.
- onCreate(SQLiteDatabase db) 当第一次创建数据库时回调该方法.
- onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) :当数据库版本更新时回调该方法.
- close() : 关闭所有打开的database 数据库时调用.
下面一个实例来学习 SQLiteOpenHelper 的功能与用法.
package com.test.sqliteopenhelper;import android.content.Intent;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;import java.util.ArrayList;import java.util.HashMap;import java.util.Map;/** * SQLiteOpenHelper 的功能与用法. */public class MainActivity extends AppCompatActivity { MyDatabaseHelper dbHelper; Button insert = null; Button search = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //创建 MyDatabaseHelper 对象指定数据库版本为 1,此处使用相对路径// ..数据库文件自动会保存在程序的数据库文件夹的 database目录下 dbHelper = new MyDatabaseHelper(this, "myDict.db3", null, 1); insert = (Button) findViewById(R.id.insert); search = (Button) findViewById(R.id.search); insert.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //获取用户输入信息 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(MainActivity.this, "添加生词成功!", Toast.LENGTH_SHORT).show(); } }); search.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) {//获取用户输入的关键词 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 + "%"}); //创建一个 Bundle Bundle bundle = new Bundle(); bundle.putSerializable("data", converCursorToList(cursor)); //创建一个 Intent Intent intent = new Intent(MainActivity.this,ResultActivity.class); intent.putExtras(bundle); startActivity(intent); } }); } public ArrayList<Map<String, String>> converCursorToList(Cursor cursor) { ArrayList<Map<String, String>> result = new ArrayList<>(); //遍历 cursor while(cursor.moveToNext()){// 将cursor结果集中的数据存入 ArrayList 中 Map<String,String> 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 readableDatabase, String word, String detail) { //执行插入语句 readableDatabase.execSQL("insert into dict values(null,?,?)", new String[]{word, detail}); } @Override protected void onDestroy() { super.onDestroy(); //退出程序时,关闭 MyDatabaseHelper里的 SQLiteDatabase if (dbHelper != null) { dbHelper.close(); } }}
布局界面
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.test.sqliteopenhelper.MainActivity"> <EditText android:id="@+id/word" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="单词"/> <EditText android:id="@+id/detail" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="详情" android:lines="1"/> <Button android:id="@+id/insert" android:layout_gravity="center_horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/insert"/> <EditText android:hint="@string/key" 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:divider="#123" android:dividerHeight="2px" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/show" /></LinearLayout>
这是一个对话框风格的activity
<activity android:name=".ResultActivity" android:theme="@style/Theme.AppCompat.Light.Dialog" > </activity>
显示搜索结果的Activity
package com.test.sqliteopenhelper;import android.content.Intent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.widget.ListView;import android.widget.SimpleAdapter;import java.util.List;import java.util.Map;public class ResultActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_result); ListView listView = (ListView) findViewById(R.id.result); Intent intent = getIntent(); //获取Intent 携带的数据 Bundle bundle = intent.getExtras(); List<Map<String, String>> mapList = (List<Map<String, String>>) bundle.getSerializable("data"); //设置一个adapter SimpleAdapter adapter = new SimpleAdapter( ResultActivity.this, mapList, R.layout.item, new String[]{"word","detail"}, new int[]{R.id.word,R.id.detail}); listView.setAdapter(adapter); }}
显示结果的Activity的 布局界面
<?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" android:divider="?android:attr/dividerVertical" android:showDividers="beginning" android:dividerPadding="2dp" > <ListView android:id="@+id/result" android:layout_width="fill_parent" android:layout_height="fill_parent" /></LinearLayout>
条目布局
<?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>
0 0
- SQLiteOpenHelper 类
- SQLiteOpenHelper类
- SQLiteOpenHelper类
- SQLiteOpenHelper 类
- SQLiteOpenHelper类
- Android类参考---SQLiteOpenHelper
- Android中的SQLiteOpenHelper类
- Android---38---SQLiteOpenHelper类
- SQLiteOpenHelper类基础
- SQLiteOpenHelper
- SQLiteOpenHelper
- SQLiteOpenHelper
- SQLiteOpenHelper
- SQLiteOpenHelper
- SQLiteOpenHelper
- SqliteOpenHelper
- SQLiteOpenHelper
- SQLiteOpenHelper
- 叔恶!今日凌晨潮汕一汽车掉进水沟内,车上三女生身亡!
- CSS3边框 , 背景
- Flask(11)-博客文章
- android L 上切换字库方法
- 在适配器的构造方法添加假数据,然后请求数据后listview等的图片显示不完整,刷新之后才显示的问题。
- SQLiteOpenHelper 类
- 小问题记录
- 【杭电-oj】-2030-汉字统计
- Java虚拟机参数设置
- 三角蛋糕
- 自动触发按钮的点击事件
- Uri中ContentValues的用法+Android中ContentProvider总结
- Handler的基本原理浅谈
- 设计模式:创建型模式