咱们书接上文,继续来说说Android数据读取,这回,我们要讲的是Sqlite数据库的相关操作。以一个实例开始吧:

首先,上图,看看做成后的效果:

大概描述:类似于浏览器的收藏夹,网站名称,网站地址,网站描述,添加完成之后显示已添加的所有的内容,在ListView单击弹出是否删除对话框,删除成功后刷新视图并重新查询内容。

安卓提供了创建和使用SQLite数据库的API。SQLiteDataBase代表一个数据库对象,提供了操作数据库的一些方法,另外还有一个SQLiteOpenHelper工具类更简洁的功能。

实例的文件组织如下:

main.xml是添加界面,query.xml是查询界面,DBHelper是数据库操作类,MainActivity和QueryActivity分别对应main和query的Activity,其中,QueryActivity继承ListActivity。源代码如下:

DBHelper.java

package com.lzugis.database;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBHelper extends SQLiteOpenHelper
{
	//数据库名称
	private static final String DB_NAME="coll.db";
	//表名称
	private static final String TBL_NAME="CollTbl";
	//创建表SQL语句
	private static final String CREATE_TBL=" create table "
			+" CollTbl(_id integer primary key autoincrement,name text,url text,desc text)";
	//SQLiteDatabase实例
	private SQLiteDatabase db;

	/*
	 * 构造方法
	 */
	DBHelper(Context c){
		super(c,DB_NAME,null,2);
	};
	/*
	 * 创建表
	 * @see android.database.sqlite.SQLiteOpenHelper#onCreate(android.database.sqlite.SQLiteDatabase)
	 */
	public void onCreate(SQLiteDatabase db)
	{
		this.db=db;
		db.execSQL(CREATE_TBL);
	}
	/*
	 * 插入方法
	 */
	public void insert(ContentValues values)
	{
		//获得SQLiteDatabase实例
		SQLiteDatabase db=getWritableDatabase();
		//插入
		db.insert(TBL_NAME, null, values);
		//关闭
		db.close();
	}
	/*
	 * 查询方法
	 */
	public Cursor query()
	{
		//获得SQLiteDatabase实例
		SQLiteDatabase db=getWritableDatabase();
		//查询获得Cursor
		Cursor c=db.query(TBL_NAME, null, null, null, null, null, null);
		return c;
	}
	/*
	 * 删除方法
	 */
	public void del(int id)
	{
		if(db==null)
		{
			//获得SQLiteDatabase实例
			db=getWritableDatabase();
		}
		//执行删除
		db.delete(TBL_NAME, "_id=?", new String[]{String.valueOf(id)});
	}
	/*
	 * 关闭数据库
	 */
	public void colse()
	{
		if(db!=null)
		{
			db.close();
		}
	}
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// TODO Auto-generated method stub

	}
}

main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="网站名称" />

    <EditText
        android:id="@+id/EditTextName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10" >

        <requestFocus />
    </EditText>

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="网站地址" />

    <EditText
        android:id="@+id/EditTextUrl"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="网站描述" />

    <EditText
        android:id="@+id/EditTextDesc"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:ems="10" />

    <Button
        android:id="@+id/ButtonAdd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="添加" />

</LinearLayout>

MainActivity.java

package com.lzugis.database;

import android.os.Bundle;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {
	private EditText etName,etUrl,etDesc;
	private Button btnAdd;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		etName=(EditText)findViewById(R.id.EditTextName);
		etUrl=(EditText)findViewById(R.id.EditTextUrl);
		etDesc=(EditText)findViewById(R.id.EditTextDesc);

		btnAdd=(Button)findViewById(R.id.ButtonAdd);
		btnAdd.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				String name=etName.getText().toString();
				String url=etUrl.getText().toString();
				String desc=etDesc.getText().toString();
				//内容值实例
				ContentValues values=new ContentValues();
				//在value中添加信息
				values.put("name",name);
				values.put("url", url);
				values.put("desc", desc);
				//实例化数据帮助类
				DBHelper helper=new DBHelper(getApplicationContext());
				//插入数据
				helper.insert(values);
				//实例化intent
				Intent intent=new Intent(MainActivity.this,QueryActivity.class);
				//启动Activity
				startActivity(intent);
			}

		});
	}

	@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;
	}

}

query.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/text0"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingRight="10pt" />

    <TextView
        android:id="@+id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingRight="10pt" />

    <TextView
        android:id="@+id/text2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingRight="10pt" />

    <TextView
        android:id="@+id/text3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingRight="10pt" />

</LinearLayout>

QueryActivity.java

package com.lzugis.database;

import android.os.Bundle;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.DialogInterface;
import android.database.Cursor;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;

public class QueryActivity extends ListActivity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		//设置标题
		this.setTitle("浏览收藏信息");
		//实例化数据库帮助类
		final DBHelper helper=new DBHelper(this);
		//查询获得游标
		Cursor c=helper.query();
		//列表项数组
		String[] from={"_id","name","url","desc"};
		//列表项ID
		int[] to={R.id.text0,R.id.text1,R.id.text2,R.id.text3};
		//适配器
		SimpleCursorAdapter apt=new SimpleCursorAdapter(this,R.layout.query,c,from,to);
		//列表视图
		ListView listview =getListView();
		//为列表视图添加适配器
		listview.setAdapter(apt);

		//提示对话框
		final AlertDialog.Builder builder=new AlertDialog.Builder(this);
		//为listView添加监听器
		listview.setOnItemClickListener(new OnItemClickListener(){

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
					long arg3) {
				// TODO Auto-generated method stub
				final long temp=arg3;
				builder.setMessage("真的要删除记录吗?")
					   .setPositiveButton("是", new DialogInterface.OnClickListener() {
						@Override
						public void onClick(DialogInterface dialog, int which) {
							// TODO Auto-generated method stub
							//删除数据
							helper.del((int)temp);
							//重新查询
							Cursor c=helper.query();
							//列表项数组
							String[] from={"_id","name","url","desc"};
							//列表项ID
							int[] to={R.id.text0,R.id.text1,R.id.text2,R.id.text3};
							//适配器
							SimpleCursorAdapter apt=new SimpleCursorAdapter(getApplicationContext(),R.layout.query,c,from,to);
							//列表视图
							ListView listview =getListView();
							//为列表视图添加适配器
							listview.setAdapter(apt);
						}
					})
					.setNegativeButton("否", new DialogInterface.OnClickListener() {

						@Override
						public void onClick(DialogInterface dialog, int which) {
							// TODO Auto-generated method stub
						}
					});
				AlertDialog ad=builder.create();
				ad.show();
			}			

		});
		helper.close();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.query, menu);
		return true;
	}

}

