SQLiteOpenHelper

SQLiteOpenHelper是android提供的一个管理数据库的工具类,可用于管理数据库的创建和版本更新。

一般的用法是创建SQLiteOpenHelper的子类,并扩展它的onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db,int oldVersion,newVersion)方法。

SQLiteOpenHelper包含如下常用方法:

sychronized SQLiteDatabase getReadableDatabase() 以读写的方式打开数据库对应的SQLiteDataBase对象
sychronized SQLiteDatabase getWriteableDataBase() 以写的方式打开数据库对应的SQLiteDataBase对象
abstract void onCreate(SQLiteDatabase db) 当第一次创建数据库时回调该方法
abstract void onUpgrade(SQLiteDatabase db,int oldVersion,newVersion) 当数据库版本更新时回调该方法
sychronized void close() 关闭所有打开的SQLiteDatabase

实例如下:

布局文件==》main
<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=".MainActivity" > <EditText
android:id="@+id/edit1"
android:layout_width="match_parent"
android:layout_height="wrap_content" /> <EditText
android:id="@+id/edit2"
android:layout_width="match_parent"
android:layout_height="wrap_content" /> <Button
android:id="@+id/btnInsert"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="添加生词" /> <EditText
android:id="@+id/edit3"
android:layout_width="match_parent"
android:layout_height="wrap_content" /> <Button
android:id="@+id/btnQuery"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="查询" /> </LinearLayout>
result.xml==>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="match_parent" /> <EditText
android:id="@+id/word"
android:layout_width="match_parent"
android:layout_height="wrap_content" /> <EditText
android:id="@+id/detial"
android:layout_width="match_parent"
android:layout_height="wrap_content" /> </LinearLayout>
代码实现==》
package com.example.mysqlite2; import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log; public class MyDatabaseHelper extends SQLiteOpenHelper
{
final String CREATE_TABLE_SQL = "create table dict(_id integer primary key autoincrement,word,detial)"; public MyDatabaseHelper(Context context, String name, int version)
{
super(context, name, null, version);
Log.i("swg", "-----------MyDatabaseHelper------------");
} @Override
public void onCreate(SQLiteDatabase db)
{
// 第一个使用数据库时自动见表
db.execSQL(CREATE_TABLE_SQL);
Log.i("swg", "-----------创建表成功------------");
} @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
System.out
.println("-----------onUpgrade----------" + oldVersion + "-------->" + newVersion);
} } package com.example.mysqlite2; import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map; import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast; public class MainActivity extends Activity
{
MyDatabaseHelper dbHelper;
EditText edit1;
EditText edit2;
EditText edit3;
String dbName = "test.db3"; @Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 创建MyDatabaseHelper对象,指定数据库版本为1,此处使用相对路径
// 数据库文件会自动保存在程序的数据文件夹下的databases目录下
dbHelper = new MyDatabaseHelper(this, dbName, 1); edit1 = (EditText) this.findViewById(R.id.edit1);
edit2 = (EditText) this.findViewById(R.id.edit2);
edit3 = (EditText) this.findViewById(R.id.edit3);
Button btnInsert = (Button) this.findViewById(R.id.btnInsert);
Button btnQuery = (Button) this.findViewById(R.id.btnQuery);
btnInsert.setOnClickListener(new MyButtonOnClick());
btnQuery.setOnClickListener(new MyButtonOnClick());
} private class MyButtonOnClick implements OnClickListener
{
@Override
public void onClick(View v)
{
switch (v.getId())
{
case R.id.btnInsert:
String word = edit1.getText().toString();
String detial = edit2.getText().toString(); Log.i("swg", "insert content==" + word + "=========" + detial);
// 插入生词记录
insertData(dbHelper.getReadableDatabase(), word, detial);
Toast.makeText(MainActivity.this, "添加生词成功", Toast.LENGTH_LONG).show();
break;
case R.id.btnQuery:
String key = edit3.getText().toString();
Log.i("swg", "key==" + key);
// 执行查询
String sql = "select * from dict where word like ? or detial like ? ";
Cursor cursor = dbHelper.getReadableDatabase().rawQuery(sql,
new String[] { "%" + key + "%", "%" + key + "%" }); Bundle data = new Bundle();
data.putSerializable("data", convertCursorToList(cursor)); Intent intent = new Intent(MainActivity.this, ResultActivity.class);
intent.putExtras(data);
startActivity(intent);
break;
}
} private ArrayList<Map<String, String>> convertCursorToList(Cursor cursor)
{
ArrayList<Map<String, String>> result = new ArrayList<Map<String, String>>();
while (cursor.moveToNext())
{
Map<String, String> map = new HashMap<String, String>();
map.put("word", cursor.getString(1));
map.put("detial", cursor.getString(2));
result.add(map);
}
return result;
} private void insertData(SQLiteDatabase db, String word, String detial)
{
String sql = "insert into dict values (null,?,?)";
db.execSQL(sql, new String[] { word, detial });
} } @Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} @Override
protected void onDestroy()
{
super.onDestroy();
// 退出程序时关闭MyDatabaseHelper里的SQLitedatabase
if (dbHelper != null)
dbHelper.close();
} } package com.example.mysqlite2; import java.util.List;
import java.util.Map; import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListView;
import android.widget.SimpleAdapter; public class ResultActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.result); ListView lv = (ListView) this.findViewById(R.id.lv);
Intent intent = getIntent();
Bundle data = intent.getExtras();
@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.result,
new String[] { "word", "detial" }, new int[] { R.id.word, R.id.detial });
int count = adapter.getCount();
Log.i("swg", "查到" + count + "条");
lv.setAdapter(adapter);
} }

