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学习笔记:对Android应用进行单元测试

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

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

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

  4. Android 学习笔记之Volley(七)实现Json数据加载和解析...

    学习内容: 1.使用Volley实现异步加载Json数据...   Volley的第二大请求就是通过发送请求异步实现Json数据信息的加载,加载Json数据有两种方式,一种是通过获取Json对象,然后 ...

  5. Android学习笔记进阶之在图片上涂鸦(能清屏)

    Android学习笔记进阶之在图片上涂鸦(能清屏) 2013-11-19 10:52 117人阅读 评论(0) 收藏 举报 HandWritingActivity.java package xiaos ...

  6. android学习笔记36——使用原始XML文件

    XML文件 android中使用XML文件,需要开发者手动创建res/xml文件夹. 实例如下: book.xml==> <?xml version="1.0" enc ...

  7. Android学习笔记之JSON数据解析

    转载:Android学习笔记44:JSON数据解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种 ...

  8. udacity android 学习笔记: lesson 4 part b

    udacity android 学习笔记: lesson 4 part b 作者:干货店打杂的 /titer1 /Archimedes 出处:https://code.csdn.net/titer1 ...

  9. Android中实现全屏、无标题栏的两种办法(另附Android系统自带样式的解释)

    在进行UI设计时,我们经常需要将屏幕设置成无标题栏或者全屏.要实现起来也非常简单,主要有两种方法:配置xml文件和编写代码设置. 1.在xml文件中进行配置 在项目的清单文件AndroidManife ...

随机推荐

  1. javascript 百度地图API - demo

    <!DOCTYPE html> <html> <head> <meta name="viewport" content="ini ...

  2. 北京易信软科信息技术有限公司 问卷调查管理系统V2.0

    北京易信软科信息技术有限公司 问卷调查管理系统V2.0 支持题目模板配置.题型模板配置.选项模板配置,报表查询功能配置 按月建表功能 运用java开发.velocity技术实现页面加载功能,高性能,高 ...

  3. UI颜色值

    UI颜色值 http://xh.5156edu.com/page/z1015m9220j18754.html

  4. Hadoop 调研笔记

    由于从各光伏电站采集的数据量较大,必须解决海量数据的查询.分析的问题.目前主要考虑两种方式:1.  Hadoop大数据技术:2.  Oracle(数据仓库)+BI:    本文仅介绍hadoop的技术 ...

  5. 使用GDB进行调试

    下面是几篇非常好的GDB使用指南: http://www.cs.cmu.edu/~gilpin/tutorial/ http://oss.org.cn/ossdocs/gnu/linux/gdb.ht ...

  6. 关于VR技术和未来发展---转

    原文地址:http://mp.weixin.qq.com/s?__biz=MzA4MTIwNTczMQ==&mid=2651345594&idx=3&sn=2741ab7321 ...

  7. ASP.NET小知识

    所有System.Web.UI.*命名空间下的内容可以称为Web From,而System.Web.*命名空间下的其他内容可以称为ASP.NET. @section用法:配合母版页中的@RenderS ...

  8. Compound Interest Calculator4.0

    Compound Interest Calculator4.0 1.团队协作准备:每个同学在github上完成FORK,COMMENT(学号后三位+姓名),PR,MERGE的过程. 2.你的RP由你的 ...

  9. 仿UC天气下拉和微信下拉眼睛头部淡入淡出--第三方开源--PullLayout

    Android-PullLayout是github上的一个第三方开源项目,该项目主页是:https://github.com/BlueMor/Android-PullLayout 原作者项目意图实现类 ...

  10. python 检测文件编码等

    参考:http://my.oschina.net/waterbear/blog/149852 chardet模块,能够实现文本编码的检查, 核心代码: import chardet chardet.d ...