附件:

有需要源码的请移步:http://download.csdn.net/detail/gisshixisheng/6733227

Android数据读取之Sqlite数据库操作的更多相关文章

  1. Android数据存储之SQLite数据库

    Android数据存储 之SQLite数据库简介 SQLite的相关知识,并结合Java实现对SQLite数据库的操作. SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库引擎. ...

  2. 【Android】实验8 SQLite数据库操作2016.5.12

    实验8  SQLite数据库操作 [目的] 设计一个个人通讯录,掌握Android平台下的数据库开发,该个人通讯录主要包括联系人列表和联系人详细信息等界面. [要求] 程序主界面是通讯录的目录显示手机 ...

  3. Android 数据存储之 SQLite数据库存储

    ----------------------------------------SQLite数据库---------------------------------------------- SQLi ...

  4. 【Android 应用开发】Android 数据存储 之 SQLite数据库详解

    . 作者 :万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/19028665 . SQLiteDataBase示例程序下 ...

  5. Android数据存储之SQLite 数据库学习

    Android提供了五种存取数据的方式 (1)SharedPreference,存放较少的五种类型的数据,只能在同一个包内使用,生成XML的格式存放在设备中 (2) SQLite数据库,存放各种数据, ...

  6. Android 数据存储 之 SQLite数据库详解

    . 作者 :万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/19028665 . SQLiteDataBase示例程序下 ...

  7. Android数据存储引擎---SQLite数据库

    目标:是否可以在PC端桌面上使用SQLite数据库制作一个财务文件? 目录: 来源: 实践: 总结和比较: SQLite数据简介 是什么,内部结构是怎样的,数据库和表的关系是什么 有什么用 常用的操作 ...

  8. Android数据存储之SQLite的操作

    Android作为一个应用在移动设备上的操作系统,自然也就少不了数据的存储.然而SQLite作为一个轻型的关系型数据库,基于其轻量.跨平台.多语言接口及安全性等诸多因数考虑,因而Android较大的数 ...

  9. 我的Android六章:Android中SQLite数据库操作

    今天学习的内容是Android中的SQLite数据库操作,在讲解这个内容之前小编在前面有一篇博客也是讲解了SQLite数据库的操作,而那篇博客的讲解是讲述了 如何在Window中通过DOM来操作数据库 ...

随机推荐

  1. vmvare11克隆centos虚拟机

    一.现在的虚拟机软件已经很强大了,基本上能省的操作配置,都能给用户考虑到 用vmvare安装虚拟机很简单,安装完成之后,对于不了解情况的人可能会发现虚拟机无法上网(共享主机ip的方式) 为了能够上网, ...

  2. BKDRHash函数

    unsigned int BKDRHash(char*str) { unsigned ;// 31 131 1313 13131 131313 etc.. unsigned ; while(*str) ...

  3. 微信小程序快速开发

    微信小程序快速开发 一.注册小程序账号,下载IDE 1.官网注册https://mp.weixin.qq.com/,并下载IDE. 2.官方文档一向都是最好的学习资料. 注意:1)注册账号之后会有一个 ...

  4. 20145120黄玄曦《网络对抗》MSF基础应用

    20145120黄玄曦<网络对抗>MSF基础应用 准备工作 本来决定就是老师提供的XP虚拟机了,做着做着发现因为打补丁以及语言的问题,需要另外的虚拟机. 求来了不那么健壮的虚拟机,环境如下 ...

  5. 20165101 实验二 Java面向对象程序设计

    20165101 实验二 Java面向对象程序设计

  6. Easy-RSA 3快速入门自述文件

    Easy-RSA 3快速入门自述文件 这是使用Easy-RSA版本3的快速入门指南.运行./easyrsa -h可以找到有关使用和特定命令的详细帮助.可以在doc /目录中找到其他文档. 如果您从Ea ...

  7. 深入理解JVM 垃圾收集器(上)

    HotSpot虚拟机中的垃圾收集器 GC评价标准 GC调优 响应时间 吞吐量 1.新生代收集器 Serial收集器 ParNew收集器 Parallel Scavenge收集器 2.老年代收集器 Se ...

  8. AMD C1E SUPPORT

    •C1E是一种电源管理状态,它可以让处理器节能不限于处理器内核.在CIE状态,可以通过降低内存时钟速度.关闭HT技术,来降低处理器能耗.这种新功能对于12核的处理器极其重要,因为这种处理器在设计上既增 ...

  9. Dispatcher initialization failedUnable to load configuration 解决办法

    检查<package name="action" extends="struts-default"></package>中是否有exte ...

  10. Javascript -- 级联菜单, javascript解析xml文件

    1. cities.xml 保存省份和城市 <?xml version="1.0" encoding="GB2312"?> <china> ...