注意:AndroidMainfest.xml需要添加==》<activity android:name="com.example.mysqlite2.ResultActivity" android:theme="@android:style/Theme.Dialog"/>

运行效果:

注意:android实现系统自带样式如下方式:

android:theme="@android:style/Theme.Dialog" : Activity显示为对话框模式

android:theme="@android:style/Theme.NoTitleBar" : 不显示应用程序标题栏

android:theme="@android:style/Theme.NoTitleBar.Fullscreen" : 不显示应用程序标题栏,并全屏

android:theme="Theme.Light ": 背景为白色

android:theme="Theme.Light.NoTitleBar" : 白色背景并无标题栏

android:theme="Theme.Light.NoTitleBar.Fullscreen" : 白色背景,无标题栏,全屏

android:theme="Theme.Black" : 背景黑色

android:theme="Theme.Black.NoTitleBar" : 黑色背景并无标题栏

android:theme="Theme.Black.NoTitleBar.Fullscreen" : 黑色背景,无标题栏,全屏

android:theme="Theme.Wallpaper" : 用系统桌面为应用程序背景

android:theme="Theme.Wallpaper.NoTitleBar" : 用系统桌面为应用程序背景,且无标题栏

android:theme="Theme.Wallpaper.NoTitleBar.Fullscreen" : 用系统桌面为应用程序背景,无标题栏,全屏

android:theme="Theme.Translucent : 透明背景

android:theme="Theme.Translucent.NoTitleBar" : 透明背景并无标题

android:theme="Theme.Translucent.NoTitleBar.Fullscreen" : 透明背景并无标题,全屏

android:theme="Theme.Panel ": 面板风格显示

android:theme="Theme.Light.Panel" : 平板风格显示

android学习笔记50——SQLiteOpenHelper、android实现系统自带样式的更多相关文章

  1. Android学习笔记50:使用WebView控件浏览网页

    在Android中,可以使用Webview控件来浏览网页.通过使用该控件,我们可以自制一个简单的浏览器,运行效果如图1所示. 图1 运行效果 1.WebView 在使用WebView控件时,首先需要在 ...

  2. Android学习笔记_51_转android 加载大图片防止内存溢出

    首先来还原一下堆内存溢出的错误.首先在SD卡上放一张照片,分辨率为(3776 X 2520),大小为3.88MB,是我自己用相机拍的一张照片.应用的布局很简单,一个Button一个ImageView, ...

  3. Android学习笔记:对Android应用进行单元测试

     第一步:在AndroidManifest.xml中加入如下两段代码: <manifest xmlns:android="http://schemas.android.com/ap ...

  4. Android学习笔记之:android更新ui的几种经常用法

    Android主线程不能运行耗时操作.我们通常是在子线程中运行耗时操作, 我们在运行完耗时操作后,我们一般能够通过下面几种方式来实现ui界面的更新. 首先是布局文件: <LinearLayout ...

  5. Android学习笔记----解决“com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536”问题

    同时在工程中引入了多个第三方jar包,导致调用的方法数超过了android设定的65536个(DEX 64K problem),进而导致dex无法生成,也就无法生成APK文件. 解决办法如下: 1.谷 ...

  6. Android学习笔记36:使用SQLite方式存储数据

    在Android中一共提供了5种数据存储方式,分别为: (1)Files:通过FileInputStream和FileOutputStream对文件进行操作.具体使用方法可以参阅博文<Andro ...

  7. 【转】 Pro Android学习笔记(七四):HTTP服务(8):使用后台线程AsyncTask

    目录(?)[-] 5秒超时异常 AsyncTask 实现AsyncTask抽象类 对AsyncTask的调用 在哪里运行 其他重要method 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注 ...

  8. 【转】Pro Android学习笔记(七):了解Content Provider(下上)

    我们通过一个Content Provider小例子进行详细说明.数据源是一个SQLite数据库,名字为books.db,该数据库只含有一个表格,名字为books.表格中含有name,isbn,auth ...

  9. Android学习笔记之Activity详解

    1 理解Activity Activity就是一个包含应用程序界面的窗口,是Android四大组件之一.一个应用程序可以包含零个或多个Activity.一个Activity的生命周期是指从屏幕上显示那 ...

随机推荐

  1. break和continue的区别

    break是结束整个循环体,continue是结束单次循环

  2. 配置jdk

    java_home :D:\apps\common\jdk\jdk8\jdk18045\jdk1.8.0_45 classpath: .;%JAVA_HOME%\lib\dt.jar;%JAVA_HO ...

  3. iOS开发UI篇—Quartz2D使用(矩阵操作)

    iOS开发UI篇—Quartz2D使用(矩阵操作) 一.关于矩阵操作 1.画一个四边形 通过设置两个端点(长和宽)来完成一个四边形的绘制. 代码: - (void)drawRect:(CGRect)r ...

  4. DeepLearning之路(一)逻辑回归

    逻辑回归 1.  总述 逻辑回归来源于回归分析,用来解决分类问题,即预测值变为较少数量的离散值. 2.  基本概念 回归分析(Regression Analysis):存在一堆观测资料,希望获得数据内 ...

  5. java基础介绍(转)

    很全面的介绍JAVA基础的文档 Java 编程简介,第 1 部分: Java 语言基础 http://www.ibm.com/developerworks/cn/java/j-introtojava1 ...

  6. redis linux 安装及jedis连接测试

    一.安装配置 1:下载redis下载地址 http://code.google.com/p/redis/downloads/list推荐下载redis-1.2.6.tar.gz,之前这个版本同事已经有 ...

  7. mac 下配置protobuf 3.0 golang环境

    protobuf 3.0  与 之前的 protobuf 2.6 的语法是不一样的.需要重新安装一下,本机的环境是 OS X Yosemite  10.10.2 1. 不采用home brew安装,用 ...

  8. linux命令:more

    1.命令介绍: more用来逐页输出文件内容,空格键进入到下一页,b键返回到上一页. 2.命令格式: more [选项] 文件 3.命令参数 +n      从笫n行开始显示 -n       定义屏 ...

  9. codeforces 711D Directed Roads(DFS)

    题目链接:http://codeforces.com/problemset/problem/711/D 思路:由于每个点出度都为1,所以没有复杂的环中带环.DFS遍历,若为环则有2^k-2种,若为链则 ...

  10. AngularJS从构建项目开始

    AngularJS从构建项目开始 AngularJS体验式编程系列文章,将介绍如何用angularjs构建一个强大的web前端系统.angularjs是由Google团队开发的一款非常优秀web前端框 ...